Linux tips and tricks: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Diablo (discussione | contributi)
Diablo (discussione | contributi)
Riga 370:
 
== Video ==
#[[/Acquisizione video/]]
 
=== Acquisizione da sorgenti analogiche con MJPEGtools===
 
Nella transizione dal video analogico di fine XX secolo al video digitale dei primi del XXI secolo, soprattutto l'utenza casalinga ha dovuto affrontare il problema del salvataggio delle video cassette di vario tipo su supporti più moderni come DVD, VCD o DivX.
 
A questo scopo, ma ovviamente non solo, sono state prodotte numerosi tipi di schede di acquisizione video, per tutte le fasce di utenza.
 
Molte di queste schede digitalizzano il segnale analogico creando una sequenza di immagini JPEG, detta Motion JPEG, o appunto MJPEG. Questa sigla non va assolutamente confusa con MPEG: infatti MJPEG si limita a digitalizzare, con la massima velocità possibile, teoricamente in real-time, un segnale analogico, al fine di codificarlo successivamente in uno dei tanti formati compressi, fra cui proprio i vari tipi di MPEG.
 
Un chipset molto noto e diffuso che effettua questo tipo di digitalizzazione è lo Z36065 (che ha avuto anche molti derivati), prodotto da ZORAN: una scheda di acquisizione video equipaggiato con questo chipset funziona quasi certamente con Linux, e poiché non coinvolge la CPU del sistema su cui è installata, può essere usata anche su computer datati. Su questi, il problema può essere l'eccessiva lentezza dell'hard disk, ma soprattutto le sue dimensioni, perché la digitalizzazione di un'ora di video analogico, in condizioni normali, richiede circa 20G di disco liberi.
 
La home page di MJPEGtools è http://mjpeg.sourceforge.net/, ma pure importante è la pagina del progetto su SourceForge, http://sourceforge.net/projects/mjpeg/. Da quest'ultima è possibile scaricare i sorgenti e diversi pacchetti precompilati, ma la maggior parte delle distribuzioni include un apposito pacchetto nei repository standard.
 
==== Panoramica ====
 
Prima di vedere in dettaglio tutti i comandi della suite MJPEGtools, è utile mostrarli all'opera in una situazione magari non tanto realistica, ma semplice.
 
==== Digitalizzazione: lavrec ====
 
''lavrec'' è il comando della suite MJPEGtools che interagisce con il chipset Zoran al fine di acquisire dalla sorgente analogica una sequenza di immagini JPEG organizzate in un unico file. Come già accennato, questo file non è un filmato compresso, ma solo un modo per tenere insieme un certo numero (di solito cospicuo) di immagini compresse. Il formato del file di output può essere AVI o QuickTime, e questo può indurre appunto a confonderlo con un filmato compresso: in realtà, questi due formati sono solo dei contenitori di oggetti multimediali, compressi o no.
 
''lavrec'' è normalmente in grado di impostare automaticamente molti parametri che altrimenti devono essere impostati tramite opportune opzioni. Ad esempio, è in grado di capire se il segnale analogico arriva da una sorgente video composita piuttosto che da una sorgente S-Video. Può capire se si tratta di un filmato in NTSC o PAL, e riconoscere le dimensioni del singolo frame (cioè della singola immagine).
 
Pertanto, la prima cosa da fare è senz'altro provare a eseguirlo con il minimo possibile di opzioni e vedere se funziona.:
 
# lavrec -d 1 filmato.avi
 
In questo caso, sarà creato un file in formato AVI, in cui ogni singola immagine JPEG avrà qualità del 50%, l'audio sarà prelevato dalla presa ''line-in'' della scheda audio, e la registrazione avrà termine quando non ci sarà più spazio su disco, oppure quando l'utente darà il segnale CTRL-C sulla console. L'opzione ''-d 1'' indica la cosidetta ''decimazione'' del filmato, un divisore che determina quale porzione di ciascuna immagine catturata sarà effettivamente utilizzata. Un divisore 1, ovviamente, significa che sarà utilizzata l'intera immagine. All'inizio, può essere prudente usare questo valore, anche se molto dispendioso in termini di memoria di massa.
 
Nei primi approcci all'uso di ''lavrec'', un'altra opzione utile è ''-t'', che richiede un numero intero come argomento: questo argomento rappresenta il numero di secondi di filmato da digitalizzare.
 
==== Conversione in YUV: lav2yuv ====
 
Il file AVI appena ottenuto non è di solito visibile con un lettore DVD da banco. Molti player software, come MPlayer e Xine, sono in grado di mostrare questo genere di filmati, ed è anzi opportuno dare almeno un'occhiata al risultato prima di procedere, per avere un'idea della sua qualità.
 
Per poter comprimere il filmato secondo qualche codec, sia esso MPEG 1, 2 o altro, si deve prima convertire il filmato nel formato YUV, appunto con il comando ''lav2yuv'':
 
# lav2yuv filmato.avi > filmato.yuv
 
La sigla YUV indica una codifica per le immagini a colori introdotto agli albori della trasmissione televisiva a colori per consentire agli apparecchi in bianco e nero di mostrare comunque le trasmissioni. Per maggiori dettagli si veda l'articolo http://en.wikipedia.org/wiki/YUV. Qui ci limitiamo a dire che, a differenza della codifica RGB, che definisce la luminosità di ognuno dei tre colori fondamentali, la codifica YUV usa un canale per la luminosità (indicato proprio con ''Y'', che viene usato da un apparecchio in bianco e nero senza problemi) e due canali per la differenza di luminosità rispetto al canale Y. Di solito i due colori sono il rosso e il blu, ma ci sono altre possibilità, e per ciascun tipo specifico di codifica esistono formule per il passaggio da RGB a YUV e viceversa.
 
La particolare codifica YUV creata da ''lav2yuv'' è nota come '''Y'CbCr''': la ''C'' sta per ''crominanza'', mentre ''b'' ed ''r'', ovviamente, indicano i colori blu e rosso. È una codifica molto diffusa.
 
==== Filtri YUV ====
 
Il file filmato.yuv può essere rielaborato con vari comandi della suite, quasi tutti operanti come filtri. Ad esempio, ''yuvmedianfilter'', ''yuvdenoise'', ''yuvscaler'' e altri. Essi possono essere combinati fra loro con l'operatore '|' riconosciuto da tutte le shell.
 
==== Conversione da YUV a MPEG1/2: mpeg2enc ====
 
Qualunque sequenza di filtri YUV sia stata applicata al file filmato.yuv, prima o poi si vorrà ricavarne un file compresso in MPEG. Questo è il compito del comando ''mpeg2enc'', che consente di ottenere file video per la produzione di VCD, SVCD e DVD. Da notare che non è direttamente gestita la codifica da YUV ai derivati di MPEG4, quali DivX e XVid.
 
==== Estrazione dell'audio: lav2wav ====
 
Fin qui abbiamo accennato alla codifica e alla manipolazione dello stream video. Vediamo ora brevemente come codificare anche l'audio.
 
Il file filmato.avi contiene anche informazioni audio. Esse devono però essere estratte dal file per essere compresse separatamente. Il comando ''lav2wav'' fa proprio questo:
 
# lav2wav filmato.avi > audio.wav
 
Poiché il risultato è inviato allo standard output, lav2wav può essere usato in combinazione con un codec audio, come ad esempio mp2enc, toolame o lame. Se si vogliono produrre VCD, SVCD o DVD, si possono usare i primi due, mentre per produrre DivX o XVid si può usare lame o altro codec MP3. Ad esempio:
 
# lav2wav filmato.avi | mp2enc -o audio.mp2
 
==== Multiplexing di video e audio: mplex ====
 
Ottenuti due flussi, uno video e uno audio, bisogna combinarli per ottenere un flusso multimediale in cui audio e video siano sincronizzati. In questa fase interviene il comando ''mplex'':
 
# mplex -f 1 -o filmato.mpg video.m1v audio.mp2
 
In questo esempio, un video MPEG1 e un audio MPEG1 Layer 2 vengono assemblati per produrre un filmato MPEG1 completo, adatto a realizzare un VCD (''-f 1'').
 
=== Acquisizione da sorgenti analogiche con transcode ed mplayer ===
 
Con l'aggiunta di altri due noti prodotti, appunto ''transcode'' ed ''mplayer'', è possibile convertire i filmati acquisiti con lavrec direttamente in moltissimi altri formati. Qui esamineremo la conversione nel popolare formato XVid.
 
Venendo subito al dunque, se ''filmato-mjpeg.avi'' è il file MJPEG ricavato dall'acquisizione, la seguente riga produce un file ''filmato-xvid.avi'' che può essere inciso su un CD-R o un DVD-R e visualizzato su molti lettori DVD compatibili DivX:
 
# transcode -i filmato-mjpeg.avi -x mplayer -Z 640x360 -w 614,50 -y xvid -o filmato-xvid.avi
 
L'opzione ''-i'' serve a specificare il file di input. Con ''-x'' si sceglie come filtro di input quello basato su mplayer, un player in grado di riconoscere un gran numero di formati diversi. L'opzione ''-y'' seleziona invece il formato XVid per l'output. L'opzione ''-w'' specifica il bitrate e il keyrate (quest'ultimo è opzionale). Infine, ''-Z'' definisce le dimensioni dei frame nell'output.
 
Si tratta solo di un esempio, perché è quasi inevitabile dover fare qualche prova prima di raggiungere delle impostazioni soddisfacenti nelle varie situazioni. Un valore più sensato per l'opzione -Z è 768x576, dal momento che il video PAL intero ha queste dimensioni, ma in questo caso occorrerebbero valori elevati per il video bitrate, con conseguente aumento delle dimensioni del file di output.
 
Alle dimensioni 512x384 vengono conservate le proporzioni dell'immagine e basta un bitrate di 700 per garantire una buona qualità senza eccessivo spreco di spazio, arrivando così ad un compromesso migliore.
 
==Reti==