IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

Prevedenej súboru v FFmpeg - Úprava audio a video súborov pomocou frameworku FFmpeg

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.

Porovnanie vstupu a výstupu - Úprava audio a video súborov pomocou frameworku FFmpeg

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á:

Porovnanie vstupu a výstupu - Úprava audio a video súborov pomocou frameworku FFmpeg

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 a
  • kodek 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:

Konverzia videa do H265 a mp3 - Úprava audio a video súborov pomocou frameworku FFmpeg

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
Podpora kodekov súborovými kontajnery

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.


 

Predchádzajúci článok
FFprobe - Analýza multimediálnych súborov
Všetky články v sekcii
Úprava audio a video súborov pomocou frameworku FFmpeg
Preskočiť článok
(neodporúčame)
Ffmpeg a transcoding - Rozlíšenie, Bitrate
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity