3. diel - Ffmpeg a transcoding - Kontajner, Kodek
V minulej lekcii, FFprobe - Analýza multimediálnych súborov , sme si ukázali, ako získať kľúčové informácie o audio / video stopách multimediálneho súboru a vysvetlili si čo vlastne znamenajú. Teraz nás čaká samotná úprava (transcoding) multimediálnych súborov.
V prípade transcodingu sa kódovanie / dekódovanie deje automaticky mimo našu kontrolu. FFmpeg podľa parametrov príkazu spozná, či je prekódovanie nutné alebo nie. Predvedieme si najmä úpravu video obsahu, pretože ten zaberá väčšinou 90-95% obsahu súborového kontajnera. Všetko si predvedieme na videu, ktoré sme si stiahli v minulej lekcii z uloz.to. Samozrejme si možno príklady skúšať aj na vašich videách, napr. Z telefónov, digitálnych kamier a pod.
Zmena súborového kontajnera (súborového formátu)
Ako sme si uviedli v prvej lekcii, existuje nepreberné množstvo súborových kontajnerov, ktorý slúži ako úložisko pre multimediálny obsah. Tu na tomto odkaze sa dá zistiť aké súborové formáty sú v FFmpeg podporované. Ako vidíte, množstvo formátov na dekódovanie (vstupy) je skutočne obrovské. Počet súborových kontajnerov na kódovanie (výstup) už tak ohromný nie je. Avšak tie najznámejšie podporované sú napr. Matroska (.mkv), Avi (.avi), Flash video (.flv), Ogg (.ogg), Mpeg (.mpeg), MP4 (.mp4) apod.. Samozrejme si je nutné najskôr overiť, či je vami požadovaný kontajner v FFmpeg podporovaný, či už ide o dekódovanie / kódovanie, než začnete niečo skúšať. Ďalej upozorním: neplatí, že každý súborový kontajner podporuje všetky kodeky. Môže nastať situácia, kedy FFmpeg ukončí svoju prácu s tým, že vami zvolený kontajner nepodporuje, alebo kontajner nepodporuje vami zvolený kodek.
Zmena formátu z mp4 na mkv
Pre začiatok si predvedieme, ako zmeníme súborový formát z * .mp4 na * .mkv. V tomto prípade sa konverzia súborového kontajnera vykoná vrátane kódovania / dekódovania defaultne nastavenými kodeky aj s ich parametre v FFmpeg:
ffmpeg -i video.mp4 video.mkv -hide_banner
Mňa osobne nikdy ich defaultné nastavenie nevyhovovalo.
Ak porovnáme vstupný a výstupný súbor, potom si všimneme, že došlo k zmenšeniu veľkosti súboru z 234mb na 191 MB. Po prehliadke výpisu je jasné, že to bolo spôsobené zmenou bitrate (hustotou dátového toku) z 43 MB na 35MB. Ďalej bol zmenený audio kodek z AAC na Vorbis.
Asi najvýhodnejšie riešenie je ponechať nastavenie audio aj video kodeku
vr. hustoty dátového toku na rovnakej úrovni. Tým sa zaistí rovnaká
kvalita videa i audia ako v predchádzajúcom kontajneri. Avšak vzniká riziko,
že daný kodek nemusí byť vo zvolenom súborovom kontajnera podporovaný.
Ponechanie nastavenia zabezpečíme pridaním dvoch parametrov pre video kodek
-vcodec copy
a audio kodek -acodec copy
:
ffmpeg -i video.mp4 -vcodec copy -acodec copy videoNEW.mkv -hide_banner
Pretože v tomto prípade nedochádza k dekódovanie / kódovanie, je transcoding veľmi rýchly. Ako vidíte, kodek u audia zostal rovnaký, hodnota dátového toku je identická:
Zmena kodeku (komprimačného algoritmu) pri videu / audia
V tejto časti si predvedieme, ako sa mení typ kodeku. Opäť je to
podobné, ako keď meníme typ súborového kontajnera. Najskôr overíme, či
FFmpeg podporuje daný kodek, viď. zoznam
podporovaných video kodekov pre zdrojový súbor. Tiež je nutné overiť, či
súborový kontajner podporuje multimediálne stopu vami vybraného kodeku. Ak
to nezistíte v dokumentácii, potom to jednoducho skúste cez príkaz
ffmpeg
a ak proces spadne, potom daná kombinácia nefunguje (tento
variant je rýchlejší, než štúdium dokumentácie).
Nami vybraný súbor máme v h264 a aac. Zmeníme ho (transcodujeme) do H265 (HEVC) a mp3. Kvalitu bitrate ponecháme na defaultu pre dané kodeky. Pretože meníme kodeky, automaticky dochádza k dekódovanie a kódovanie, čo nejakú dobu trvá. Ďalej pripomínam, aby ste si mohli púšťať filmy s ľubovoľnými kodeky na počítači, musíte mať dané kodeky nainštalované. A ak ich chcete púšťať v TV, set-top-boxoch, satelitných receiveroch, DVD (blu-ray) prehrávačoch, atď., Je nutné, aby dané zariadenie tento kodek podporovalo.
Pre zmenu kodeku použijeme buď tento príkaz:
ffmpeg -i video.mp4 -vcodec libx265 -acodec mp3 videoH265.mkv -hide_banner
Alebo môžeme použiť aj druhé označenie kodeku hevc
:
ffmpeg -i video.mp4 -vcodec hevc -acodec mp3 videoH265.mkv -hide_banner
Alternatívne je možné pre definíciu kodeku použiť aj parameter
-c:v kodek
, kde:
-c
hovorí FFmpeg, že sa jedná o definíciu kodeku,:v
hovorí FFmpeg, že sa jedná o video akodek
je definícia (označenie) kodeku.
Príkaz by teda bol:
ffmpeg -i video.mp4 -c:v libx265 -acodec mp3 videoH265.mkv -hide_banner
A výsledok:
Ako vidíte, video sa skonvertovala. Opäť urobte výpis cez
ffprobe
. Súbor sa nám zmenšil na cca 115 MB, defaultné
nastavenie znížilo u videa dátový tok na cca 21 Mb / sau audia došlo k
zníženiu dátového toku na 128 kb / s.
Zistenie označenie kodeku
Problémom môže byť zistiť názov parametra, ktorým
FFmpeg označíme daný typ kodeku. V príklade vyššie ste si
mohli všimnúť, že pre rovnaký kodek dokonca existujú dva parametre a to
libx265
a hevc
. Aby ste zistili skratku pre vybraný
kodek, existuje príkaz:
ffmpeg -codecs
Nájdite svoj vybraný kodek. V príklade si vyberieme video kodek MPEG-4
Microsoft verziu 3, jeho označenie msmpeg4v3
. DE
vo výpise označuje, že ho možno dekódovať (Decode) / kódovať
(Encode), takže ak by sme ho chceli využiť, potom príkaz bude
vyzerať takto:
ffmpeg -i video.mp4 -vcodec msmpeg4v3 -acodec mp3 videoMPEG4vv3.mkv -hide_banner
Označenie najrozšírenejších kodekov
Pre príklad si uvedieme pár najrozšírenejších kodekov. Nemám ich všetky otestované, sám kóduje len do h264, príp. H265 (hevc). Ani mpeg4 nepoužívam. Ak je niekde v zátvorke napísané testované, sám som tento kodek otestoval.
Typ kodeku (Rozšírený názov) | FFmpeg parameter |
---|---|
h264 (testované) | libx264 |
H265 (testované) | libx265 |
Xvid (testované) | libxvid |
MPEG-1 video (testované) | mpeg1video |
MPEG-2 video (testované) | mpeg2video |
MPEG-4 (testované) | mpeg4 |
VP8 (testované) | libvpx |
Google VP9 (testované) | libvpx-vp9 |
Windows Media Video 7 | wmv1 |
Windows Media Video 8 (testované) | wmv2 |
Windows Media Video 9 | WMV3 |
Dá sa povedať, že najväčší problém je prakticky vedieť, ktorý súborový kontajner (formát) podporuje aké kodeky (video aj audio kompresné algoritmy). Jednou z možností je cesta pokusu / omylu a ďalšie napr. Cez celkom prehľadnú tabuľku, kde sú zohľadnené najznámejšie kontajnery a kodeky. Nie sú tam uverejnené všetky, ale ako odrazový mostík v orientácii vám to pomôže.
V budúcej lekcii, Ffmpeg a transcoding - Rozlíšenie, Bitrate , sa budeme zaoberať zmenou rozlíšenie a bitrate.