Trasformare il pc in un videoregistratore

Dopo aver visto come trasformare il pc in una televisione, vediamo ora come registrare i nostri programmi preferiti.

Per questa operazione ci serviremo di MEncoder, un programma di codifica video che è incluso nel più noto lettore multimediale MPlayer

Mencoder non ha una propria interfaccia grafica (anche se esistono dei tentativi altrui) e ritengo che il motivo principale di questa mancanza sia dovuto al numero esorbitante di parametri che è possibile passargli.

Vediamo ora come registrare i nostri programmi, partendo dal comando completo (usato da me e quindi non il migliore in assoluto) e spiegando successivamente i vari parametri:

user@linux~$ mencoder tv:// -tv \ driver=v4l2:width=640:height=480:norm=PAL:alsa:adevice=hw.0 \

-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1500:vhq -vf pp=lb -oac \ mp3lame -lameopts br=128:cbr:mode=0 -o nomefile.avi

iniziamo con le spiegazioni:

  • tv:// ovviamente indica che vogliamo vedere la tv, volendo si potrebbe specificare il canale, ad es: tv://66 con il 66 che a me corrisponde a Mtv (dei canali parlerò alla fine)
  • -tv iniziano le opzioni relative alla tv (del tipo opzione=valore, separate da “:”):
    • driver i valori possono essere v4l e v4l2, il secondo indica la versione nuova del driver (ed è quello consigliato)
    • widht e heigth indicano larghezza ed altezza dell’immagine (in pixel)
    • norm indica il tipo di segnale tv (PAL, SECAM,… in Italia è PAL)
    • alsa indica che l’audio è gestito dai driver alsa (questa opzione non ha un valore)
    • adevice specifica la periferica audio (hw indica che si usa alsa)
  • -ovc indica il codec che utilizzeremo per salvare l’output video, io uso lavc che permette di salvare in mpeg4
  • -lavcopts sono le opzioni proprie del codec prescelto (nel mio caso: il formato di uscita deve essere mpeg4, il bitrate 3000Kbps e vhq velocizza l’encoding)
  • -vf imposta i filtri da applicare al video, in questo caso l’unico scelto (pp=lb) serve per eliminare le righe orizzontali (deinterlacciamento) che altrimenti si avrebbero
  • -oac scelta del codec per l’audio (nel mio caso comprimo l’audio in mp3)
  • -lameopts sono le opzioni per il codec audio (128kbps costanti per il bitrate e modalità stereo)
  • -o nomefile serve per indicare il file in cui salvare la nostra registrazione

Io con queste opzioni ottengo filmati di una qualità più che accettabile e di dimensioni abbastanza contenute: per 20 minuti di video ottengo tra i 120 e i 250 Mb, la differenza in dimensioni credo dipenda dalla “natura” del video stesso, infatti ho notato che se registro una trasmissione “tranquilla” il filmato occupa meno rispetto ad una trasmissione con molti cambi di scena e repentini passaggi da scene luminose a scene scure.

I canali

Per specificare da quale canale televisivo catturare il video ci sono almeno 3 modi:

  • utilizzare preliminarmente un programma come tvtime e sintonizzarci sul canale desiderato, quindi chiudere tvtime e partire con la registrazione senza specificare niente in tv:// (funziona perchè la scheda tiene memorizzato (fintanto che non si spegne il pc) l’ultimo canale sintonizzato)
  • far seguire a tv:// un numero identificativo del canale, questi identificativi si possono ottenere con programmi come scantv contenuto in xawtv
  • utilizzare l’opzione freq come opzione interna a -tv e assegnarle come valore la frequenza del canale in Mhz (es: -tv freq=831 831Mhz è la mia freq per Mtv)

Automatizziamo i tutto

Ora per programmare il nostro pc-videoregistratore non ci resta che utilizzare at come visto in questo post:

user@linux~$ at -f mencoder.sh XX:YY

user@linux~$ at -f chiudi.sh ZZ:WW

Nel file mencoder.sh ci sarà il nostro comando per avviare la registrazione, mentre in chiudi.sh ci sarà questo comando:

kill -2 `ps aux | grep mencoder | awk ‘{print $2}’ | sort | head -n 1`

con il quale stoppiamo il videoregistratore (kill -2 invia il segnale d SIGINT al processo relativo a mencoder, che è individuato con il codice incluso nei ` `)

NB: gli apici ` sono diversi dagli apici più comuni ‘ (in linux si possono ottenere con AtlGr+’)

EOF

17 pensieri su “Trasformare il pc in un videoregistratore”

  1. 1500 di vbitrate è anche troppo, saturi la banda…
    prova lo stesso comando senza impostare il bitrate, in genere lavc si
    ferma tra 800 e 900 e la qualità dovrebbe essere indistinguibile
    (e 20 minuti di video saranno circa 100-120 Mega).

    P.S.: vhq ti aumenta la qualità ma rallenta un poco le cose, cmq tienilo.

  2. grazie il bitrate proverò subito a toglierlo!
    vhq l’ho trovato nell’esempio riportato sulla documentazione di mplayer/mencoder e mi domandavo a cosa servisse…
    però se non ho capito male è abbastanza leggera come ottimizzazione non dovrebbe rallentare granchè

  3. Io come script di mencoder ce l’avevo abbastanza diverso…non mi sono studiato niente l’avevo trovato in giro e non andava male

    ora provo questo e cerco di capirci qlc tnx😉

  4. @matteo
    ho provato a togliere l’opzione del bitrate ed effettivamente si stabilizza intorno a 870, però la differenza di qualità (rispetto a specificare vbitrate=1500) è abbastanza evidente, per cui mi sa che terrò l’opzione

    ciaoo

  5. Ciao mi sono imbattuto nel tuo blog alla ricerca di aiuto: ho acquistato una scheda tv e mentre non ho problemi con la registrazione dal digitale terrestre. c’è ancora qualcosa da affinare con la reg. da analogico: in sintesi ho provato diverse stringhe di opzioni con mencoder ma il risultato è un file dove il video è abbastanza buono ma l’audio è accelerato per cui dura circa solo per la meta della durata del video effettiva. Non è che mi puoi suggerire dove probabilmente sbaglio ?
    Grazie in ogni caso….
    Ciao

  6. ciao mark,
    anch’io avevo avuto un problema del genere: l’audio risultava accelerato (anche se molto di poco) e mi ero accorto che l’output di mencoder presentava molti avvisi di frame duplicati.
    Non mi ricordo esattamente come l’ho risolto, ma di sicuro ho dovuto terminare ntpd (il demone che regola l’orologio di sistema allineandolo ad un server in internet) e se non mi sbaglio ho “giocato” un po’ su queste opzioni interne di “-tv”:

    alsa:adevice=hw.0

    non vorrei dire una fesseria ma il problema si presentava senza le suddette opzioni e si risolveva inserendo le suddette opzioni

  7. Ho riprovato disattivando ntpd senza risultati, io uso alsa:adevice=hw.1 in quanto la mia scheda tv non ha l’ucita per la scheda audio e quindi catturo l’audio direttamente con il modulo saa7134_alsa. i risultati migliori finora li ho ottenuti con:
    mencoder tv://66 -tv driver=v4l2:device=/dev/video0:fps=25:width=640:height=480:norm=1:alsa:adevice=hw.1:audiorate=32000:immediatemode=0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1500:vhq -vf pp=lb -oac mp3lame -lameopts br=128:cbr:mode=0 -o mtv.avi.

    Il file avi generato è ottimo sul pc: riesco a vederlo e sentirlo correttamente con mplayer, kaffeine, vlc etc; il problema sorge non appena cerco di cambiare il codec video per poterlo vedere con il player da tavolo; io di solito uso avidemux (con risultati dignitosi); avidemux apre il file in questione e quando lancio l’anteprima senza ancora aver effettuato elaborazioni il video scorre normalmente mentre l’audio va a velocità doppia infatti finisce (incomprensibile circa a metà del video).
    Scusami per il post lungo ma non so che pesci pigliare….
    Grazie ancora per l’attenzione che mi dedichi.

  8. Ah, ma allora il problema sta in avidemux, non in mencoder.
    prova a controllare la configurazione di avidemux (le preferenze riguardo all’audio).
    poi prova a lanciare avidemux da un terminale e dai un occhio all’output del terminale quando apri uno dei file “problematici”, visto che l’output è parecchio lungo ti conviene redirezionarlo su un file, praticamente fai così:
    _apri un terminale (konsole, gnome terminal, etc etc)
    _lanci avidemux:
    user@linux~$ avidemux2 > /home/pincopallo/log.txt
    _poi provi ad aprire uno dei file e provi l’anteprima
    _chiudi avidemux e dai un occhio al file log.txt per vedere se ti segna qualche errore

  9. Ciao sono ancora qua,……… avevi ragione tu (ovviamente) il problema è quasi sicuramente in avidemux, per il momento ho risolto aggiungento l’opzione -ffourcc DX50 alla stringa per mencoder, questo mi genera un file avi che vedo e sento correttamente anche sul player di casa evitando così il passaggio per avidemux, ho intenzione di provare comunque il tuo suggerimento anche per continuare ad utilizzare avidemux che mi sembra molto versatile per maneggiare file video. ti chiedo se sono per caso ancora disponibili i link ai tuoi tvtime.xml e stationlist.xml.
    Ciao e grazie

  10. complimenti per la guida…ottima! così sono riuscito a fare andare la mia scheda typhoon e registrare da sky…
    piccola domanda:
    ho fatto uno scritp bash per avviare mencoder con tutte le opzioni…
    prima di lanciare mencoder lancio il comando “amixer master toggle” così da non sentire quello che sto registrando dalle casse del pc…
    ma credo che il filmato risulti muto…..
    qualche suggerimento?
    potrei semplicemente spegnere le casso (ovviamente) però nello script ho inserito il comando “echo “\a”” in modo tale da emettere un beep quando inizia e finisce l’acquisizione…(complicato lo so…)…
    lo speaker del pc non riesco a farlo beeppare……
    lo so è complicato mentalmente……..

  11. sono riuscito a risolvere un po di problemi con l’audio…riesco a registrare e a mettere mute le casse con amixer…
    ho fatto una prova…e dopo due ore di registrazione…il sincronismo audio/video è saltato..ovviamente acquisisco con la scheda audio, non direttamente dalla schedina tv…
    ho lanciato questo comando:
    mencoder -tv driver=v4l2:norm=0:input=1:width=640:height=480:buffersize=256:fps=25:alsa:adevice=hw.0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq=0 -vf pp=lb tv:// -oac mp3lame -noskip -lameopts br=128:cbr:mode=0 -o /Bho/Capture/capture_$(date +%Y-%m-%d_%H:%M:%S).avi
    suggerimenti?

  12. sono il solito rompiscatole……
    mi potresti consigliare delle schede d’acquisizione che reggano e non perdano frame per poter ovviare alla perdita di sincronia audio e video?
    lo so chiedo troppo…alla tua pazienza…

  13. Ciao, scusa ma ho letto solo adesso tutti i tuoi ultimi commenti,
    per quanto riguarda la perdita di sincronismo non credo che dipenda dalla scheda, ma piuttosto dal carico della CPU, lo dico perchè la mia scheda è del 1995 e non ho problemi di sincronismo nemmeno dopo 3/4 ore di registrazione con un bitrate di 1500.
    Tu quando registri usi il pc per fare altro oppure lo lasci tranquillo a registrare?
    io ad esempio lo lascio tranquillo, perchè la registrazione mi porta la CPU intorno al 60% (se non ricordo male) e quando provavo ad usarlo in simultanea mi ritrovavo spesso con problemi di sincronismo, mentre ora non mi capita più.

    Io purtroppo non so consigliarti nessun tipo di scheda (la mia non credo che sia ancora in commercio…), perchè proprio non ho esperienza in questo campo, cmq prova a dare uno sguardo a linuxtv.org, magari trovi qualche consiglio.

    ciao,
    Walter

  14. grazie mille…
    in effetti anche la mia schedatv deve essere dirca di quell’annata…usando kde la cpu arriva circa a 50% di carico..utilizzo il comando “top” per controllare il tutto…
    farò una prova senza caricare kde…
    però la registrazione l’avevo fatta senza fare altro…
    farò ancora delle prove…
    peccato….speravo in un risultato migliore…
    ps provo a diminuire la grandezza? da 640X480 la porto a 300?
    farò delle prove
    grazie di nuovo…

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...