Kotitekoinen testivideo Avisynthillä äänen ja kuvan viiveide

Vinkkejä rakenteluun ja virityksiin - omalla vastuulla
TaTa
Viestit: 121
Liittynyt: 27.04.2009 18:27

Kotitekoinen testivideo Avisynthillä äänen ja kuvan viiveide

Viesti Kirjoittaja TaTa » 28.12.2013 18:10

Kotitekoinen testivideo Avisynthillä äänen ja kuvan viiveiden arviointiin

Askartelin Avisynthillä yksikertaisen testivideon äänen ja kuvan viiveiden arviointiin. Testivideossa ruutuun ilmestyy sekunnin välein valkoinen neliö ja samalla kuuluu 40 ms sekunnin testiääni. Testiäänen taajuus on 1 kHz ja huippujen voimakkuus -6 dBfs.

Käytin aluksi Darkpulse Motion Designin testivideoa osoitteesta http://www.darkpulse-motion-design.com/ ... ml#lypsinc . Itseäni häiritsi kyseisessä testivideossa se, että äänimerkki alkaa kuulua jo ennen kuin vihreä pallo syttyy merkiksi palamaan (äänen amplitudin maksimi on ajoitettu kohdalleen ei äänen alku). Lisäksi video on saatavilla vain H.264-pakattuna MOV-kääreessä. Tämän vuoksi tein yksinkertaisemman testivideon, jossa 1 kHz:n ääni alkaa kuulua täsmälleen samaan aikaan, kun valkoinen neliö ilmestyy näkyviin.

Käytän testivideoa analogisen videon kaappauksessa äänen ja kuvan keskinäisten viiveiden arviointiin. Kaapatusta videosta äänen ja kuvan viive-eroja voi analysoida esimerkiksi Virtualdubilla. PAL-videossa kuvien toistoväli on 1/25 eli 40 ms. 40 ms pituinen testiääni osuu tahdistuksen ollessa täysin oikein Virtualdubin Audio displayssä kahden kuvan väliin. 1 kHz:n sinisignaalin jakson pituus (positiivisen huippujen väli) on 1 ms, joten Audio display -näkymää zoomaamalla viive-ero on helppo laskea.

Kuva Virtualdubista http://i.imgur.com/GfzlXQl.png .

Tässä testivideon Avisynth-koodi, jos koodista tai testivideosta sattuisi olemaan jollekin hyötyä. Asenna Avisynth ja liitä koodi notepadilla esimerkiksi PAL-AV-Sync_test.avs-tiedostoon. AVS-tiedoston voi avata useimmilla video-ohjelmilla.

Koodi: Valitse kaikki


# ---------------------------------------------------------------------------
# Kotitekoinen testivideo äänen ja kuvan välisten viiveiden arviointiin.
# Videossa toistuu sekunnin välein valkoinen neliö keskellä kuvaa. Neliön 
# ilmestyessä näkyviin toistetaan 40 ms pitkä 1 kHz:n testiääni. Testiääni
# alkaa samaan aikaan, kun valkoinen neliö ilmestyy ruutuun. Videon
# tarkkuus on 720x576 ja kuvaushde 4:3. Kuvanopeus on 25 kuvaa/s. Stereo-äänen
# näytteistystaajuus on 48 kHz ja näytteistys 16 bittiä.
#
# Kaapatusta videosta äänen ja kuvan viive-eroja voi analysoida esimerkiksi
# Virtualdubilla. Kuvien toistoväli on 1/25 eli 40 ms. 40 ms pituinen testi-
# ääni osuu tahdistuksen ollessa täysin oikein Virtualdubin Audio displayssä
# kahden kuvan väliin. 1 kHz:n sinisignaalin jakson pituus (positiivisen
# huippujen väli) on 1 ms, joten Audio display -näkymää zoomaamalla viive-ero
# on helppo laskea.
# ---------------------------------------------------------------------------

# Ruudulla näytettävä teksti. Rivinvaihto \n.
TEKSTI1 = "PAL 25 kuvaa/s\n\n Testivideo äänen ja kuvan\n tahdistamiseen. Valkoinen\nneliö ilmestyy sekunnin välein\n ja samalla toistuu 40 ms\n pituinen 1 kHz:n sinisignaali,\n jonka voimakkuus on -6 dBfs."
TEKSTI2 = "1  k H z ,  - 6  d B f s ,  4 0  m s"

# Valkoisen ruudun muistien reunuksien paksuus.
BLACK_BORDER = 135

# Testisignaalin kesto. Sekunnin pätkä toistetaan n kertaa.
TOISTOT = 60


#---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

# MUSTA_PATKA on 24 kuvan pituinen musta äänetön video, jonka päälle tulee TEKSTI1.
MUSTA_PATKA=BlankClip(length=24, width=768, height=576, fps=25, audio_rate=48000, channels=2, sample_type="16bit")

# Valkoinen pätkä sisältää valkoisen neliön, jonka päälle tulee TEKSTI2. Pituus on yksi kuva.
VALKOINEN_PATKA=BlankClip(length=1, width=(768-2*BLACK_BORDER), height=(576-2*BLACK_BORDER), fps=25, audio_rate=48000, channels=2, sample_type="16bit", color=$DDDDDD)
VALKOINEN_PATKA=AddBorders(VALKOINEN_PATKA, BLACK_BORDER, BLACK_BORDER, BLACK_BORDER, BLACK_BORDER)

# Korvataan valkoisen pätkän ääni 40 ms pituisella 1000 Hz:n sinisignaalilla, jonka voimakkuus on -6 dBfs.
VALKOINEN_PATKA=AudioDub(VALKOINEN_PATKA, Tone(0.04, 1000, 48000, 2, "sine", 0.5)  )

# Listätään edellä mainittuihin videon pätkiin tekstit.
# Subtitle (clip, string text, int "x", int "y", int "first_frame", int "last_frame", string "font", int "size", int "text_color", int "halo_color", int "lsp")
# Rivinvaihto \n
MUSTA_PATKA_JA_TEKSI=Subtitle(MUSTA_PATKA, TEKSTI1, -1, 180, 0, 24, "Arial", 35, $ffffff, 0, 5, 0, 1)
VALKOINEN_PATKA_JA_TEKSI=Subtitle(VALKOINEN_PATKA, TEKSTI2, -1, -1, 0, 0, "Arial", 30, $000000, 0, 5, 0, 1)

# Yhdistetään musta ja valkoinen pätkä.
YHDISTETTY_PATKA=MUSTA_PATKA_JA_TEKSI+VALKOINEN_PATKA_JA_TEKSI

# Lisätään yhdistettyyn pätkään videon ruutujen numerointi (0 -> 24).
# ShowFrameNumber (clip, bool "scroll", int "offset", int "x", int "y", string "font", float "size", int "text_color", int "halo_color", float "font_width", float "font_angle")
YHDISTETTY_PATKA = ShowFrameNumber (YHDISTETTY_PATKA, scroll=false, offset=0, x=320, y=120, font="Arial", size=50, text_color=$ffff00, halo_color=0)

# Toistetaan YHDISTETTY_PATKA, joka on sekunnin mittainen (25 kuvaa), TOISTOT-muuttujan määrittämiä kertoja peräkkäin.
PITKA_PATKA=loop(YHDISTETTY_PATKA, TOISTOT)

# Muutos DVD:lle sopivaan resoluutioon 720x576.
PITKA_PATKA=LanczosResize(PITKA_PATKA, 720, 576)

# Muunnos 4:2:0-näytteistykseen.
PITKA_PATKA=ConvertToYV12(PITKA_PATKA)

return (PITKA_PATKA)


Video: 720x576, 25 fps, kroman alinäytteistys 4:2:0
Ääni: stereo, 16 bittiä, 48 kHz