Archiv der Kategorie: FFmpeg

Scripte zu FFmpeg

ffmpeg: 24fps zu 25fps

Möchte man ein 24 fps Clip mittels ffmpeg korrekt umwandeln kann man das in etwa so bewerkstelligen:

ffmpeg -i input.ext -r 25 -vf "setpts=(1/1,04166666666667)*PTS" [codec settings] output.ext

Mit diesem Beispiel würde zusätzlich noch ein Border angefügt:

ffmpeg -i input.ext -r 25 -vf "setpts=(1/1,04166666666667)*PTS" -vf scale=720:436,pad=720:576:0:70 -sws_flags lanczos -c:v mpeg2video -target pal-dvd -aspect:v 16:9 -c:a mp2 -b:a 224k -y output.ext

 

Batch: media-autobuild_suite v2.0

Von dem Compiler Script media-autobuild_suite gibt es jetzt die Version 2.0.

Die Compiler- Umgebung basiert nun auf MSYS2. Vorteil davon ist, dass sich die Umgebung immer aktuell hält, Updates werden automatisch installiert.

Da nun auch viele Libraries aus MSYS2 genommen werden, bleiben auch diese auf dem neusten Stand. Das System bleibt kleiner und läuft im gesamten schneller.

 

Viel Spaß damit!

https://github.com/jb-alvarado/media-autobuild_suite

ffmpeg: x265 encoding

ffmpeg unterstützt jetzt ja auch x265, was bei gleich Qualität zu x264 die Dateigröße fast um die Hälfte verkleinert. Vorausgesetzt natürlich dass man eine Version hat, in der x265 integriert wurde.

Bei einem Test ist mir aufgefallen dass das Encoding streikt wenn kein „aspect“ angegeben ist.

Daher hier mal ein Beispiel  wie Parameter für ffmpeg sein können:

1
2
ffmpeg -i input_%%04d.png -loglevel repeat+verbose ^
-pix_fmt yuv420p -aspect 16:9 -r 25 -c:v libx265 -x265-params crf=22 -preset slower -y output.mp4

Interessanterweise kann das File vlc nicht abspielen, weil er meint er kennt hev1 nicht.

Andere Möglichkeit ist daher das ganze mit mp4box zu mergen:

1
2
3
4
ffmpeg -i input_%%04d.png -loglevel repeat+verbose ^
-pix_fmt yuv420p -aspect 16:9 -r 25 -c:v libx265 -x265-params crf=22 -preset slower -y output.hevc
 
mp4box -add output.hevc output.mp4

media-autobuild_suite

Unter Linux gibt es ein tolles Script mit welchem sich das Kompilieren von ffmpeg und andere Tools für Windows automatisieren lässt.

https://github.com/rdp/ffmpeg-windows-build-helpers )

Etwas ähnliches habe ich jetzt auch für Windows geschrieben. Das Script läuft auch weitestgehend automatisch ab. Es muss lediglich ausgewählt werden ob man für Windows 32 bit, 64 bit, oder Beides kompiliert werden soll. Ob „non free“ Encoder, wie fdk aac, eingebunden werden soll und wie viele CPU Cores verwendet werden soll.

Für das Ausführen und verwenden ist es wichtig, dass das Script in einem Ordner kopiert und ausgeführt wird, welcher keine Leerzeichen im Pfad hat. Z.B.: C:\mingw

Da keine Registry Keys, oder Systemvariablen gesetzt werden, kann der Ordner, wenn er nicht mehr benötigt wird, problemlos gelöscht werden. Es bleiben keine Rückstände übrig.

Momentan werden kompiliert:

  • a52dec
  • bzip2
  • exiv2
  • fdkaac (standalone and lib for ffmpeg)
  • ffmpeg
  • faac (standalone and lib for ffmpeg)
  • fftw
  • flac (standalone)
  • fltk
  • fontconfig
  • freetype
  • frei0r
  • gettext
  • gsm
  • gnutls (standalone and lib for ffmpeg)
  • lame (standalone and lib for ffmpeg)
  • ImageMagick (standalone (32 bit))
  • jpeg
  • jpeg2000
  • jpegturbo
  • libass
  • libbluray
  • libcaca
  • libdvdcss
  • libdvdnav
  • libdvdread
  • libilbc
  • libmad
  • libmodplug
  • libmpeg2
  • libpng
  • libsoxr
  • libtiff
  • libtwolame
  • libutvideo
  • libxml2
  • libzvbi
  • lua
  • mediainfo cli (only 32 bit)
  • mp3lame (standalone and lib for ffmpeg)
  • mp4box (standalone)
  • mplayer (standalone)
  • orc
  • opencore-amr
  • openEXR (standalone and lib for ImageMagick)
  • openjpeg
  • ogg
  • opus
  • opus-tools (standalone)
  • qt4
  • rtmp (standalone and lib for ffmpeg)
  • schroedinger
  • sdl (for ffplay)
  • sdl_image
  • sox
  • speex (standalone and lib for ffmpeg)
  • theora
  • vlc player
  • vidstab
  • vpx (standalone and lib for ffmpeg)
  • vo-aacenc
  • vo-amrwbenc
  • vorbis
  • x264 (standalone and lib for ffmpeg)
  • x264 10 bit (standalone)
  • x265 (standalone and lib)
  • x265 16 bit (standalone)
  • xavs (standalone and lib for ffmpeg)
  • xvid
  • zlib

Finden tut ihr die neuste Version immer unter:

https://github.com/jb-alvarado/media-autobuild_suite

Viel Spaß damit!

 

( Da das Tool open source ist, ist die Nutzung natürlich auf eigene Gefahr… 🙂 )

Mit ffmpeg Videos für Nokia 206 komprimieren

Das Script liest mit ffprobe zuerst die Auflösung aus und korrigiert gegebenenfalls die Höhe. Für Avisynth wird zusätzlich mvtools2 und ffms2 benötigt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@echo off
Setlocal EnableDelayedExpansion 
 
for %%f in (%*) do (
 
	for /F %%g in ('ffprobe -v quiet -print_format default^=nk^=0:nw^=1 -show_streams -i %%f') do echo %%g>>"%%~nf.tmp"
	for /F "tokens=2 delims==" %%h in ('findstr width %%~nf.tmp') do set Width=%%h
	for /F "tokens=2 delims==" %%i in ('findstr height %%~nf.tmp') do set Height=%%i
 
	set /a newHeight=176*!Height!/!Width!
	set "infile=%%~sf"
 
	if !newHeight!==99 ( 
		set newHeight=100 
		) 
 
	echo.SetMTMode^(5, 4^) >> "%%~nf.avs"
	echo.LoadPlugin^("C:\Program Files (x86)\AviSynth 2.5\plugins\ffms2.dll"^) >> "%%~nf.avs"
	echo.LoadPlugin^("C:\Program Files (x86)\AviSynth 2.5\plugins\mvtools2.dll"^) >> "%%~nf.avs"
	echo.A = FFAudioSource^("!infile!"^) >> "%%~nf.avs"
	echo.V = FFVideoSource^("!infile!"^) >> "%%~nf.avs"
	echo.audiodub^(V,A^) >> "%%~nf.avs"
	echo.SetMTMode^(2^) >> "%%~nf.avs"
	echo.Lanczos4Resize^(176,!newHeight!^)>> "%%~nf.avs"
	echo.super = MSuper^(pel=2^)>> "%%~nf.avs"
	echo.backward_vec = MAnalyse^(super, isb = true^)>> "%%~nf.avs"
	echo.forward_vec = MAnalyse^(super, isb = false^)>> "%%~nf.avs"
	echo.MFlowFps^(super, backward_vec, forward_vec, num=15, den=1, ml=100^)>> "%%~nf.avs"
 
"ffmpeg.exe" -i %%~nf.avs -pix_fmt yuv420p -c:v libx264 -preset slower -crf 25 -profile:v Baseline -level 1.1 -maxrate 128K -bufsize 128K -acodec libfdk_aac -ar 22050 -ac 1 -ab 64k %%~nf_cell.mp4
 
del "%%~nf.tmp"
del "%%~nf.avs"
del "!infile!.ffindex"
)
 
echo.
echo....................................................................
echo.
echo.....................converting done................................
echo.
echo....................................................................
echo.
 
ping 127.0.0.0 -n 3 >nul
echo.
echo Window close in 15
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 10
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 5
echo.
ping 127.0.0.0 -n 5 >nul
echo.

FFmpeg Webstream aufzeichnen mit Timerfunktion

Zum aufzeichnen von Webstreams kann man sich auch eine Timerfunktion basteln. Es funktioniert momentan aber nur am aktuellen Tag.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@echo off
 
set time=%time%
set correntHour=%time:~0,2%
set correntMinutes=%time:~3,2%
set correntSeconds=%time:~6,2%
 
set /a corrTotalSec=%correntHour%*60*60+%correntMinutes%*60+%correntSeconds%
 
echo.
echo Aktuelle Zeit %correntHour%:%correntMinutes%:%correntSeconds%
echo.
echo.------------------------------------------------------------------
echo.Aufnahmezeit in Stunden und Minuten angeben, z.B. 20:5
echo.------------------------------------------------------------------
echo.
 
set /p recTime="Aufnahmezeit angeben: "
set recHour=%recTime:~0,2%
set recMinutes=%recTime:~3,2%
 
set /a recTotalSec=%recHour%*60*60+%recMinutes%*60
set /a sumSec=%recTotalSec%-%corrTotalSec%
 
echo.
echo.
if %sumSec% GTR 0 (
echo.Zur Aufnahme bereit
timeout /T %sumSec% /NOBREAK
)
echo.
echo.
 
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
 
C:\cmdtools\ffmpeg -i rtmp://adresse:port/folder/stream -c:v copy -c:a copy output\%year%-%month%-%day%.flv
 
 
pause

FFmpeg: Webstream aufzeichnen

Mit folgendem Script lassen sich Webstreams, welche in dem Protokoll rtmp gesendet werden aufzeichnen. Mit set year/month/day erhält die Datei als Namen das aktuelle Datum.

1
2
3
4
5
6
7
@echo off
 
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
 
C:\cmdtools\ffmpeg -y -i rtmp://link_zur_webseite.de/filename.flv -c:v copy -c:a copy output\path\%year%-%month%-%day%.flv