Acquisizione video da VHS, su linux Ubuntu

Premessa: Visto che ci ho perso un pomeriggio per trovare le impostazioni giuste, provo a buttare giù una semplice e veloce guida per la conversione delle cassette VHS in supporto digitale.

Come potrei iniziare..innanzitutto è assolutamente necessaria una scheda di acquisizione (ma va!,mi direte) con ingresso S-Video oppure direttamente RCA; il modello della scheda non è importante purché sia riconosciuta dal kernel (utilizzo una Pinnacle 310i, ma in linea di principio una qualsiasi scheda di acquisizione va bene).

mplayer

Perché trasformarle su linux, mi direte, quando c’è quel bel programma chiamato Pinnacle Studio ?(peraltro fornito gratuitamente, ma in versione limitata, assieme alla scheda). Le risposte sono semplici : 1) Nel mio caso è l’unico sistema operativo che utilizzo nel fisso, quindi (s)fortunatamente Studio mi è precluso; 2) a proposito di Studio, l’ho utilizzato in passato e a parte la lentezza di avvio, non ho mai visto un programma tanto esoso di RAM e CPU, tanto più che ogni tre per due va in crash; 3) mencoder lo valuto come il migliore programma di acquisizione e si, è solo su linux. Ma vediamo con calma.

Primo passo: verificare se è presente il dispositivo video alla directory /dev/video# (dove # è un numero da 0 a 63), nel caso sia presente significa che il modprobe lanciato all’avvio ha rilevato la scheda di acquisizione. Per la conferma, da terminale, lanciare un lsmod, e tra i moduli caricati nel kernel dovrebbe esserci il dispositivo video (nel mio caso sono caricati i moduli v4l2_common, v4l1_compat, saa7134, saa7134_dvb, saa7134_dvb, saa7134_alsa relativi al sintonizzatore tv e alla scheda di acquisizione). Nel caso non sia presente alcun dispositivo video occorre analizzare il log di avvio del sistema (grazie all’ utility dmesg, si può analizzare la procedura di lancio del sistema operativo e le relative periferiche caricate).

Come ho già preannunciato è necessario mencoder, programmino a linea di comando (si, ma non c’è da spaventarsi) legato a mplayer e simile a ffmpeg. Per installarlo si può utilizzare il gestore pacchetti oppure più velocemente un

 

Intro: I’ve spent a whole afternoon to find a good settings, below there is a simple tutorial to convert a VHS cassette in a digital backup.

First of all, you will need an acquisition card with S-Video or RCA input; there is no particular card to suggest, I use a Pinnacle 310i, supported by linux kernel with Philips saa7134 modules.

mplayer

“Why we should convert it on Linux – you can ask me – when there is a great program named Pinnacle Studio?”

  1. I’ve used it in the past and I cannot remember a program more “starved” about RAM and CPU than this (obviously IMHO)
  2. Linux is my only choice on my PC, (un)fortunately Studio does not run on it
  3. Mencoder is a great piece of code, and yes, it is only on Linux (it is not the whole truth, read this)

First step – How do I know if my card is supported?

Directory /dev should contain a peripheral named video# (where # is a number from 0 to 63). If it happens, the task modprobe started at power-up detect a video source on your PC.

But it could be also a webcam or another video input!

  • from terminal, run lsmod and search module like v4l2_common, saa7134, saa7134_alsa or similar (note: my card mount Philips saa7134 decoder)
  • control kernel log file with utility dmesg, if contain some info as below:

$ dmesg | grep video

[ 0.262239] pci 0000:01:00.0: Boot video device

[ 19.136122] Linux video capture interface: v2.00

[ 19.521280] [drm] S-video

[ 23.893114] saa7133[0]: registered device video0 [v4l2]

  • lspci utility (or lsusb if your card is an usb-device)
06:02.0 Multimedia controller: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder (rev d0)

Second step – Mencoder

To install mencoder you can follow graphical manager (as Synaptic) or, from terminal

sudo apt-get install mencoder mplayer twolame mjpegtools ffmpeg2theora libogg0 libogg-dev libvorbis0a libvorbis-dev vorbis-tools mp32ogg ffmpeg 

This string also install video and audio codec vorbis, ogg, lame.

Ok, at this point we have a working video card, a simple conversion program and all the codec needed (even redundant), in a few minutes. Now we have to setting up mencoder for conversion..

Third step – Configuration string

After several attempts, I found a good trade-off between bitrate/quality/CPU power with this command (from terminal)

mencoder -tv driver=v4l2:input=2:width=384:height=288:forceaudio:adevice=/dev/dsp:amode=0:fps=25:forcechan=1 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=6000:vbitrate=4500:keyint=15:aspect=4/3:acodec=mp2:abitrate=80 -of mpeg -mpegopts format=dvd -o video.mpg

You can just cut-and-paste this on your terminal, it’s working perfectly on my PC. The conversion will start immeditaely (there is no video preview, that is not a real problem). Terminal reported a conversion timer and any error that may occur.

To stop conversion just press CTRL+C. That’s all. Mencoder should create a file in your home directory.

Below there is a detailed description of option passed to mencoder just above

-tv set video input from tv-card

driver=v4l2:input=2 tv card driver (alias kernel modules), input=2 select which input is enabled to convert (S-Video = 2, Composite = 1 )

width=384:height=288 video format (I try to get a better resolution, but I received some video buffer error and nothing changes in quality)

forceaudio:adevice=/dev/dsp:amode=0 this line redirect VHS audio from MIC/Line-in to ALSA

fps=25:forcechan=1 frame rate

-ovc lavc -oac lavc -lavcopts lavc a codec library

vcodec=mpeg2video  a video codec, mpeg2video, used for its compatibility with DVD-video format (any DVD media player can reproduce it)

vrc_buf_size=1835 video buffer, for DVD-video it has a value of 1835 (I do not invented it ;), see here)

vrc_maxrate=6000:vbitrate=4500 variable bitrate (as MPEG standard provide), limited to 6000kbit/s

keyint=15 is referred to Group Of Pictures (GOP), a particoularity of MPEG layer 2. It is almost a burst of sequential pictures (15 in this case) used in the compression algorithm.

aspect=4/3 video output size

acodec=mp2:abitrate=80 audio codec, mp2. It is not the best choice about compression, but ensures compatibility for DVD-player. I used a low audio bitrate, enough to record VHS audio source.

-of mpeg -mpegopts format=dvd last settings, they define the “box” where video is being saved (mpeg) and compatibility to DVD-video standard

-o video.mpg name of created video file. This create a video-mpg file in your home directory. Obviously this may change..

Luca

PS. While i am writing this article, i noticed that exist a graphical interface for mencoder, called gmencoder here.

Some useful links:

MPlayer – official site

Mencoder – online manual

Advanced Guide

sudo apt-get install mencoder mplayer twolame mjpegtools ffmpeg2theora libogg0 libogg-dev libvorbis0a libvorbis-dev vorbis-tools mp32ogg ffmpeg (comprensivo dei codec utilizzati)

4apr12 – sostituito toolame con twolame, per termine dello sviluppo (ultimo aggiornamento del pacchetto nel 2003) Grazie Renzo!

Ok, in questo modo abbiamo installato programma e codec necessari (diciamo anche sovrabbondanti) dopo due minuti siamo quasi pronti per partire a trasformare le cassette, manca l’ultimo passaggio, la configurazione. Dopo vari tentativi ho trovato un compromesso tra spazio occupato/qualità/Ram disponibile (vedi sotto) con questa stringa da terminale:

mencoder -tv driver=v4l2:input=2:width=384:height=288:forceaudio:adevice=/dev/dsp:amode=0:fps=25:forcechan=1 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=6000:vbitrate=4500:keyint=15:aspect=4/3:acodec=mp2:abitrate=80 -of mpeg -mpegopts format=dvd -o video.mpg

Se vi fidate, potete copia-incollare questa nel vostro terminale e la registrazione partirà immediatamente (non si vede l’anteprima durante la registrazione, a mio modo di vedere inutile e pesante per la cpu), il terminale si trasforma in un timer e la combinazione per interrompere la registrazione è CTRL+C. Tutto qui. Al termine mencoder crea il file nella cartella home del vostro utente.

Vediamo in “dettaglio” i parametri passati a mencoder (Nota, il comando qui sopra è formato da “pezzi” separati dal “:”)

-tv imposto ingresso da scheda tv (dvb-t o analogico)

driver=v4l2:input=2 driver utilizzati per la gestione della scheda di acquisizione (alias moduli caricati nel kernel), il due indica la modalità di ingresso utilizzata (nel mio caso S-Video = 2, Composite =1 )

width=384:height=288 formato video catturato (ho provato a salire come risoluzione, ma ho notato problemi del buffer di cattura e nessun miglioramento dal punto di vista della qualità)

forceaudio:adevice=/dev/dsp:amode=0 questa riga forza la registrazione dell’audio sul device specificato (legato all’ALSA del pc)

fps=25:forcechan=1 frame rate

-ovc lavc -oac lavc -lavcopts lavc è una libreria di codec audio/video, dopo si specifica quale codec utilizzare

vcodec=mpeg2video codec video, mpeg2video, perfettamente compatibile con lettori dvd

vrc_buf_size=1835 buffer di registrazione video, per DVD viene richiesto 1835 (non me lo sono inventato;), guarda qui)

vrc_maxrate=6000:vbitrate=4500 bitrate video variabile (in accordo con la codifica mpeg), massimo a 6000kbit/s

keyint=15:aspect=4/3 il primo è riferito alle Group Of Pictures, praticamente il numero frames contenuti in un “pacchetto” previsto nel Mpeg. il secondo è l’aspetto sullo schermo del filmato trasformato

acodec=mp2:abitrate=80 codifica audio, mp2. non è il massimo della compressione ma permette la compatibilità con i lettori DVD. per il bitrate ho lasciato un valore basso, vista la pessima qualità audio delle cassette

-of mpeg -mpegopts format=dvd ultimi comandi, definisco il “contenitore” del video finale (mpeg) e richiedo la compatibilità con il formato DVD

-o video.mpg nome del file creato. in questo modo verrà creato nella vostra cartella home. chiaramente può essere cambiato 😉

PS. mentre vi scrivo ho notato che esiste un’interfaccia grafica per mencoder a questo link. Non l’ho provata, rimango fedele al buon vecchio terminale….per ora.

Per info qualche sito:

MPlayer – sito ufficiale

Mencoder – manuale online

Guida avanzata

PPS. Come vedere se la scheda di acquisizione è visualizzata dal sistema?

se è una scheda interna da terminale lanciamo lspci (lsusb se usb) ci vengono elencate le varie periferiche pci collegate al sistema. Dovremmo visualizzare la scheda collegata; nel mio caso

06:02.0 Multimedia controller: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder (rev d0)

Se questo passaggio risulta negativo passiamo ad un’analisi veloce del buffer del kernel, attraverso l’utility dmesg per indagare su quali periferiche siano collegate e correttamente visualizzate. Digitando dmesg | grep qualcosa, passiamo a vedere se (e cosa) viene visto della scheda nella procedura di avvio. NOTA si può anche analizzare direttamente il risultato di dmesg, ma è un po’ lunghetto (circa una 20ina di pagine). nel “qualcosa” va inserito il termine da cercare, per esempio il nome del chip di decodifica, la sigla della scheda, il modello. Come ultimo tentativo, è possibile vedere se sono caricati i moduli di acquisizione nel kernel con lsmod, dove appare una lista dei “driver” caricati attualmente nel sistema, tra questi dovrebbero esservi v4l2, v4l2_common, videobuf_dma, come scritto più in alto.

Se in nessuno di questi passaggi si trova nulla riferito alla scheda, significa che il modprobe (la sonda appunto, lanciata all’avvio alla ricerca di hardware da caricare) non è riuscito a trovare il modulo corretto per la scheda utilizzata. Potete tranquillamente prendervela con chi ve l’ha venduta…;)

Questa voce è stata pubblicata in Tech Corner e contrassegnata con , , , , , , , , . Contrassegna il permalink.