Portál AbcLinuxu, 2. května 2025 07:13
Od kamery po Matrošku.
Pro začátek si představte situaci: máme na kameře nahrané video a potřebujeme ho zpracovat. První věc kterou musíme udělat je video dostat z kamery do počítače. Zdá se to jako krok jednoduchý, ale existuje spousta klikoidních programů které vám můžou přijít pod ruku a kterých byste se měli vyvarovat. Namátkou vyberu třeba kino, které je opravdu otřesné. Nám však postačí program který většina těchto "úžasných klikátek" stejně používá - dvgrab.
Pro začátek zkusíme připojit kameru k počítači pomocí firewire rozhraní. Po spuštění příkazu dmesg bysme měli na konci najít zhruba něco v tomto smyslu:
PM: Adding info for ieee1394:00008500001d79c0 PM: Adding info for No Bus:00008500001d79c0 ieee1394: Node added: ID:BUS[0-00:1023] GUID[00008500001d79c0] ieee1394: Node changed: 0-00:1023 -> 0-01:1023 PM: Adding info for ieee1394:00008500001d79c0-0 PM: Adding info for No Bus:00008500001d79c0-0
Kamera je tedy připojená a ti šťastnější z Vás s ní dokonce můžou pracovat. V tomto kroku přichází na řadu dvgrab.
dvgrab -a -f dv2 video.avi
Tento příkaz nám naháže video z kamery do souborů video001.avi - videoXXX.avi podle toho jak máme na pásce střihy. Pokud je na pásce volné misto, pokračuje aniž by zaznamenával a hledá další nahranou stopu až do konce kazety popřípadě do signálu ^C.
Zde už je možností víc, můžete použít primitivnější programy, nebo jako v našem případě nelineární střižnu Kdenlive, která je mírně nestabilní, ale když si na její ovládání zvyknete, tak vydrží být puštěná i několik minut (ukládat, ukládat, ukládat!!!).
Používání je v celku jednoduché, ve struktuře projektu pravým myšítkem vyvoláme kontextové menu, kde dáme Přidat klipy, najdeme si námi uložené video001.avi, označíme a dáme vložit. Klipy pak přeskládáme do pásu, vytvoříme přechody, vložíme titulky a můžeme se vrhnout na tlačítko Renderovat. Tady bych se pozastavil nad tím do jakého formátu renderovat můžete. Některým se totiž podařilo zprovoznit nekomprimované h264, nám co takové štěstí neměli bude stačit AVI DV PAL 4:3. Tvorba tohoto avi trvá jen několik málo minut. Pro 20 minut vide pak máme zhruba 4GB dat. Což se nám samozřejmě nelíbí. Také dostaneme zpravidla prokládaný obraz, což se nám taky na počítači líbit nebude.
Zde přichází na řadu encodování. Slabší kusy (jako třeba já) mohou použít Avidemux, nebo v lepším případě vzít telefon a zavolat nějakému tomu Otaku ať se staví na pivo. Zpravidla z podobných sešlostí vyjde něco v tomto smyslu:
cat enc.sh #!/usr/bin/env bash /usr/bin/x264 \ --bframes 6 \ --b-adapt 2 \ --b-pyramid \ --ref 6 \ --crf 22 \ --partitions all \ --direct auto \ --weightb \ --me esa \ --subme 9 \ --psy-rd 1.10:0.25 \ --mixed-refs \ --8x8dct \ --trellis 2 \ --fps 25 \ -o x.264 \ fifo 720x576
a
cat men.sh #!/usr/bin/env bash mencoder \ -ovc raw \ -of rawvideo \ -nosound \ -vf pp=li,format=yv12,swapuv \ -o fifo \ "$1"
Jedná se o video 4:3, které je prokládané (zrušíme použitím deinterlaceru v mencoderu pp=li). Výsledné video bude mít 25 snímků za sekundu a rozlišení 720x576 (PAL). Předtím než skripty spustíme musíme si vytvořit pojmenovanou pipu fifo v adresáři kde budeme skripty spouštět.
mkfifo fifo
Jakmile máme vytvoře spustíme v jednom terminálu (silně doporučuji, zvláště u delších videí pouštět ve screenu!!!) ./enc.sh a hned poté ./men.sh kterému předhodíme jako parametr název sestříhaného videa. Ve výsledku dostaneme soubor x.264 (pojmenovat můžeme jakkoliv) což je pouze video bez kontejneru (a bez zvuku) v h264.
Pro encodování zvuku do ogg vorbis nám poslouží následující dva příkazy. První z nich pustíme na pozadí. Výsledný soubor bude x.ogg.
oggenc -o x.ogg --quiet --quality 3 fifo & mplayer -vo null -ao pcm:file=fifo video.avi
Tak a teď můžeme vzíc celý počítač i s kamerou a vyhodit ho do konejneru. A nebo taky ne. Abychom spojili zvuk s videem poslouží nám program mkvmerge z balíku mkvtoolnix.
mkvmerge --title "Nejaky title" --aspect-ratio 0:4/3 -o nami_pozadovany_nazev.mkv x.264 x.ogg
Tak a jsme na konci. Netvrdím o tomto postupu, že je jediný správný, a mnoho věcí tady nevysvětluje -> zájemce o větší hloubku bych v tomto případě odkázal na google popřípadě na manuál, ale je to relativně rychlá cesta (popravdě encodovaní asi třicetiminutového videa u mě zabere něco kolem 500 minut, ale to bych svaloval spíše na HW). Prostě je to taková jednoduchá ukázka, že se dá zpracovávat video i jinak, než v Pinnaclu . Jo a neberte všechno co sem napsal vážně/úplně doslova, hraju si s tím asi třetí den. Konec
Tiskni
Sdílej:
pokud dv kamera po připojení do firewire nedělá nic, zřemě chybí zařízení RAW1394
takže: modprobe raw1394
a modprobe video1394
pak už jen dát uživatele do skupiny disk, nebo jinak vyřešit práva pro přístup k zařízení raw1394
nn tam byl jinej problém, a to kamera která není v linuxu vůbec podporována. sem tam se tu mrchu podařilo alespoň rozběhnout ale většinou to končilo segfaultem nebo podobnou legráckou, jednou dokonce sundala celej kernel
"--me esa" není o moc lepší než "--me umh" a je o dost pomalejší. Prakticky vždy se doporučuje používat --me umh (uneven multi-hexagon search) , protože je značně lepší než --me hex, a vyšší módy jsou neúměrně pomalé k malému zlepšení, které nabízejí. (ESA je v podstatě optimalizovaný exhaustive search, i když s nějak upravený, takže to není úplně hrubá síla.)
Nikde tam nevidím adaptive quantization, to by měla být nutnost, jinak vám to naprosto zlikviduje oblasti s nízkm jasem nebo kontrastem (hnus!): "--aq-strength 0.8" (tipoval bych že patřičné číslo bude 0.6 - 1.1).
s tou esa to bude tím, že razíme heslo "encoduješ jen jednou" takže čas nehraje roli, a co je dobré může být vždycky lepší, jinak na tu quantization se mrknu jestli bude nějaký rozdíl, encodoval sem s tím několik takřka stejných videí z posledního Mistrovství ČR ve squashi kde je jas akorát a kontrast taky
No jo, ale vtip je v tom, že místo esa by pravděpodobně víc pomohly jiné žravé možnosti. Zvýšit počet referenčních snímků, třeba na deset (maximum je 16). To sice pomáhá hlavně s anime, ale myslím (tipuju), že třeba --ref 10 by mělo pomoct víc než ESA vždycky.
Mimochodem existuje i --me tesa (používá SATD/hadamard místo SAD, blabla), když už opravdu nejde o rychlost., ale to bych asi opravdu zvolil až když budu mít všecko na max (teda asi kromě --merange, to asi nemá smysl víc jak 32 ani na fullhd videu, 24 je zřejmě jen neznatelně lepší než 16).
jeste k tomu aq-strengt - pry je v x264 automaticky nastaveny na 1
Ještě bych podotkl, že vážní zájemci by si měli bezpodmínečně zprovoznit avisynth pod wine (prý to jede velmi dobře, nevím; chce to pak nástroj avs2yuv a rouru do kodeku myslím), neboť prostě nemá ve filtrování konkurenci. O takových věcech, jako je možnost porovnávání zdroje a výsledného videa snímek po snímku (funkce interleave) a možnostech skriptování (třeba s různými maskami) ani nemluvě.
Pokud vím, tak jsou tam taky k dispozici lepší filtry než v mencoderu/mplayer - třeba pro to odstranění prokládání.
Já mám kameru SONY Handycam, není nad USB rozhraní, mass storage a soubory z kamery jednoduše překopíruji do počítače
Vy se ty uživatel linuxu snad snažítě vážně odradit
Zeditoval jsem už hodně videa, ale za poslední roky jsem nepotřeboval nic jiného než trojici GUI programů: Kino, Avidemux, Kdenlive.
Nagrabovat v aplikaci Kino. Má hezkou detekci kamery v GUI.
Kdenlive umí celou řadu exportních formátů, je to vysoce konfigurovatelné a řada hotových výstupních profilů je přímo v aplikaci. Mělo by to podporovat vše co umí ffmpeg a mencoder není nic jiného než nadstavba ffmpegu čili co dokáže mencoder musí umět i kdenlive. Bohužel názvy a použití parametrů se může lišit, kdenlive profily používají notaci ffmpegu.
Opravdu jste testoval že Kdenlive nezvládá Matrosku?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.