BF Summer sales
Pouze tento týden sleva až 80 % na HTML & CSS a JavaScript
80 % bodů zdarma na online výuku díky naší Letní akci!

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

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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

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
Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
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 (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!