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ů typu gz, 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.