Často používané příkazy pro ffmpeg
Několik jednořádnových příkazů pro konverze videa do h265, změnu rozlišení, snímkové frekvence, zjišťování informací o videu apod pomocí nástrojů ffmpeg
a ffprobe
.
Zjištění informací o videu
ffprobe input.mp4
Výstup např (upraveno, zkráceno):
Duration: 00:32:52.51, start: 0.000000, bitrate: 3955 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709),
1920x1080 [SAR 1:1 DAR 16:9], 3821 kb/s,
50 fps, 50 tbr, 90k tbn, 100 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D),
44100 Hz, stereo, fltp, 125 kb/s (default)
Takže video je v rozližení 1920x1080, kodek h264, 50fps. Můžeme jej chtít převést do h265 a framerate snížít na 25fps.
Stejné informace můžeme dostat přímo od samotnéh ffmpeg
:
ffmpeg -i input.mp4
Extrahování audia
Občas je potřeba z videa získat jen audio stopu (bez rekomprese):
ffmpeg -i input.mp4 -vn -acodec copy output.m4a
Pokud je souborů hodně, tak můžeme použít program parallel
:
ls -1 *.mp4 | parallel ffmpeg -i '{}' -vn -acodec copy '{.}'.m4a
Konstrukce příkazu parallel
:
'{}'
- jméno souboru'{.}'
- jméno souboru bez přípony
Výsledkem jsou soubory pojmenované původním jménem a příponou .m4a
.
Rekódování videa do h265
Kodek h265 je výrazně úspornější v případě vyšších rozlišení, takže pokud máte video soubory 2k, 4k apod. nesmyslně kódované v h264, tak převodem do h265 můžou velmi výrazně zhubnout. Kodek h265 má také mnohem lepší detekci statických scén, takže například přednáška, kde se nic nehýbe, může být v h265 klidně 10x menší.
Audio opět ponecháváme původní.
ffmpeg -i input.mp4 -c:a copy -c:v libx265 -crf 28 -preset slow output.mp4
Kde:
-c:a copy
- zkopírovat audio stream-c:v libx265
- video chceme v h265-crf 28
- konstatní kvalita videa (místo určování bitrate). Čím vyšší hodnota, tím horší kvalita, rozumný rozsah je od 22 do 30. Na přednášky a videa, kde na kvalitě obrazu příliš nezáleží (nebo se jedná jen o statické scény, tak 28 úplně stačí.-preset slow
- volitelně lze zadat také rychlost kódování, standardní je medium. Rychlost ovlivňuje jednak rychlost kódování a velikost výstupního souboru (podobně jako stupeň komprese u běžných programů typugz
,xz
), ale také kvalitu obrazu. Takže, pokud chceme mít kvalitní výstup, vybereme (krom-crf 22
), také-preset slow
nebo nižší.
Více v dokumentaci.
Změna rozlišení
Vhodné např. pokud je video nesmyslně uloženo jako 4k a kamera sotva stačí na FullHD.
ffmpeg -i input.mp4 -c:a copy -c:v libx265 -crf 24 -vf scale=-1:1080 output.mp4
Kde:
-vf scale=-1:1080
- znamená změnu vertikálního rozlišení na 1080, přičemž horizontální bude stanoveno automaticky se zachováním poměru stran. Tímto můžeme snadno určit, zda má jít od SD (576), HDReady (720), FullHD (1080) apod.
Změna framerate
Některá videa jsou, kromě všeho výše uvedeného, také nahrávání v něčem jako 50
nebo 60 fps. Tam, kde to nedává smysl, můžeme velmi snadno změnit framerate na
něco rozumného. Ideálně polovinu toho původního, ať s tím ffmpeg
nemá moc
práce.
ffmpeg -i input.mp4 -c:a copy -c:v libx265 -crf 28 -r 25 output.mp4
Kde:
-r 25
je požadovaná nová snímková frekvence. Ideální je polovina původní.
Zostření
Někdy, při snížení velikosti, velmi pomůže obraz zaostřit. K tomu opět slouží -vf
:
ffmpeg -i input.mp4 -c:a copy -c:v libx265 -crf 24 -vf unsharp,scale=-1:720:flags=lanczos output.mp4
Vše současně
Vše můžeme kombinovat dohromady, takže např.:
ffmpeg -i input.mp4 -c:a copy \
-c:v libx265 -crf 28 -preset fast \
-r 25 -vf scale=-1:720 \
output.mp4
rychle převede video do 720 a 25fps v přijatelné kvalitě třeba pro přednášku.