Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

8. diel - Ffmpeg a transcoding - Rotácia, titulky, metadáta

V minulej lekcii, Ffmpeg a transcoding - Obrázky , sme si ukázali ako získavať obrázky z filmov a aj naopak vkladať obrázky do videa.

Dnes, aby sme boli kompletné, si predvedieme ešte ďalšie možnosti, ktoré nám FFmpeg ponúka. V FFmpeg tutoriálu sa naučíme, ako sa rotuje video a pracuje s titulkami a metadátami.

Rotácie videá

Často dochádza k tomu, že pri tvorbe videa človek zabudne (alebo si to vôbec nepamätá, pretože mu to nepripadá dôležité), ako má držať kameru (telefón). Keď chce potom video prehrať, je na obrazovke otočené. Tento problém FFmpeg tiež dokáže vyriešiť.

Príklad

Takto otočíme video v smere hodinových ručičiek o 90 °:

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

A takto zas otočíme video proti smeru hodinových ručičiek o 90 °:

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

A do tretice, takto otočíme video proti smeru hodinových ručičiek o 180 °:

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

S týmto by sme si mali bohato vystačiť. Viac informácií je prípadne napr. "Tu :.

Titulky

Titulky môžeme mať buď ako oddelený stream (softsubs) alebo ako súčasť bitové mapy videa (hardsubs, tieto titulky potom nejdú napr. Vypnúť a sú pevnou súčasťou videa, od toho i ich názov).

Pre definíciu titulkov slúži parameter -c:s. Ak by sme chceli existujúce titulky zachovať, možno to cez parameter -c:s copy.

Súbory titulkov

Titulky môžeme definovať v externom súbore a pre ten existujú rôzne formáty, napr. *.srt, *.sub, apod. Špecifikácia štandardu súborového formátu *.srt je tu. A podporované titulky v FFmpeg sú špecifikované tu.

Príklad

My si najskôr vyrobíme nejaký súbor titulkov. Spustíme Notepad a nejaké 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

Súbor uložíme ako Titulky.srt, v znakovej sade UTF-8 a nemajte aktívny zalamovanie riadkov (Word wrap). Ďalej je možné vykonávať prevody medzi súbormi titulkov.

Prevod súboru titulkov

Súbor titulkov možné potom previesť na iný. Napríklad takto previesť titulky z typu .srt na .ass:

ffmpeg -i Titulky.srt Titulky.ass

Pridanie titulkov do videa

Teraz nahráme titulky priamo do súboru videa, aby nebol potreba ten externý, ktorý treba niekto nevie načítať.

Podpora kontajnera

Je vhodné si najskôr skontrolovať kompatibilitu súborových kontajnerov a titulkových formátov.

V uvedených príkladoch sa nestanú fonty streamu a titulky sa stanú neoddeliteľnou súčasťou obrazu (známe ako hardsubs, natvrdo pridanej titulky). Čo znamená, že už z videa nepôjdu odstrániť.

Pridanie .srt titulkov priamo do videa

Najjednoduchšie pridanie titulkov .srt do videa sa vykoná takto:

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

Pridanie .ass titulkov priamo do videa

Podobne to môžeme urobiť cez .ass titulky. Najskôr si vyrobíme súbor .ass titulkov. No a potom ho do daného videa cez filtre vložíme:

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

Nastavenie písma titulkov

Samozrejme možno zmeniť aj nastavenie titulkov, ak nám font či veľkosť nevyhovuje. Tu definujeme veľkosť fontu a červenú farbu:

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

výsledok:

TitulkyBarevne - Úprava audio a video súborov pomocou frameworku FFmpeg

Skúsme si ďalšie nastavenia. Tu definujeme typ fontov, veľkosť fontu, odsadenie od spodnej hrany obrazovky, bielu farbu fontu a šedú farbu orámovania 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ýsledok:

TitulkyBiléSOramovanim - Úprava audio a video súborov pomocou frameworku FFmpeg

Najvhodnejšie variant je pracovať s titulkami vo formáte .ass, ktorý možno upravovať cez softvér Aegisub. Prípadne si možno prezrieť ďalšie nastavenia cez FFmpeg.

Pridanie titulkov ako softsubs

Titulky môžeme k videu pridať ako stream (známe ako softsubs), čo je tá ideálna možnosť. Pokiaľ ju formát podporuje, potom sa to rieši príkazom nižšie. Nefunguje však pri formáte .mp4, nutné použiť .mkv:

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

Rovnaká je aj variant pre súbory .srt:

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

Získanie a odstránenie titulkov z videa

Titulky môžeme z videa načítať a prípadne odstrániť.

Načítanie titulkov z videa

Získanie titulkov môžeme vykonať napr. Cez mapu. Podmienkou je, že titulky musí byť streamy. U nestreamových titulkov to nebude fungovať:

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

Parametre príkazu sú:

  • -map - Definícia mapy vstupného súboru
  • 0:s:0 - Nastavíme stream titulkov (s ako subtitle) zo vstupného súboru a vložíme ho do výstupného súboru

Odstránenie titulkov z videa

Odstránenie titulkov z multimediálneho súboru vykonáme nasledovne. Ovšem titulky musí byť opäť stream:

ffmpeg -sn -i videoTitulky8.mkv videoNeTitulky.mkv

Metadáta súborového kontajnera

Už v úvodnej lekcii sme si hovorili, že skoro každý súborový kontajner podporuje metadáta. Metadáta sú prakticky iba pomocné informácie súborového kontajnera. Každý typ kontajneru podporuje trochu iná metadáta. V tomto prípade je najlepšie naštudovať si štandard daného súborového kontajnera (súborového formátu) a čo je podporované a ako.

Metadáta kontajnera vs. metadáta streamu

Dá sa povedať, že existujú dva typy metadát. Metadáta pre súborový kontajner a metadáta pre jednotlivé streamy (video, audio, titulky, obrázky atď.). Metadáta súborového kontajnera nie sú metadáta jednotlivých streamov.

Získanie metadát

Najskôr si vypíšeme informácie o nami zvolenom videu, ktoré sme si vyrobili v predchádzajúcich lekciách (presnejšie v lekcii FFmpeg a transcoding - Rozlíšenie, Bitrate):

ffprobe -i video3000K.mkv -hide_banner

výsledok:

MetadataPuvodni - Úprava audio a video súborov pomocou frameworku FFmpeg

Vloženie metadát do videa

Teraz do videa vložíme danej metainformácie. Ak chceme upraviť danú metainformácií, stačí vlastne len existujúce hodnotu prepísať. Pretože sme nešpecifikovali parametre video a audio kodeku, dôjde opäť k defaultnímu prekódovanie:

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

Vykonáme si kontrolný výpis:

ffprobe -i video3000K_meta.mkv -hide_banner

Tu môžeme pozorovať, ako sa metadáta uložila. Avšak Čeština sa nezapísala. Je to pravdepodobne spôsobené tým, že formát .mkv alebo FFmpeg podporuje u metadát len ASCII a nie UTF-8 či iné znakové sady:

MetadataUpravena - Úprava audio a video súborov pomocou frameworku FFmpeg

Odstránenie metadát

Ak chceme odstrániť len jeden záznam z metadát, prevedieme to týmto príkazom:

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

A ak chceme odstrániť všetky metadáta? Príkaz je nasledujúci:

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

Metadáta a externé súbory

Metadáta možno samozrejme vkladať a získavať (dump / export alebo load / import) cez externé súbory podobne, ako tomu bolo u titulkov. Takto sa napr. Exportujú metadáta kontajnera:

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

Import metadát z externého súboru

Ak by sme chceli importovať externý súbor ako metadáta, urobíme to takto:

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

výsledok:

metadáta - Úprava audio a video súborov pomocou frameworku FFmpeg

Export metadát do externého súboru

FFmpeg má umožňovať editácie, pridanie a zmazanie aj metadát pri jednotlivých streamov. Osobne nemám túto funkcionalitu otestovanú. Ak chceme vyexportovať metadáta pre jednotlivé streamy, urobí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áver

Náš kurz FFmpeg je u konca. Dúfam, že ste sa niečo naučili a že vám vedomosti v praxi pomôžu. Samozrejme v našom tutoriálu sme neprešli úplne všetko, čo FFmpeg dokáže. Dá sa ale povedať, že podstatné a najčastejšie funkcie tu obsiahnuté sú. Je možné, že v budúcnosti ešte niečo k tejto téme napíšem (napr. Streamovanie cez sieť, FFmpeg prehrávača ..) alebo prevediem rozšírenie základných lekcií o pár ďalších postupov.


 

Predchádzajúci článok
Ffmpeg a transcoding - Obrázky
Všetky články v sekcii
Úprava audio a video súborov pomocou frameworku FFmpeg
Č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