Lekce 6 - FFmpeg a Transcoding - Audio
V minulé lekci, FFmpeg a transcoding - Stříhání, skládání, výřezy, jsme si zkusili stříhání videa, skládání více videí do jednoho, výřezy a změnu rychlosti.
Protože jsme věnovali poměrně dost prostoru videu (obrazu), bylo by vhodné se věnovat i audiu (zvuku)
FFmpeg - Audio
Princip je stále identický. V souborovém kontejneru je audio reprezentováno jako stopa (stream) s určitými vlastnostmi (viz. lekce FFprobe - Analýza multimediálních souborů). Vlastnosti audio stop jsou kanály, datový tok, kodek, četnost snímání a hloubka snímání.
Opět platí stejné pravidlo jako u videa, z horší nahrávky lepší nahrávku neuděláte. Respektive můžeme vytvořit nahrávku s větší velikostí souboru, ale na její kvalitu to nemá žádný efekt. Informace se vytvářet nedají.
Konfigurovat kvalitu audio stopy můžeme následujícími parametry:
-c:a
- nastaví typ audio kodeku, např.mp3
,aac
,flac
-b:a
nebo-ab
- nastaví hustotu datového toku z audio stopy-ar
- nastaví audio frekvenci (četnost snímání), např.22050
,44100
,48000
Hz-ac
- nastaví audio kanály-f
- specifikuje výstupní souborový kontejner (souborový formát)
Transcoding audio souborů
V této části se budeme opakovat, ale vnímejte to pouze jako souhrn.
Transcoding audia je naprosto analogický jako transcoding u videa. Nejdříve
si stáhneme nějaký audio soubor, např. nějaký
flac a daný soubor si z přejmenujeme na
hudba.flac
. Tento soubor si nyní zanalyzujeme pomocí
ffprobe
:
ffprobe -i hudba.flac
Výsledek:

Během prohlídky jsme zjistili, že soubor obsahuje i tzv. "video stopu" obsahující nějaký obrázek *.jpg. Délka audio stopy je 1:51.51 (skoro 2 minuty), kodek je typu flac a bitrate 1680 kb/s. Protože je nahrávka stereo, obsahuje tedy 2 kanály a četnost snímání je 48 000 Hz. Zde je seznam podporovaných audio kodeků. Lze vidět, že v seznamu podporovaných kodeků je flac podporován jak pro encoding tak i pro decoding. Taktéž i souborový formát je podporován.
Převod flac do mp3
Pokud bychom chtěli hudbu převést do formátu mp3 se 2 kanály, frekvencí 44100 a bitrate 192 kbit/s a souborový kontejner budeme chtít mp3, tak příkaz bude vypadat takto:
ffmpeg -i hudba.flac -c:a mp3 -b:a 192k -ar 44100 -ac 2 hudba1.mp3
Převod flac do aac
Nebo pokud bychom chtěli převést flac soubor do kodeku aac, opět 2 kanálové stereo, bitrate 256 kbit/s, frekvence 48000 a souborový kontejner aac, příkaz by byl následující:
ffmpeg -i hudba.flac -c:a aac -b:a 256k -ar 48000 -ac 2 hudba2.aac
Výsledek:

Problémem může být opět identifikace správného audio kodeku v
příkazu ffmpeg
. Opět si pomůžeme příkazem pro výpis
podporovaných kodeků:
ffmpeg -codecs
Audio kodeky se nacházejí na konci výpisu. Připomínám, že pro encoding
(zakódování) je nutný parametr E
. V dalším příkladu si
vybereme audio kodek, např. Vorbis, jeho označení je vorbis
.
DE
ve výpisu označuje, že jej lze
dekódovat(decode)/kódovat(encode). Pokud bychom jej chtěli využít, pak
příkaz bude vypadat takto:
ffmpeg -i hudba.flac -c:a vorbis -strict -2 -b:a 256k -ar 48000 -ac 2 hudba3.ogg -hide_banner
Parametr -strict -2
se používá u experimentálních kodeků a
to vorbis
v mé verzi ffmpeg je.
Pro příklad si uvedeme pár nejrozšířenějších kodeků:
Typ kodeku | FFmpeg parametr |
---|---|
Advanced audio Coding | aac |
G.722 ADPCM | adpcm_g722 |
FLAC (Free lossless audio codec) | flac |
MP2 (MPEG audio layer 2) | mp2 |
MP3 (MPEG audio layer 3) | mp3 |
PCM 32-bit little-endian | pcm_f32le |
Windows Media audio 1 | wmav1 |
Opus (Opus interactive audio codec) | opus |
Můžete se také podívat na seznam určitých souborových formátů (kontejnerů) a jejich podporovaných audio kodeků.
Získání audio stopy z multimediálního souboru
V některých případech se hodí získat nebo odstranit stopy z multimediálního souboru (audio, video, titulky). Použijeme k tomu následující parametry:
-an
- vypne neboli zakáže audio (audio no)-sn
- vypne neboli zakáže titulky (subtitle no)-vn
- vypne neboli zakáže video (video no)
Odstranění video stopy
Například pokud se rozhodneme z našeho vzorového příkladu odstranit video stopu, tzn. převedeme jej na audio soubor, příkaz bude následující:
ffmpeg -i video.mp4 -vn zvuk1.mp3
Pokud bychom chtěli odstranit video stopu a zároveň chtěli nastavit kodek a kvalitu audio stopy, a výslednou audio stopu uložit do mp3 souboru, tak příkaz vypadá takto:
ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 zvuk2.mp3
Pokud bychom chtěli získat audio stopu od určitého časového okamžiku k určitému časovému okamžiku, pak by to vypadalo takto:
ffmpeg -i video.mp4 -ss 00:00:05 -to 00:00:15 -vn -ar 44100 -ac 2 -ab 192 -f mp3 zvuk3.mp3
Získání audio stopy bez re-encodingu
Vytažení audio stopy můžeme provést také přes mapu bez re-encodingu:
ffmpeg -i video.mp4 -q:a 0 -map a zvuk1.mp3
Odstranění stopy titulků
Pokud bychom se chtěli zbavit titulků v multimediálním souboru, pak
parametr -vn
vyměníme za -sn
.
Odstranění audio stopy
Pokud bychom naopak chtěli odstranit audio stopu a nechat pouze němé video, tak se to dělá takto:
ffmpeg -i video.mp4 -an -vcodec copy videoBezZvuku.mp4
Samozřejmě není problém s dalšími parametry specifikovat kvalitu videa.
Vložení audio stopy do němého videa
Tato varianta je samozřejmě naprosto nejjednodušší. V předchozích příkladech jsme si vytvořili samostatné souborové kontejnery s audio stopou a samostatnou video stoupou. V tomto příkladu si je spojíme znovu do sebe:
ffmpeg -i zvuk1.mp3 -i videoBezZvuku.mp4 video.mpg
Výsledek:

Samozřejmě není problém si opět definovat parametry výstupního souboru videa. Například takto:
ffmpeg -i zvuk1.mp3 -i videoBezZvuku.mp4 -c:a aac -b:a 192k -ar 44100 -ac 2 -s 1280x720 -c:v libx265 -b:v 3000k videoSpoj1.mkv
Přidání více audio stop do souborového kontejneru
Někdy je vhodné mít ve videu více zvukových stop. Chceme mít například český zvuk a anglický zvuk. Takže je nutné dodatečné zvukové stopy přidat. V tomto případě se hodí používat pro více stejných typů stop mapy. My samozřejmě dvě hudební stopy v jiných jazycích nemáme, tak použijeme to, co máme. Prostě přidáme stejnou stopu dvakrát. A aby to nebylo úplně jednoduché, tak každou audio stopu nastavíme v jiném kodeku:
ffmpeg -i videoBezZvuku.mp4 -i zvuk1.mp3 -i zvuk2.mp3 -s 1280x720 -map 0:0 -map 1:0 -map 2:0 -c:v libx265 -b:v 3000k -c:a:0 aac -b:a 192k -ar 44100 -ac 2 -c:a:1 mp3 -b:a 192k -ar 48000 -ac 2 video2audio.mkv
Jelikož jsme předali více parametrů, pojďme si je vysvětlit:
-i videoBezZvuku.mp4 -i zvuk1.mp3 -i zvuk2.mp3
- jedná se o zdrojové soubory, které mají být spojeny-s 1280x720
- nastavíme rozlišení HD720-map 0:0 -map 1:0 -map 2:0
- definice mapy, první číslo nastavuje vstupní soubor a druhé číslo je stopa (stream) v souboru, jenž budeme používat, v našem příkladu jevideoBezZvuku.mp4
-map 0:0
azvuk1.mp3
je-map 1:0
-c:v libx265 -b:v 3000k
- nastavení kodeku a bitrate u video stopy-c:a:0 aac -b:a 192k -ar 44100 -ac 2
- nastavení kodeku a bitrate u první audio stopy-c:a:1 mp3 -b:a 192k -ar 48000 -ac 2
- nastavení kodeku a bitrate u druhé audio stopyvideo2audio.mkv
- jméno výstupního souboru
V další lekci, FFmpeg a transcoding - Obrázky, si řekneme něco o získání obrázků z filmu.