Lekce 8 - FFmpeg a transcoding - Rotace, titulky, metadata

V minulé lekci, FFmpeg a transcoding - Obrázky, jsme si ukázali jak získávat obrázky z filmů a i naopak vkládat obrázky do videa.

Dnes, abychom byli kompletní, si předvedeme ještě další možnosti, které nám FFmpeg nabízí. V FFmpeg tutoriálu se naučíme, jak se rotuje video a pracuje s titulky a metadaty.

Rotace videa

Často dochází k tomu, že při tvorbě videa člověk zapomene (nebo si to vůbec nepamatuje, protože mu to nepřipadá důležité), jak má držet kameru (telefon). Když chce pak video přehrát, je na obrazovce otočené. Tento problém FFmpeg také dokáže vyřešit.

Příklad

Takto otočíme video ve směru hodinových ručiček o 90°:

ffmpeg -i video.mp4 -vf "transpose=1" out.mp4

A takto zas otočíme video proti směru hodinových ručiček o 90°:

ffmpeg -i video.mp4 -vf "transpose=2" out.mp4

A do třetice, takto otočíme video proti směru hodinových ručiček o 180°:

ffmpeg -i video.mp4 -vf "transpose=2,transpose=2" out.mp4

S tímto bychom si měli bohatě vystačit. Více informací je případně např. "zde:.

Titulky

Titulky můžeme mít buď jako oddělený stream (softsubs) nebo jako součást bitové mapy videa (hardsubs, tyto titulky pak nejdou např. vypnout a jsou pevnou součástí videa, od toho i jejich název).

Pro definici titulků slouží parametr -c:s. Pokud bychom chtěli stávající titulky zachovat, lze to přes parametr -c:s copy.

Soubory titulků

Titulky můžeme definovat v externím souboru a pro ten existují různé formáty, např. *.srt, *.sub, apod. Specifikace standardu souborového formátu *.srt je zde. A podporované titulky v FFmpeg jsou specifikovány zde.

Příklad

My si nejdříve vyrobíme nějaký soubor titulků. Spustíme Notepad a nějaké si napíšeme:

0
00:00:01.000 --> 00:00:05.000
Nepodstatný text uvodniho videa

1
00:00:08.000 --> 00:00:10.000
Fontana

2
00:00:15.000 --> 00:00:20.000
Opet nějaky dalsi text

Soubor uložíme jako Titulky.srt, ve znakové sadě UTF-8 a nemějte aktivní zalamování řádků (Word wrap). Dále je možné provádět převody mezi soubory titulků.

Převod souboru titulků

Soubor titulků lze poté převést na jiný. Například takto převést titulky z typu .srt na .ass:

ffmpeg -i Titulky.srt Titulky.ass

Přidání titulků do videa

Nyní nahrajeme titulky přímo do souboru videa, aby nebyl potřeba ten externí, který třeba někdo neumí načíst.

Podpora kontejneru

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Je vhodné si nejdříve zkontrolovat kompatibilitu souborových kontejnerů a titulkových formátů.

V uvedených příkladech se nestanou fonty streamem a titulky se stanou nedílnou součástí obrazu (známé jako hardsubs, natvrdo přidané titulky). Což znamená, že už z videa nepůjdou odstranit.

Přidání .srt titulků přímo do videa

Nejjednodušší přidání titulků .srt do videa se provede takto:

ffmpeg -i video.mp4 -vf subtitles=Titulky.srt videoTitulky1.mp4

Přidání .ass titulků přímo do videa

Podobně to můžeme udělat přes .ass titulky. Nejdříve si vyrobíme soubor .ass titulků. No a pak jej do daného videa přes filtry vložíme:

ffmpeg -i video.mp4 -vf ass=Titulky.ass videoTitulky2.mp4

Nastavení písma titulků

Samozřejmě lze změnit i nastavení titulků, pokud nám font či velikost nevyhovuje. Zde definujeme velikost fontu a červenou barvu:

ffmpeg -i video.mp4 -vf "subtitles=Titulky.srt:force_style='Fontsize=30,PrimaryColour=&H0000ff&'" -c:a copy videoTitulky3.mp4

Výsledek:

TitulkyBarevne

Zkusme si další nastavení. Zde definujeme typ fontů, velikost fontu, odsazení od spodní hrany obrazovky, bílou barvu fontu a šedou barvu ohraničení fontu:

ffmpeg -i video.mp4 -vf "subtitles=Titulky.srt:force_style='FontName=Roboto,FontSize=32,OutlineColour=&H80000000,MarginV=20,PrimaryColour=&H00FFFFFF'" -c:a copy videoTitulky4.mp4

Výsledek:

TitulkyBiléSOramovanim

Nejvhodnější varianta je pracovat s titulky ve formátu .ass, který lze upravovat přes software Aegisub . Případně si lze prohlédnout další nastavení přes FFmpeg.

Přidání titulků jako softsubs

Titulky můžeme k videu přidat jako stream (známé jako softsubs), což je ta ideální možnost. Pokud ji formát podporuje, pak se to řeší příkazem níže. Nefunguje ovšem u formátu .mp4, nutno použít .mkv:

ffmpeg -i video.mkv -i Titulky.ass -codec copy -map 0 -map 1  videoTitulky7.mkv

Stejná je i varianta pro soubory .srt:

ffmpeg -i video.mkv -i Titulky.srt -codec copy -map 0 -map 1  videoTitulky8.mkv

Získání a odstranění titulků z videa

Titulky můžeme z videa načíst a případně odstranit.

Načtení titulků z videa

Získání titulků můžeme provést např. přes mapu. Podmínkou je, že titulky musí být streamem. U nestreamových titulků to nebude fungovat:

ffmpeg -i videoTitulky7.mkv -map 0:s:0 TitulkyZiskane.srt

Parametry příkazu jsou:

  • -map - Definice mapy vstupního souboru
  • 0:s:0 - Nastavíme stream titulků (s jako subtitle) ze vstupního souboru a vložíme jej do výstupního souboru

Odstranění titulků z videa

Odstranění titulků z multimediálního souboru provedeme následovně. Ovšem titulky musí být opět stream:

ffmpeg -sn -i videoTitulky8.mkv videoNeTitulky.mkv

Metadata souborového kontejneru

Už v úvodní lekci jsme si říkali, že skoro každý souborový kontejner podporuje metadata. Metadata jsou prakticky pouze pomocné informace souborového kontejneru. Každý typ kontejneru podporuje trochu jiná metadata. V tomto případě je nejlepší nastudovat si standard daného souborového kontejneru (souborového formátu) a co je podporováno a jak.

Metadata kontejneru vs. metadata streamu

Dá se říci, že existují dva typy metadat. Metadata pro souborový kontejner a metadata pro jednotlivé streamy (video, audio, titulky, obrázky atd.). Metadata souborového kontejneru nejsou metadata jednotlivých streamů.

Získání metadat

Nejdříve si vypíšeme informace o námi zvoleném videu, které jsme si vyrobili v dřívějších lekcích (přesněji v lekci FFmpeg a transcoding - Rozlišení, Bitrate):

ffprobe -i video3000K.mkv -hide_banner

Výsledek:

MetadataPuvodni

Vložení metadat do videa

Nyní do videa vložíme dané metainformace. Pokud chceme upravit danou metainformaci, stačí vlastně pouze stávající hodnotu přepsat. Protože jsme nespecifikovali parametry video a audio kodeku, dojde opět k defaultnímu překódování:

ffmpeg -i video3000K.mkv -metadata title="Titulek Filmu" -metadata year="2020" -metadata description="video s 3000 bitrate" -metadata language="Čeština" -vcodec copy -acodec copy video3000K_meta.mkv

Provedeme si kontrolní výpis:

ffprobe -i video3000K_meta.mkv -hide_banner

Zde můžeme pozorovat, jak se metadata uložila. Nicméně čeština se nezapsala. Je to pravděpodobně způsobeno tím, že formát .mkv nebo FFmpeg podporuje u metadat jen ASCII a nikoliv UTF-8 či jiné znakové sady:

MetadataUpravena

Odstranění metadat

Pokud chceme odstranit jen jeden záznam z metadat, provedeme to tímto příkazem:

ffmpeg -i video3000K_meta.mkv -metadata language='' -c:v copy -c:a copy video3000K_meta1.mkv

A pokud chceme odstranit všechna metadata? Příkaz je následující:

ffmpeg -i video3000K_meta.mkv -map_metadata -1 -c:v copy -c:a copy video3000K_meta2.mkv

Metadata a externí soubory

Metadata lze samozřejmě vkládat a získávat (dump/export nebo load/import) přes externí soubory podobně, jako tomu bylo u titulků. Takto se např. exportují metadata kontejneru:

ffmpeg -i video3000K_meta.mkv -f ffmetadata in.txt

Import metadat z externího souboru

Pokud bychom chtěli importovat externí soubor jako metadata, uděláme to takto:

ffmpeg -i video3000K.mkv -f ffmetadata -i in.txt -vcodec copy -acodec copy -map_metadata 1 video3000K_meta3.mkv

Výsledek:

Metadata

Export metadat do externího souboru

FFmpeg má umožňovat editace, přidání a smazání i metadat u jednotlivých streamů. Osobně nemám tuto funkcionalitu otestovanou. Pokud chceme vyexportovat metadata pro jednotlivé streamy, uděláme to takto:

ffmpeg -i video3000K.mkv -map_metadata 0 -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a -f ffmetadata in2.txt

Závěr

Náš kurz FFmpeg je u konce. Doufám, že jste se něco naučili a že vám znalosti v praxi pomohou. Samozřejmě v našem tutoriálu jsme neprošli úplně vše, co FFmpeg dokáže. Dá se ale říci, že podstatné a nejčastější funkce zde obsaženy jsou. Je možné, že v budoucnu ještě něco k tomuto tématu napíši (např. streamování přes síť, FFmpeg přehrávače .. ) nebo provedu rozšíření základních lekcí o pár dalších postupů.


 

Předchozí článek
FFmpeg a transcoding - Obrázky
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 (4)

 

 

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