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í.

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:

Analýza flac hudebního souboru pomocí ffprobe - Úprava audio a video souborů pomocí frameworku FFmpeg

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:

Analyza AAC - Úprava audio a video souborů pomocí frameworku FFmpeg

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(deco­de)/kódovat(en­code). 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:

Výpis spojeného - Úprava audio a video souborů pomocí frameworku FFmpeg

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 je videoBezZvuku.mp4 -map 0:0 a zvuk1.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 stopy
  • video2audio.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.


 

Předchozí článek
FFmpeg a transcoding - Stříhání, skládání, výřezy
Všechny články v sekci
Úprava audio a video souborů pomocí frameworku FFmpeg
Přeskočit článek
(nedoporučujeme)
FFmpeg a transcoding - Obrázky
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
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