Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Filmy a seriály, streamovací služby
Televize  |  Projektory
Audio a domácí kina
Multimediální centra  |  Ostatní
Svět hardware  |  Digimanie
Svět mobilně

Framerate a synchronizace zvuku a videa

17.10.2002, Radek Jahoda, návod
Hodně se množí otázky ohledně synchronizace zvuku a videa v AVI souborech. Podívejme společně na to, proč se zvuk předbíhá nebo opožďuje a jak toto opravit.
Pro zachytávání videa se používají dva typy karet:
    • První typ digitalizuje video i zvuk, samplovací frekvence jsou odvozeny od jednoho krystalu. Jde většinou o karty určené pro střihání videa a jsou také dražší.
    • Druhý typ digitalizuje pouze video a ke vzorkování zvuku se používá zvuková karta. Na obou kartách se používá jiný krystal. Jde většinou o komerční karty - TV karty a pod.
Vzorkování videa se většinou synchronizuje s přijímaným signálem, aby nedocházelo k vypadávání snímků. U druhého typu karet se k nahrání zvuku ale používá zvuková karta, která si řídí vzorkování sama. Pokud se rozchází kmitočet tohoto vzorkování s kmitočtem video signálu, dostáváme od zvukové karty více či méně dat, než potřebujeme. Malý příklad:

Uvažujme dvouhodinový film, který nahráváme. Při správné vzorkovací frekvenci 44100Hz získáme 2*60*60*44100=317520000 vzorků. Pokud bude ale kmitočet o 1Hz vyšší, tedy 44101Hz, získáme 317527200 vzorků, tedy o 7200 více. Těchto 7200 vzorků je o 7200/44100=0.163 vteřin navíc. Ano řeknete si, že je to zanedbatelné, v čem máte stále pravdu, ale při vzorkování o 10Hz vyšším (tedy 44110Hz) jde již o 72000/44100=1.63 vteřin navíc! O stejný čas se bude při přehrávání zvuk předcházet oproti videu, což už je znát hodně. A věřte, že všechny nové zvukové karty nahrávají standardně vzorkováním 48000Hz (nebo i vyšším) a na požadovaných 44100Hz převzorkovávají - většinou jednoduše vynecháváním některých samplů. To není vůbec přesné, takže dochází ke zmíněné chybě. Někdy pomůže zachytávat se zmíněnou samplovací frekvencí 48000Hz.

Jak z toho ale ven? Nejčastějším způsobem je změna framerate videa. Nemění se ale počet zachycených snímků, ten zůstane u PAL na 25fps, změní se ale uložená hodnota - přepočítá se tak, aby celková doba videa byla shodná se zvukem. Pokud tedy máme zvuk o 1.63s delší (díky nepřesnému vzorkování), změníme framerate u dvouhodinové nahrávky na 25*(2*60*60+1.63)/(2*60*60)=25.0056597fps. Při přehrávání pak dojde ke správné synchronizaci zvuku a videa. Tento postup používají všechny DirectShow aplikace (ATV200, iuVCR, AMCap, ...) při nastavení Master stream na Audio.

Zde ale nastává několik problémů. Předně výpočet nového kmitočtu provádí AVI Mux filtr od Microsoftu, který je součástí DirectShow. Ten ale počítá jen s omezenou přesností (kdo ví proč?), takže synchronizace není dokonalá a většinou je potřeba ji doopravit (lze pomocí programů VirtualDub nebo Synchronizer). Druhý problém je v tom, že nový framerate není standardní, a při dalším zpracování se stejně musíme vrátit k 25fps (např. při komprimaci do MPEG). Jediné použítí je tehdy, když další zpracování bude probíhat stále s AVI souborem - např. komprimace do MPEG-4, DivX apod. Třetím problémem je, že při nahrávání do více AVI souborů (např. do segmentovaných AVI souborů pro překonání bariéry 4GB u souborového systému FAT32) se pro každý soubor spočítá jiný framerate. Tyto AVI soubory pak nepůjdou spojit, protože jsou jiné, přestože mají stejný rozměr videa i kodeky. Pro spojení ve VirtualDubu je tedy nutné u každého nejprve změnit framerate na stejnou hodnotu (opět VirtualDubem nebo Synchronizerem) a teprve potom provést samotné spojení. Ještě lepší řešení je nahrávat s Master stream nastaveným na None, pak k přepočtu framerate nedojde, zůstane přesně 25fps a soubory půjdou správně spojit.

Nejlepší řešení je ale zachovat 25fps, tedy nahrávat s nastavením Master stream na None. Zvuk se bude opět rozbíhat s videem, což nám ale nevadí, protože to hned při zpracování napravíme - převzorkováním zvuku. Máte dvě možnosti. Vlastníte-li nějaký lepší nelineární video editor, např. Vegas Video, otevřete v něm tento soubor a vložte do timeline. Nad sebou uvidíte video a zvuk a také jejich rozdílné délky. Stlačte klávesu CTRL (a držte), uchopte konec zvuku myší a natáhněte ho na stejnou délku jako má video. Dále pracujete stejně jako normálně. Upozorňuji, že v jiném editoru se tento úkon může provádět jinak, přečtěte si manuál, jak správně změnit délku média souboru. Pokud nevlastníte podobný video editor, můžete vyjmout zvuk z AVI souboru pomocí VirtualDubu (nastavte Audio/DirectStream copy a potom pomocí Save as WAV) uložte zvuk do WAV souboru, který otevřete v nějakém audio editoru, který umí převzorkovávat (SoundForge, CoolEdit, ...). Nyní soubor převzorkujte na požadovanou délku, tedy délku videa (zjistíte ve VirtualDubu) a uložíte opět do WAV souboru. Ve VirtualDubu pak otevřete původní AVI soubor a přiřadíte zvuk z nového WAV souboru (pomocí Audio/WAV audio). Dále pracujete jako obyčejně.

Možná se Vám tyto postupy zdají krkolomné, jiná možnost ale není (kromě koupi prvního typu karet řádově za 10tisíc Kč a více). Všechny uvedené programy lze stáhnout na TV Freak v sekci Download. Přeji hodně trpělivosti a spoustu zpracovaných nahrávek.