Transcode – nastavení
Překódování zdroje ovlivňuje volbu kontejneru a způsob vysílání. Opět vám doporučuji přehledný seznam závislostí mezi kontejnery a kodeky na stránce streaming-features.
Pokud tápete při nastavování datového toku pro jednotlivé kodeky, může vám být nápomocno GUI rozhraní. Vyberte Média>Proud a přidejte nějaký soubor. Tlačítko Proud vás přenese do nastavení, kde pro Cíle přidejte třeba předvolený Soubor (doplňte jméno) a vyberte si profil pro překódování. Tlačítkem Další se přesunete do poslední záložky s nastavením pro překódování.
transcode{volba překódování}:modul pro vysílání (std, rtp, es, display, duplicate a jejich nastavení)
- vcodec – nový kodek pro video
- vb – datový tok videa v kbit/s
- fps – nastaví frekvenci snímků videa
- deinterlace – odstraní prokládání obrazu
- scale – změní velikost videa před překódováním
- width, height – mění velikost v pixelech u kódovaného videa
- acodec – nový kodek pro audio
- ab – datový tok audia v kbit/s
- samplerate – mění frekvenci audia
- channels – určí počet audio kanálů
- audio-sync – synchronizuje audio s videem
- scodec – kodek pro titulky
- soverlay – vloží titulky při kódování přímo do videa
- sfilter – aplikuje na video filtr
Transcode – příklady
Pravděpodobně nejvíce budete používat kontejner TS pro jeho možnosti vysílání.
MPEG1 + MPGA (mpeg1,TS)
vlc video.avi -sout '#transcode{vcodec=mp1v,vb=1024,scale=1,acodec=mpga,ab=196,channels=2,samplerate=48000}: std{access=http,mux=mpeg1,dst=:8080/video}'
Překódován AVI soubor do MPEG1
- datový tok pro video (vb) i audio (ab) v příkladu není pevně daný, použijte vámi preferované hodnoty
- vzorkovací frekvence audia (samplerate) se nastavuje většinou na 11 025, 22 050, 44 100, 48 000 Hz
- ve streamu je použit kontejner MPEG1, ale je možné použít i TS například pro udp
MPEG2 + MPGA (TS)
vlc video.avi --sout '#transcode{vcodec=mp2v,vb=1024,scale=1,acodec=mpga,ab=128,channels=2, samplerate=48000,deinterlace}:std{access=udp,mux=ts,dst=224.0.0.0,sap,name="video"}'
Odstraněno prokládání obrazu a překódováno do MPEG2.
H264 + MPGA (TS)
vlc video.avi --sout '#transcode{vcodec=h264,vb=2048,scale=0.6,acodec=mpga,ab=128,channels=2, samplerate=44100}:std{access=udp,mux=ts,dst=224.0.0.0,sap,name="video"}'
Obraz byl před překódováním do H264 zmenšen na tři pětiny původní velikosti
- scale ovlivňuje velikost obrazu zdrojového videa, nastavuje se desetinným číslem a obraz nejen zmenšuje, ale i zvětšuje
Dirac + MPGA (TS)
vlc video.avi --sout '#transcode{vcodec=drac,vb=1024,scale=1,acodec=mpga,ab=128,channels=2, samplerate=44100,width=640,height=480}:std{access=udp,mux=ts,dst=224.0.0.0,sap,name="video"}'
Výstupní video má nastavené rozlišení 640×480.
H264 + MPGA (MP4) – pouze pro ukládání
vlc video.avi --sout '#transcode{vcodec=h264,vb=1024,scale=1,acodec=mpga,ab=128,channels=2, samplerate=44100}:std{access=file,mux=mp4,dst=video.mp4}'
Kontejnery AVI, MOV a MP4 slouží pouze pro ukládání multimediálních dat. Příklad uvádím, i když z mého pohledu ztrácí takovéto překódování smysl, neboť budete-li chtít soubor video.mp4 později vysílat do sítě, je potřeba jej znovu překódovat.
Theora + Vorbis (OGG)
vlc video.avi --sout '#transcode{vcodec=theo,vb=1024,scale=1,acodec=vorb, ab=196,channels=2,samplerate=48000,sfilter=marq{marquee=pokusny_text,color=16776960}}:std {access=http,mux=ogg,dst=:8080/video}'
Do videa byl pomocí filtru vložen text
- filtr marg se používá pro vložení libovolného textu nebo k vložení aktuálního data a času
- do videa lze vložit i obrázek – logo (sfilter=logo)
- filtry se nastavují pomocí mnoha proměných, jejichž seznam získáte zadáním vlc -p marq --advancednebo vlc -p logo --advanced
Theora + Flac (OGG)
vlc video.avi --sout '#transcode{vcodec=theo,vb=1024,scale=1,acodec=flac,ab=128,channels=2, samplerate=48000,sfilter=marq{marquee=%d.%m.%Y,position=4,opacity=128}} :std{access=http,mux=ogg,dst=:8080/video}'
Do videa byl vložen aktuální datum, jehož umístění je střed horního okraje s nastavenou poloviční průhledností.
WMV + WMA (ASF)
vlc video.avi --sout '#transcode{vcodec=theo,vb=1024,scale=1,acodec=flac,ab=128,channels=2, samplerate=44100,audio-sync}:std{access=http,mux=asf,dst=:8080/video}'
Video bylo překódováno s vynucenou synchronizací audio stopy
- tato varianta překódování si se soubory typu AVI moc nerozumí (neustále v příkazovém řádku informuje o přetečení vyrovnávací paměti – překódované video je však většinou v pořádku)
DIV3 + MP3 (ASF)
vlc video.avi --sout '#transcode{vcodec=DIV3,vb=900,scale=1,acodec=mp3,ab=128,channels=2,samplerate=44100} :std{access=http,mux=asf,dst=:8080/video}'
I tento příklad trpí přetékáním vyrovnávací paměti při překódování souborů typu AVI.
VP80 + Vorbis (Webm)
vlc video.avi --sout '#transcode{vcodec=VP80,vb=2000,scale=1,acodec=vorb,ab=128,channels=2,samplerate=44100} :std{access=http,mux=webm,dst=:8080/video}'
Překóduje soubor AVI do formátu, který se často používá pro šíření na internetu.
Uvedené příklady jsou nejčastěji používané kombinace audio, video kodeků pro jednotlivé kontejnery. Kompletní seznam voleb pro vcodec, acodec naleznete na stránkách wiki, ale se zdejšími příklady byste měli zvládnout všechny běžné požadavky.
Soubor formátu AVI je zde jen jako zástupce všech zdrojů. Samozřejmě můžete použít i ostatní zdroje uvedené v předchozím díle. Stane-li se vaším zdrojem dat již probíhající stream, zjistěte si, v jakém kodeku je vysílán (v GUI volba Nástroje>Informace o kodeku). Můžete se tak vyhnout překódování nebo zvolit nastavení, jež nebude tak náročné na CPU.
Několik nastavení překódování pro audio soubory
CD (OGG)vcodec=none,acodec=s16l
MP3 (TS)vcodec=none,acodec=mp3
MP3 (MP4)vcodec=none,acodec=mpga
Vorbis (OGG)vcodec=none,acodec=vorb
Flac (OGG)vcodec=none,acodec=flac
Display – nastavení
Modul na obrazovce zobrazí vysílaný stream. Používá se povětšinou v kombinaci s modulem duplicate, kdy je možné zdroj vysílat (ukládat) i sledovat. K nastavení jsou dostupné jen tyto parametry:
- novideo – vypne obraz
- noaudio – vypne zvuk
- delay=<čas v ms> – nastaví prodlevu
Duplicate – nastavení
Zdroj dat bude duplikován pro každý zadaný parametr dst, který je základním parametrem modulu a jeho hodnotou se stávají ostatní moduly zpracovávající zdroj dat.
- dst= modul a jeho nastavení streamování
--ts-es-id-pid – interní ID pro jednotlivé části streamu (používá se nejčastěji u DVB zdroje, kde jsou nedílnou součástí i parametry programs= a program=)
select= parametr, díky němuž je možné duplikovat jednotlivé složky streamu a následující volby ovlivňují jejich (ne)vysílání:
- program= vybraný program (funguje jen u MPEG2/TS streamu)
- es= vybraná část streamu pomocí ID
- video= pouze video
- audio= pouze audio
- spu= pouze titulky
- noprogram, noes, novideo, noaudio, nospu – vysíláno bude vše, vyjma uvedeného
Shrnující příklady
vlc dvdsimple:///dev/dvd --sout-all --ttl 3 --sout '#duplicate{dst=std{access=udp,mux=ts,dst=224.0.0.0,sap,name=dvd}, dst=std{access=http,mux=ps,dst=:8080/dvd}}'
Jednoduché použití modulu duplicate pro vysílání obsahu DVD na udp i http adresu.
vlc hubda.mp3 --ttl 3 --sout '#duplicate{dst=std{access=udp,mux=ts,dst=224.0.0.1,sap,name=Original}, dst="transcode{vcodec=none,acodec=mpga,ab=256,samplerate=48000} :std{access=udp,mux=ts,dst=224.0.0.2,sap,name=Prekodovano}"}'
Vzniknou dva streamy. Na jedné adrese naladíte (třeba pomocí SAP) originální výstup použitého souboru a na druhé adrese si přehrajete již překódovaný výstup.
- Povšimněte si uvozovek, které ohraničují celý blok modulu transcode a jeho vysílání. Používají se, je-li modul transcode vnořen do modulu duplicate, kde bez takovéhoto označení bloku nebude překódování funkční.
vlc screen:// --screen-fps 25 --screen-height 100 --screen-width 100 --screen-follow-mouse --ttl 3 --sout '#transcode{vcodec=mp2v,vb=800,acodec=none}:duplicate{dst=std {access=udp,mux=ts,dst=224.0.0.3,sap,name=plocha},dst=es {access-video=file,mux-video=ps,dst-video=zaznamplochy.mpg}, dst=display{noaudio,delay=500}}'
Záznam, zobrazení a vysílání dění na části plochy
- Modul transcode nemusí být, na rozdíl od předchozího příkladu, uzavřen v bloku pomocí uvozovek, neboť zde není vnořen do modulu duplicate (zde je duplicate vysílacím modulem pro transcode).
- Pro uložení je názorně použit modul es. Nic zásadního však nebrání použití modulu standard nebo rtp.
- Modul display zobrazí stream s drobným zpožděním (0,5 s)
vlc video.avi --ttl 3 --sout '#transcode{vcodec=mp1v,vb=1024,scale=1,acodec=mpga,ab=196,channels=2, samplerate=48000}:duplicate{dst=std{access=file,mux=ps,dst=video.mpg}, dst=std{access=udp,mux=ts,dst=224.0.0.0,sap,name=video-udp},dst=std {access=http,mux=ps,dst=:8080/video},dst=rtp{dst=224.0.0.1,port=5004,sdp=sap, name=video-rtp}}'
Soubor bude nejprve překódován a poté modulem duplicate předán pro ukládání a vysílání přes udp, http a rtp.
- Cílová adresa pro udp a rtp se liší, i když lze použít stejnou. Udp v základním nastavení vysílá na portu 1234 a rtp na portu 5004.
Pro následující příklad si zkuste spustit nějaký jednoduchý stream na udp 224.0.0.0 (máte-li však výkonný hardware)
vlc udp://@224.0.0.0 --sout-all --sout-udp-caching 2000 --ttl 3 --sout '#duplicate{dst=std{access=udp,mux=ts,dst=224.0.0.5,sap,name=preposlany stream}, dst="transcode{vcodec=mp2v,vb=1024,scale=0.5,acodec=mpga,ab=128,channels=2, samplerate=48000}:duplicate{dst=std{access=file,mux=ps,dst=stream.mpg}, dst=std{access=udp,mux=ts,dst=224.0.0.8,sap,name=zmenseny stream}}"}'
Ukázka použití dvou modulů duplicate pro zpracování naladěného streamu.
- První modul duplicate předá data ze streamu pro nepozměněné vysílání a pro překódování.
- Překódovaný výsledek je pomocí druhého modulu duplicate přeposlán pro uložení a nové vysílání.
- Je-li zdrojem udp stream, máte jistotu, že přijímaná data jsou v TS kontejneru. U ostatních protokolů je potřeba zjistit, jaký formát videa/audia je použit.
- --sout-udp-caching se týká pouze vysílaného, nikoli přijímaného streamu. Časový posun (2 s) si můžete ověřit, pokud v jednom okně aplikace VLC naladíte udp://@224.0.0.0 a ve druhém udp://@224.0.0.5 (nebo pomocí SAP – preposlany stream).
vlc dvb-t:// --dvb-frequency 746000000 --dvb-bandwidth 8 --dvb-adapter 0 --ts-es-id-pid --programs=772,1025 --ttl 3 --sout-udp-caching 1000 --sout '#duplicate{dst=std{access=udp,mux=ts,dst=224.0.0.0,sap,name=Ocko}, select=program=1025}'
Streamování jediné televizní stanice.
- Digitální televizní vysílání obsahuje PID (identifikační číslo programu) pro jednotlivé stanice. Duplicate umí zpracovat PID informace za použití parametrů --ts-es-id-pid , --programs=<PID> a select=program=<PID>.
- Parametr --programs= obsahuje dvě PID (772,1025), i když z příkladu je patrné, že máme zájem jen o jednu TV stanici. PID 772 je první stanicí naladěného multiplexu. V některých případech se mi při streamování DVB obsahu stávalo, že stream nefungoval, nebyl-li uveden PID první stanice multiplexu, který jednoduše zjistíte, zadáte-li např.:
vlc dvb:// --dvb-frequency 746000000 --dvb-bandwidth 8
Poté v GUI vyberte volbu Nástroje>Informace o kodeku. Několik poznatků o problematice DVB-T v Linuxu naleznete v článcích „Jak v Linuxu zprovoznit DVB-T tuner, i když není detekován“ a „VLC a streamování DVB-T v domácí síti“. - Parametr select=program=1025 zadává modulu duplicate požadavek na šíření jen tohoto PID.
vlc dvb-t:// --dvb-frequency 746000000 --dvb-bandwidth 8 --dvb-adapter 0 --ts-es-id-pid --programs=772,1025 --ttl 3 --sout-udp-caching 1000 --sout '#duplicate{dst=std {access=udp,mux=ts,dst=224.0.0.0,sap,name=Ocko},select=program=1025,dst="transcode {vcodec=mp2v,vb=800,scale=0.5,acodec=mpga,ab=128,channels=2,samplerate=48000} :std{access=http,mux=ts,dst=:8080/ocko}",select=program=1025}'
Streamování jedné televizní stanice v originálním a překódovaném stavu.
- Udp stream je originální verze televizního vysílání a http stream je překódovaný (poloviční obraz).
- Překódování DVB obsahu se od ostatních zdrojů trochu liší. Modul transcode je opět nutné uzavřít do bloku pomocí uvozovek, ale navíc je potřeba určit, které PID má duplicate předat k překódování. Zápis tedy musí být ve formátu:
"transcode{volba překódování}:std{volba vysílání}",select=program=<PID>
Než tento díl ukončím, zbývá ještě jeden příklad. V minulém díle byl uveřejněn zápis streamu, jenž mohl nejednoho ze čtenářů odradit. Pokud však od začátku zkoušíte uvedené příklady, vaše znalosti ohledně streamování ve VLC jsou dostatečné pro pochopení (i sestavení) tohoto příkladu. Je-li pro vás tento zápis stále zmatečný, zkuste si jej v textovém editoru „rozporcovat“.
vlc dvb-t:// --dvb-frequency 746000000 --dvb-bandwidth 8 --dvb-adapter 0 --ts-es-id-pid --programs=772,774,1025,1026,5633 --ttl 3 --sout-udp-caching 1500 --sout '#duplicate {dst="transcode{vcodec=mp2v,vb=600,scale=0.5,acodec=mpga,ab=128,channels=2, samplerate=48000,deinterlace}:duplicate{dst=std{access=http,mux=ts,dst=:8080}, dst=std{access=udp,mux=ts,dst=224.0.0.0,sap,name=Ocko}}",select=program=1025, dst="transcode{vcodec=mp2v,vb=600,scale=0.5,acodec=mpga,ab=128,channels=2, samplerate=48000,deinterlace}:duplicate{dst=std{access=http,mux=ts,dst=:8081}, dst=std{access=udp,mux=ts,dst=224.0.0.1,sap,name=Ocko Gold}}",select=program=1026, dst=std{access=http,mux=ts,dst=:8082},select=program=772,dst=std{access=http, mux=ts,dst=:8083},select=program=774,dst=std{access=http,mux=ts,dst=:8084}, select=program=1025,dst=std{access=http,mux=ts,dst=:8085},select=program=1026, dst=std{access=http,mux=ts,dst=:8086},select=program=5633}'
Několik zdrojů v jedné instanci
Příště vám ukáži, jak pomocí Video Lan Manageru (VLM) streamovat několik zdrojů v jedné instanci VLC.