Divx e dintorni

Pacchetti necessari

Installiamo tutti questi pacchetti

Mplayer         ATTENZIONE:non quello ufficiale di slackware,è preferibile quello di slacky
Ogg-vorbis    per comprimere l'audio in formato ogg.
Ogm-tools
Lame             per comprimere in Mp3
Xvid codec    potete anche usarlo ma vista la lentezza ve lo sconsiglio
Vobcopy        per copiare il contenuto del dvd su hd
Libdvdcss
Libdvdread
A52dec         per gli streams ac3
X264             
Avidemux    
ProjectX       per i files mpeg-ps
Transcode    
FFmpeg
Mjpegtools


DVD(mpeg2) in divx(mpeg4)

Copiamo il dvd

E' possibile anche encodare il dvd "al volo",ma data l'estrema lentezza dei lettori

DVD e' meglio copiare il film su hd.

Per farlo ci serviamo del programma vobcopy che avviamo da linea di comando

$vobcopy -I /mnt/dvd


il quale ci da le informazioni su capitoli,angoli,titolo.

poi

$vobcopy -n 2 -o /percorsodovevoletesalvareilfilm -l


dove -n 2 e' il  secondo titolo del dvd,che spesso sono composti da 2 o piu' titoli

-l abilita il supporto per i files oltre i 2gb.

Appena vobcopy avrà terminato spostatevi nella directory ove avete copiato

i files e date

$ cat TITOLO.1 TITOLO.2 TITOLO.3 > titolo.vob



Crop & scale

I divx necessitano delle opzioni crop and scale,in breve

crop elimina le bande nere mente scale porta il filmato alla risoluzione desiderata

i valori di  scale devono essere multipli di 16

Le opzioni indicate sotto sono da esempio,le useremo prima

con mplayer come test(in quanto mplayer non scrive sul file in uscita)

e dopo con mencoder(che crea il divx vero e proprio)

Dando questo comando

$mplayer - cropdetect titolo.vob


vi appariranno nella console linee simile a questa

crop area: X: 0..638 Y: 0..368 (- crop=638:368:29:92)0% 0,8% 0 0 0%

dove

638 e' l'altezza H

368 la larghezza W

29 posizione sull'asse X

92 posizione sull'asse Y


in questo caso pertanto aggiungerete l'opzione crop=638:368:29:92

$mplayer -vf crop=638:368:29:92


se volete testare come apparirà il film e cosa verrà effetivamente tagliato

potete usare l'opzione "rectangle",che farà apparire un rettangolo bianco

sul video in uscita e  indica cosa taglia effetivamente(le linee oltre il rettangolo

bianco verranno  tagliate nella successiva codifica)

$mplayer -vf rectangle=638:368:29:92




Nella foto sopra ecco rectangle in azione,in questo caso noterete che il valore

di crop e' errato(sta tagliando troppo falsando cosi' il formato) ,pertanto tocca correggerlo a

mano,modificando i valori(h,w,x,y)  fino  ad ottenere un crop preciso(ovvero deve tagliare SOLO le linee

nere senza toccare il film),come nella foto  sotto




Adesso noterete  le linee bianche che escludono solo le bande nere,per aiutarvi nelle operazioni

di crop usate il filtro autocrop di avidemux2 e segnatevi i valori

per spostare il rettangolo di posizione basatevi sui valori di X e Y

es..per spostare il rettangolo a sinistra,diminuite il valore di X

638:368:27:92
638:368:26:92

e via dicendo..finche' il risultato non vi soddisfa

per spostarlo invece a destra,aumentate il valore di X

638:368:31:92
638:368:32:92

per spostarlo in alto o in basso diminuite o aumentate

il valore di Y.

Adesso passiamo allo scale,lo scale come dice la parola

stessa vuol dire scalare la risoluzione del divx

vi consiglio vivamente di rispettare l'AR(aspect ratio) del formato

originale,almeno che non abbiate qualche buona

ragione per cambiarlo,facendo le cose a casaccio

rischiate di deformare l'immagine originale,ottenendo

effetti strani e sgradevoli come volti ovalizzati,o allungati

Altra regola da seguire e non alzare mai il valore

di scale oltre quello originale,pena la perdita di qualità

se un file .mpeg ha una risoluzione di 576:432 non ha

senso portarlo a 640:480.

Infine ricordate di aumentare il bitrate a seconda

della risoluzione(maggiore è la risoluzione maggiore

sarà il bitrate da impostare)


Aspect ratio

Nonostante le tv abbiano una risoluzione "fissa" che di solito

è 720x576(ma può essere anche inferiore) l'ar(aspect ratio)

del film può variare(può essere 2:35:1 oppure 16:9 o anche 1:33:1)

es questo sotto è un 1:85:1



anche se leggendo il file originale mplayer ci restituisce

1:77:1,per ottenere il formato corretto  aprite

l'immagine con gimp,levate le bande nere

e cliccate su file/nuovo,i valori di altezza e larghezza

della nuova immagine senza le bande nere li dividerete e vi restituiranno

il valore corretto,in questo caso..

immagine originale=1024x576

croppata(ossia senza le bande nere)=1021x552

1021/552=1.84963768 che si avvicina molto a 1:85:1

potete ottenere uno screenshot originale del vostro

film anche con mplayer(-vf screenshot)



Scale in base all'ar


Per aiutarvi nello scale ecco alcune risoluzioni consigliate

a seconda del AR

1:33:1(formato 4/3 usato di solito nelle registrazioni televisive)

320 x 240
384 x 288
448 x 336
512 x 384
576 x 432
640 x 480
704 x 528
768 x 576


1:77:1 (formato 16/9 usato in alcuni dvd e nelle registrazioni tv)

256 x 144
512 x 288
768 x 432


1.85:1 (formato 16/9 usato nei dvd e  nelle vhs)

384 x 208
416 x 224
560 x 304
592 x 320
624 x 336
768 x 416


2.35:1 (formato panavision)

304 x 128
336 x 144
416 x 176
528 x 224
640 x 272
752 x 320


altri valori possono essere ottenuti dividendo multipli di 16

(es. 528x288 1:84:1)



Divx a una sola passata con mpeg4+lame

$mencoder  titolo.vob -o temp.avi -vf yadif,crop=702:440,scale=544:304,harddup  -sws 2 -oac mp3lame -lameopts br=128:cbr -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:turbo:vbitrate=809:keyint=50 -noskip  -ffourcc XVID



in questo caso abbiamo tagliato il filmato(crop) portandolo a 702:440 ,e lo abbiamo riscalato a 544:304

come bitrate abbiamo usato 894kbps  per il video e 128kbps per l'audio.

Le altre opzioni sono

yadif(filtro deinterlace)

harddup(converte anche i frames duplicati)QUESTO VA MESSO SEMPRE ALLA FINE DELLA CATENA VF

sws 2(scalatore software impostato a 2)

vcodec=mpeg4 (il codec di compressione usato,in questo caso libavcodec compatibile divx)

keynt (intervallo massimo tra i fotogrammi,piu' e alto minore sarà la qualità del video)

-noskip (indica di non saltare fotogrammi,consigliato sopratutto nel caso di conversioni da mpeg-ps)

-ffourcc XVID (potete anche non usarlo,ma in questo caso molti lettori mpeg4 da tavolo,o alcuni

programmi come windows media player,non riusciranno a visualizzare il file)

Per maggiori informazioni consultate il man di mplayer


Divx a 2 passate con mpeg4+lame


#!/bin/bash
mencoder titolo.vob -o /dev/null -vf yadif,crop=688:560:6:8,scale=496:288,
harddup  -sws 2 -nosound -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:turbo:vbitrate=809:keyint=50:vpass=1 -noskip-ffourcc XVID
mencoder titolo.vob -o temp.avi -vf yadif,crop=688:560:6:8,scale=496:288,
harddup-sws 2 -oac mp3lame -lameopts br=192:cbr -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:turbo:vbitrate=809:keyint=50:vpass=2 -noskip -ffourcc XVID




Divx ad altissima qualità


Preciso che per ottenere divx ad alta qualità,occorre aspettare molto tempo,ad esempio su un  pc

con amd athlon 3000+ occorrono la bellezza di 7 ore per passata.

#!/bin/bash
opts="vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vbitrate=922:keyint=50"
mencoder titolo.vob -o /dev/null -vf yadif,crop=704:438:0:69,scale=496:288,harddup  -sws 2 -nosound -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:$opts -noskip -ffourcc XVID 
mencoder titolo.vob -o temp.avi -vf yadif,crop=704:438:0:69,scale=496:288,harddup  -sws 2 -oac mp3lame -lameopts br=128:cbr -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:$opts -noskip -ffourcc XVID 


Per ogni singola voce consultate il man di mplayer



Considerazioni sul bitrate


Inutile dire,che potete aumentare o diminuire il bitrate e la risoluzione a vostro piacimento,pero' aumentando

la risoluzione e il bitrate di conseguenza aumenterà anche la dimensione del divx.

Per facilitarvi il compito usate il calcolatore di bitrate di avidemux2(si trova in tools nel menù principale)



Avviatelo dopo aver aperto titolo.vob e selezionate il formato

che intendete usare(cd,dvd,o dimensione personalizzata)

infine copiate Video bitrate che userete con mencoder(vbitrate=valore di avidemux)

Oppure se volete usare mencoder

$mencoder -ovc frameno -oac mp3lame -lameopts br=128:cbr -o frameno.avi titolo.vob


il file che otterrete(frameno.avi) potete anche eliminarlo dopo

quello che vi interessa e' il bitrate consigliato a seconda

della dimensione del file che apparirà al termine della codifica

Recommended video bitrate for 650MB CD: 713
Recommended video bitrate for 700MB CD: 779
Recommended video bitrate for 800MB CD: 911
Recommended video bitrate for 2 x 650MB CD: 1569
Recommended video bitrate for 2 x 700MB CD: 1701
Recommended video bitrate for 2 x 800MB CD: 1964





X264

Questo nuovo codec,ha il vantaggio di ottenere dei filmati ad alta qualità

anche con bitrate inferiori a 900,e cosa molto importante ad una dimensione

inferiore rispetto ai classici divx/xvid,finora solo realmedia è riuscito a fare

di meglio(con real media possiamo ottenere dei files ad alta qualità con

dimensioni inferiori ai 400mb per un ora e mezza di video..,ma si tratta

di un formato chiuso,e per certi versi ostico).

In genere è consigliato usare x264 con filmati ad alta qualità(hd-tv,oppure

anche dvd,o registrazioni tv decenti..)non ha senso per me usarlo per

fare vhsrip...

Vediamo come ottenere un filmato ad alta qualità,con mencoder

come codec audio abbiamo usato faac(freeware advanced audio codec)

ma potete usare anche ac3,mp3..quello che volete.

Prima di iniziare vediamo anche gli svantaggi di x264

1)E' ancora in fase di sviluppo,con tutto quello che ne consegue

2)Non viene letto dalla maggior parte dei lettori da tavolo

3)La decodifica necessita di una cpu potente(minimo un athlon 2000)

4)Creare un file ad alta qualità impiega in genere 5 o 6 ore

Ecco come creare un avi con mencoder

crop=720:556
scale=512:288
bitrate=980
opt2="frameref=6:analyse=all:me=umh:subme=7:trellis=2:bframes=1:subq=7:brdo:mixed_refs:weight_b:bime:no_fast_pskip:direct_pred=auto:mixed_refs:nr=200:threads=auto:turbo=2:pass=1:bitrate=$bitrate"
opt3="frameref=6:analyse=all:me=umh:subme=7:trellis=2:bframes=1:subq=7:brdo:mixed_refs:weight_b:bime:no_fast_pskip:direct_pred=auto:mixed_refs:nr=200:threads=auto:pass=2:bitrate=$bitrate"

mencoder -vf crop=$crop,scale=$scale,harddup -ovc x264 -x264encopts $opt2 -nosound -noskip -o /dev/null titolo.vob
mencoder -vf crop=$crop,scale=$scale,harddup -ovc x264 -x264encopts $opt3 -oac faac -faacopts br=196 -noskip -o tmp2.avi titolo.vob


Vediamo le opzioni una per una

crop=taglia le bande nere
scale=riscala alla risoluzione scelta
bitrate=indichiamo il bitrate che vogliamo usare
opt2=le opzioni di x264 per la prima passata
opt3=le opzioni di x264 per la seconda passata

ATTENZIONE:A causa di un bug di mplayer è sconsigliato usare faac(nessun altro lettore
eccetto mplayer riuscirà a leggere l'audio)

se volete informarvi meglio sulle singole opzioni di x264 consultate il manuale di mplayer





Ogg vorbis

Se anziche' un formato proprietario,volete usare un formato libero come ogg(che ha una maggiore compressione)

seguite questo procedimento,vi rammento pero' che gli ogm possono presentare problemi di

sincronia audio/video.

Estraete il suono dal file .vob e salvatelo  in formato .wav

$ mplayer titolo.vob  -vc null -vo null -hardframedrop  -aid 128  -ao pcm:file=italiano.wav


con questo salviamo la traccia in italiano(indicata dal id 128) in formato wav

Convertiamola ora in ogg

$ oggenc -q 3 -o italiano.ogg italiano.wav


Adesso rippiamo il dvd a 2 passate ma senza il suono

#!/bin/bash
mencoder  titolo.vob -o /dev/null -vf crop=688:560:6:8,scale=496:288,yadif,harddup  -sws 2 -nosound -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:vpass=1:mbd=2:keyint=50 -noskip
mencoder  titolo.vob -o temp.avi -vf crop=688:560:6:8,scale=496:288,yadif,harddup  -sws 2 -nosound -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:vpass=2:mbd=2:keyint=50 -noskip


e infine uniamo l'audio e il video con ogmmerge

$ ogmmerge -c 'TITLE=titolo del film' -A tmp.avi -c 'LANGUAGE=italiano' italiano.ogg  -o titolo.ogm


Titolo.ogm e' il file finale





Files flv

Sono i files di macromedia flash,utilissimi se avete un sito web

e volete pubblicare dei filmati

$ mencoder -vf scale=640:480 -ffourcc FLV1 -of lavf -lavfopts \ i_certify_that_my_video_stream_does_not_use_b_frames  -ovc lavc   -srate 22050 -oac lavc -lavcopts \ vcodec=flv:vbitrate=900:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:acodec=mp3:abitrate=56  -o out.swf fileinput



Acquisizione da vcr,videocamere,etc.

Una precisazione:se avete una scheda firewire è meglio sfruttare l'acquisizione da digitale con kino

queste righe sono riferite all'acquisizione da sorgente analogica(vcr,videocamere),è necessaria ovviamente

anche una scheda di acquisizione video.

Dopo aver collegato il dispositivo alla scheda di acquisizione avvolgete il nastro dall'inzio e attendete

avviamo mplayer per una anteprima

ora avviate mencoder per la cattura


$ mencoder tv:// -tv driver=v4l2:width=720:height=576:device=/dev/video1:input=1:alsa:adevice=hw.1,0:amode=1:volume=100 -o out.avi -ovc lavc -lavcopts vcodec=mjpeg:aspect=16/9 -aspect 16:9 -noautoexpand -oac pcm -noskip -vf crop=716:574:3:2,scale=720:576 -endpos 00:40:00

tv:// -tv:Indica di registrare da fonte analogica

driver=v4l2:il driver di cattura in uso

width=720:larghezza del video

height=576:altezza del video

device=/dev/video1:dispositivo di cattura(per me è video1 avendo 2 schede di cattura,per chi ne ha una è /dev/video)

input=1:cattura da ingresso analogico(cavo giallo)

:alsa:adevice=hw.1,0:amode=1 Importanti sono le opzioni del suono che indicano di usare alsa e il dispositvo audio 1,0(quello della
dvb potrebbe non essere uguale,per maggiori informazioni date arecord -l)

-o out.avi:file di uscita

-ovc lavc -lavcopts vcodec=mjpeg:aspect=16/9 -aspect 16:9 -noautoexpand:  opzioni di lavc(ovviamente cambiate in 4/3 se avete

impostato la videocamera per le reg. formato 4/3)

-oac pcm userà il codec wav per il suono(attenzione perchè non è compresso)

-noskip eviterà di saltare i fotogrammi

-crop,scale
  taglia le bande nere(attenzione,usate  cropdetect e  rectangle per i valori  corretti)

-endpos qui mettete la durata del filmato(se dura 40 minuti allora 00:40:00)

Il file generato sarà molto grosso,comprimiamolo e creiamo un mpg2 di buona qualità

$ mencoder out.avi -of mpeg -vf yadif,crop=716:574:3:2,scale=720:576,harddup -oac lavc -ovc lavc -lavcopts  acodec=ac3:vcodec=mpeg2video:abitrate=128:vbitrate=2600:aspect=16/9  -noskip -mpegopts format=dvd  -srate 48000 -ofps 25 -o movie.mpg -aspect 16:9





Pillole


Mencoder oltre a esserci utile per il ripping,può venirci incontro in caso di problemi

con films con audio desincronizzato,indice rovinato,etc.

Audio desincronizzato

Supponiamo abbiate un file video con la traccia audio desincronizzata


Qui usiamo sia avidemux che mencoder,con avidemux aprite il film con traccia desincronizzata

cliccate su audio e infine su build vbr time map,attendete e tagliate(usando B) quando

inizia il suono,tralasciando il video,ovviamente partite dal frame 0.

Infine salvate la traccia audio(che chiameremo traccia1) con audio/save audio

Ora con mencoder

$mencoder -o sincronizzato.avi  -audiofile traccia1 -oac copy -ovc copy desincronizzato.avi

questo metodo e' valido solo se la traccia audio parte in ritardo,se invece

parte correttamente ma si desincronizza in seguito dovete usare altri

metodi(avidemux)


Concatenare diversi files video

Per i video mpg usate mpgtx,se non funziona o da problemi


$cat file1 file2 file3|mencoder -oac copy -ovc lavc -vf harddup -


Per i files avi,e' molto piu' complesso visto che hanno un indice,che determina l'inizio

e la fine del file.

Iniziamo a concatenare i files avi

cat file1.avi file2.avi file3.avi > finale.avi


poi

mencoder -o finale2.avi -noidx -oac copy -ovc copy finale.avi


otterremo il file completo,ma dobbiamo fare un ulteriore passo per ricostruire l'indice

mencoder -o finale3.avi -forceidx -oac copy -ovc copy finale2.avi



Convertire da ntsc a pal e viceversa

NTSC e' un metodo di codifica delle informazioni televisive,usato negli Stati Uniti,Giappone

Canada,etc..,mentre in italia usiamo il PAL,in breve la differenza sta che il framerate anziche'

essere 25 FPS e' di 29.97 FPS questo vale sia per l'audio che per il video,pertanto se volete trasfor

mare un divx pal in ntsc dovete ricodificare con

$ mencoder filePAL.avi -ovc lavc -oac mp3lame -o fileNTSC.avi -ofps 30000/1001


mentre per fare il procedimento da ntsc a pal

$ mencoder fileNTSC.avi -ovc lavc -oac mp3lame -o filePAL.avi -ofps 25


Questo comporta una leggera perdita di qualità,visto che state ricodificando un divx.

Riprendere files .avi incompleti

Supponiamo vi troviate in questa situazione,state scaricando dal

mulo un film come questo(preciso che questo film essendo fuori commercio

da decenni non e' protetto da copyright)

come vedete mancano 5 "chunks" per completarlo,le fonti sono 0 e ferme

da oltre un anno,se volessimo recuperare il recuperabile?

Se proviamo a usare mencoder mancando il chunk finale

si ferma al primo chunk mancante(pertanto ai primi 20 minuti)

percio' recupereremmo soltanto i primi 20 minuti

Supponiamo che il film sia associato al file 004.part

allora con ffmpeg diamo

$ffmpeg -i 004.part -acodec copy -vcodec copy outfile.avi


il file che otterremo (outfile.avi) sarà quello che siamo riusciti

a recuperare,vi consiglio una riconversione grezza(modalità copy) con mencoder

o avidemux in modo da ovviare agli eventuali errori video,audio.

Questo sistema non funziona con files senza il primo chunck

Sfruttare il dual core

Con le nuove cpu multicore(x2,x3,x4)

possiamo diminuire i tempi di codifica sfruttando l'opzione

threads=* dove a * sostituiamo il numero dei threads da effettuare.

Attenzione perchè i files generati con questo sistema potrebbero essere

incompatibili coi lettori da tavolo.

#!/bin/bash
crop=488:410
scale=512:284
rate=1030
opt1="threads=3:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vbitrate=$rate:keyint=50"
opt2="threads=3:mbd=2:trell:v4mv:turbo:vbitrate=$rate:keyint=50"
opt3="threads=3:mbd=2:vbitrate=$rate:keyint=50"
mencoder titolo.vob -o /dev/null -vf yadif,crop=$crop,scale=$scale,harddup -sws 2 -nosound -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:$opt2 -noskip -ffourcc XVID
mencoder titolo.vob -o temp.avi -vf yadif,crop=$crop,scale=$scale,harddup -sws 2 -oac mp3lame -lameopts br=128:cbr -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:$opt2 -noskip -ffourcc XVID  


Rumore video

Nei dvd il rumore video è raramente presente(solo

in caso di dvd fatti coi piedi),mentre è frequente

nelle registrazioni tv e nelle vhs,per eliminarlo usate

questo filtro

hqdn3d=4:3:6


si tratta di valori molto alti,utili per eliminare disturbi

molto forti,per disturbi dell'immagine leggeri potete usare

valori inferiori come

hqdn3d=2:2:4


Convertire i files windows media

Per convertire i files windows media usate questa linea di comando

mencoder file.wmv    -ofps 23.976   -oac mp3lame   -ovc lavc -lavcencopts bitrate=800 -o 1.avi


abbiamo scelto come fps 23.976(validi per i video ntsc,se è pal usate 25) mentre come bitrate 800k

Files mpg-ps(vdr) e mpg-ts(kaffeine)

È necessario usare ProjectX aprire il file di vdr o kaffeine

fare il demultiplex(quick start) e poi rimuxare i 2 files

m2v e m2a con mplex(che trovate nel pacchetto mjpegtools)

$ projectx 001.vdr

$ mplex -o file.mpg -f 3 001.m2v 001.m2a


il file mpg dovrebbe avere salvo complicazioni l'audio e il video

sincronizzati.

Dvb-hd(h264)

Come gestire i flussi hd delle schede dvb?

Supponiamo lo stream sia nel file "stream.dump"

mplayer -vc ffmpeg12,ffh264,ffwmv3,ffvc1 -mc 2 stream.dump -vf yadif -mc 2 -delay -0.3

Se usate una scheda che non supporta VDPAU(ati,intel)

mentre se possedete una NVIDIA potete sfruttare l'accelerazione

VDPAU(il lavoro grava sulla gpu lasciando libera la cpu)

quindi la linea sarà

mplayer -vc ffmpeg12vdpau,ffh264vdpau,ffwmv3vdpau,ffvc1vdpau -vovdpau:deint=3 -mc 2 stream.dump -vf yadif -mc 2 -delay -0.3

Ultimo aggiornamento: 2010-05-05

Torna all'indice