Grabování videa z analogového TV tuneru pomocí ffmpeg

Tento článek popisuje vyzkoušené a osvědčené postupy použité při grabování videa z VHS kazety prostřednictvím TV tuneru a aplikace ffmpeg. Uvedeným postupem jsem v průběhu víkendu provedl, po sérii experimentů, digitalizaci 30 minutového videa z VHS kazety ze srpna 1989. Z pohledu fyzického zapojení je obraz přiváděn přes kabel cinch-cinch na kompozitní vstup TV tuneru. Zvuk je z VHS přehrávače připojen přímo na vstup Line-In zvukové karty, tedy ne na TV tuner.

Postup:

  • Nejprve je nutné ujistit se, že TV tuner jenž jev PC nainstalován je z pohledu systému připraven k použití, tedy, že existuje ovladač a soubor tohoto video zařízení, např.:
/dev/video0
  • Dále budeme potřebovat utilitu v4l2-ctl z balíčku v4l-utils
  • Pomocí nástroje alsamixer navstavte zdroj v sekci Capture (záznam zvuku) na Line-in a nastavte „šoupák“ tohoto vstupu přibližně na 50%. Ostatní zdroje (vstupy) zvuku utlumte.
  • Následujícím příkazem získáme seznam vstupů signálů použitého TV tuneru:
v4l2-ctl -n
* V mém případě byl výstup tento (bude se lišit podle periferií každého TV tuneru) - důležitá jsou získaná číslování vstupů:
v4l2-ctl -n
ioctl: VIDIOC_ENUMINPUT
        Input       : 0
        Name        : Television
        Type        : 0x00000001
        Audioset    : 0x00000001
        Tuner       : 0x00000000
        Standard    : 0x0000000000FFBFFF (PAL-B/B1/G/H/I/D/D1/K/M/N/Nc/60 NTSC-M/M-JP/M-KR SECAM-B/D/G/H/K/K1/L/Lc)
        Status      : 0x00000100 (no hsync lock.)
        Capabilities: 0x00000004 (SD presets)

        Input       : 1
        Name        : Composite1
        Type        : 0x00000002
        Audioset    : 0x00000001
        Tuner       : 0x00000000
        Standard    : 0x0000000000FFBFFF (PAL-B/B1/G/H/I/D/D1/K/M/N/Nc/60 NTSC-M/M-JP/M-KR SECAM-B/D/G/H/K/K1/L/Lc)
        Status      : 0x00000000 (ok)
        Capabilities: 0x00000004 (SD presets)

        Input       : 2
        Name        : S-Video
        Type        : 0x00000002
        Audioset    : 0x00000001
        Tuner       : 0x00000000
        Standard    : 0x0000000000FFBFFF (PAL-B/B1/G/H/I/D/D1/K/M/N/Nc/60 NTSC-M/M-JP/M-KR SECAM-B/D/G/H/K/K1/L/Lc)
        Status      : 0x00000000 (ok)
        Capabilities: 0x00000004 (SD presets)

        Input       : 3
        Name        : Composite3
        Type        : 0x00000002
        Audioset    : 0x00000001
        Tuner       : 0x00000000
        Standard    : 0x0000000000FFBFFF (PAL-B/B1/G/H/I/D/D1/K/M/N/Nc/60 NTSC-M/M-JP/M-KR SECAM-B/D/G/H/K/K1/L/Lc)
        Status      : 0x00000000 (ok)
        Capabilities: 0x00000004 (SD presets)
  • V mém případě byl VHS přehrávač připojen ke vstupu Composite 1 - ten má přiděleno číslo vstupu 1 (viz předchozí příkaz).
  • Přepneme vstup TV tuneru tak, aby při grabování z rozhraní video4linux2 byl zaznamenáván obraz z Composite1:
v4l2-ctl -i 1
  • Nyní již můžeme spustit zdroj videa (např. VHS přehrávač) a zahájit grabování pomocí ffmpeg.
ffmpeg -f alsa -ac 2 -i hw:0,0 -f video4linux2 -standard PAL -channel 1 -i /dev/video0 -r 25 -acodec libmp3lame -ar 44100 -ab 92k -vcodec libxvid -qscale 9 -threads 0 -s 1024x768 grab0.mkv

Vlastnosti a zhodnocení použitého postupu:

  • Uvedený příkaz používá rozhraní video4linux2, jako zdroj videa definuje /dev/video0. Zdroj audia je nastaven na alsa - vstup audiosignálu je nastaven pomocí „šoupáků“ utility alsamixer.
  • Použité rozlišení 1024×768 je pro grabování z VHS zbytečně velké. Lze použít 320×240, nebo 800×600, jenž plně dostačuje uvedenému zdroji videa (podle jeho HW parametrů a vlastností signálu z použitého vstupu)
  • Je použit video kodek libxvid a pomocí parametru -qscale je nastavena kvalita na hodnotu 9 (nižší hodnota znamená vyšší kvalitu viz man ffmpeg), bitrate dosahoval cca 8 Mbit/s.
  • Jako cílový kontejner je použita matrioška (mkv). Video tak můžete hned po zahájení grabování sledovat otevřením vytvářeného video souboru (zde grab0.mkv) např. v přehrávači mplayer.
  • Audio je komprimováno pomocí libmp3lame, vzorkovací frekvence 44,1 kHz, audio bitrate 92 kb.
  • Celková velikost takto pořízeného 30 minutového videa byla 1,6 GB.

Problémy:

Pro grabování jsem se pokoušel použít i jiná nastavení, která ale na závěr nebyla přínosem, protože docházelo k posuvu videa a zvuku. Tyto varianty nastavení ffmpeg pro mě byly nepoužitelné:

  • Použití ffmpeg s výše uvedeným nastavením bez parametru -qscale a s parametrem -b:v definujícím bitrate (v rozsazích > 2).
  • Použití ffmpeg s výše uvedeným nastavením s vide kodekem libx264, s definováním bitrate (-b:v) i bez něj.
  • Použití ffmpeg s videokodekem mpeg2video (ale zde jsem přiliž neexperimentoval).

Použité vybavení:

TV tuner: Jetway TV/Radio Tuner Brooktree Corporation Bt878 Video Capture (rev 11)
v4l-utils: verze 0.8.5-11.1
ffmpeg: verze 0.9.1
Linuxová distribuce: OpenSuse 11.4 x86_64
 
stranky_uzivatelu_4smart/zakladni_grabovani_videa_z_analog_tuneru_pomoci_ffmpeg.txt · Poslední úprava: 2012/01/09 09:25 autor: root