PDA

Visualizza la versione completa : [mencoder]Creare un Divx con audio ogg- Pico Howto


arcobalenos
26-10-2003, 11:18
Questa non vuole essere una guida completa, è soltanto imho il miglior modo per creare un divx partendo da un dvd usando mencoder, commenterò soltanto le funzioni principali, indispensabili alla buona riuscita, chi volesse più informazione può consultare questi siti:
http://xoomer.virgilio.it/marvigog/guidaDivXInLinuxUnico.htm#ripping_cmdline
http://digilander.libero.it/w1llcoyote/
http://digilander.libero.it/w1llcoyote/ex2.html
http://www.infocom.it/dvd2ogm/#compressione-video
(Ho preso praticamente tutto dagli ultimi due links)

1 - Inserire il dvd nel lettore :stordita:
2 - mencoder -o -ovc copy -oac copy -aid 129 -dvd 1

Estrae e decodifica il dvd nel file test.avi, annotarsi la durata del film in secondi, nel mio caso sono 5814, le opzioni degne di nota sono:
-aid 129 Serve a selezionare la lingua, il numero varia per ogni dvd quindi bisogna cercare quello giusto, al suo posto si può usare anche -alang it ma solo per i dvd con una sola traccia in italiano (e comunque non funziona sempre).
-dvd 1 Dice a mencoder di estrarre il primo title, in genere il film è quello, ma non sempre, anche qua bisogna provare.

3 - mencoder -ovc frameno -oac pcm -o frameno.avi test.avi

Serve a creare il file frameno.avi contenente l'audio, serve a mencoder per operazioni future

4 - mplayer -vc dummy -vo null -hardframedrop -ao pcm -aofile test.wav test.avi

Estrae l'audio in wav dal file avi.

5 - oggenc -q3 -o test.ogg test.wav

Converte l'audio in ogg, -q3 è la qualità, 3 imho va bene, si può aumentare ma aumenterebbero anche le dimansioni finali e ne risentirebbe la qualità del video, annotarsi la dimensione del file audio generato, nel mio caso 62.6 Mb

6 - mplayer -vop cropdetect test.avi

Serve a calcolare le "vere" dimensioni del filmato, tagliando le bande nere ai lati, quando parte il filmato bisogna attendere una scena "chiara" se la scena è scura mencoder potrebbe sbagliare, si otterrà un output simile a questo:

crop area: X: 2..719 Y: 9..564 (-vop crop=718:554:2:10)15% 0,8% 0 0 49%
A noi interessano: 718, 554, 2, 10 annotarseli

7 - bitrate=(dimensionefinale x 1048576)-(dimensioneaudio x 1048576)x8/1.0115/temposec/1000

Serve a calcolare il bitrate del video, nel mio caso (700 x 1048576)-(62.6 x 1048576) x 8 / 1.0115 / 5814 /1000 = 909
Ho scelto 700 perchè è la dimensione del cd dove masterizzerò il divx, 909 è il risultato approssimato per difetto.

8 - calcbpp.pl risoluzione 16/9 bitrate 25

Tramite lo script calcbpp.pl (che allego) si calcola da dimensione ottimale in pixel del nostro divx.
Risoluzione: quella ottenuta da "mplayer -vop cropdetect test.avi", nel mio caso 718x554
16/9 In genere i dvd sono in 16/9 ma potrebbero anche essere in 4/3.
bitrate: quello calcolato con l'equazione al punto 7
25: Numero di frame al secondo del filmato, sinceramente non so dire di più, i dvd credo siano sempre con 25 Frame/s, ma altri tipi di filmati potrebbero avere un framerate diverso.
L'output sarà simile a questo:
calcbpp.pl 718x554 16/9 909 25
Prescaled picture: 1021x554, AR 1.84
720x384, diff 7, new AR 1.88, AR error 1.69% scale=720:384 bpp: 0.132
704x384, diff -2, new AR 1.83, AR error 0.54% scale=704:384 bpp: 0.134
688x368, diff 5, new AR 1.87, AR error 1.41% scale=688:368 bpp: 0.144
672x368, diff -3, new AR 1.83, AR error 0.94% scale=672:368 bpp: 0.147
656x352, diff 4, new AR 1.86, AR error 1.09% scale=656:352 bpp: 0.157
640x352, diff -5, new AR 1.82, AR error 1.38% scale=640:352 bpp: 0.161
624x336, diff 3, new AR 1.86, AR error 0.75% scale=624:336 bpp: 0.173
608x336, diff -6, new AR 1.81, AR error 1.86% scale=608:336 bpp: 0.178
592x320, diff 1, new AR 1.85, AR error 0.37% scale=592:320 bpp: 0.192
576x320, diff -8, new AR 1.80, AR error 2.40% scale=576:320 bpp: 0.197
560x304, diff 0, new AR 1.84, AR error 0.06% scale=560:304 bpp: 0.214
544x288, diff 7, new AR 1.89, AR error 2.42% scale=544:288 bpp: 0.232
528x288, diff -2, new AR 1.83, AR error 0.54% scale=528:288 bpp: 0.239
512x272, diff 6, new AR 1.88, AR error 2.08% scale=512:272 bpp: 0.261
496x272, diff -3, new AR 1.82, AR error 1.08% scale=496:272 bpp: 0.270
480x256, diff 4, new AR 1.88, AR error 1.69% scale=480:256 bpp: 0.296
464x256, diff -4, new AR 1.81, AR error 1.70% scale=464:256 bpp: 0.306
448x240, diff 3, new AR 1.87, AR error 1.25% scale=448:240 bpp: 0.338
432x240, diff -6, new AR 1.80, AR error 2.40% scale=432:240 bpp: 0.351
416x224, diff 2, new AR 1.86, AR error 0.75% scale=416:224 bpp: 0.390
400x224, diff -7, new AR 1.79, AR error 3.22% scale=400:224 bpp: 0.406
384x208, diff 0, new AR 1.85, AR error 0.16% scale=384:208 bpp: 0.455
368x192, diff 8, new AR 1.92, AR error 3.83% scale=368:192 bpp: 0.515
352x192, diff -1, new AR 1.83, AR error 0.54% scale=352:192 bpp: 0.538
336x176, diff 6, new AR 1.91, AR error 3.45% scale=336:176 bpp: 0.615
320x176, diff -2, new AR 1.82, AR error 1.38% scale=320:176 bpp: 0.646


Bisogna controllare l'ultimo valore di ogni riga e si sceglierà quello più simile a 0.24 , nel mio caso:
528x288, diff -2, new AR 1.83, AR error 0.54% scale=528:288 bpp: 0.239
La risoluzione del mio filmato sarà 528x288

9 - mencoder -v -o /dev/null -oac copy -ovc lavc -vop scale=528:288,crop=718:554:2:10 -lavcopts vcodec=mpeg4:vbitrate=909:vhq:vqscale=2:vqmin=2:v4 mv:vpass=1 -sws 2 test.avi

Primo passaggio, creerà il file divx2pass.log contenente informazioni per il secondo passaggio:
-vop scale=528:288 la risoluzione ottenuta con calcbpp.pl al punto 8
crop=718:554:2:10 I valori ottenuti con "mplayer -vop cropdetect test.avi" al punto 6
vbitrate=909 Il bitrate del video ottenuto con l'equazione al punto 7

10 - mencoder -v -o test.divx -oac copy -ovc lavc -vop scale=528:288,crop=718:554:2:10 -lavcopts vcodec=mpeg4:vbitrate=909:vhq:vqmin=2:v4mv:vpass=2 -sws 2 test.avi
Secondo passaggio, genera i file nostro divx contenente l'audio non compresso

11 - ogmmerge -o titolo.ogm -A test.divx test.ogg
Genera il nostro file contenente il video e l'audio compressi, lasciare l'estensione ogm altrimenti mplayer si impalla.

Sicuramente questo metodo si può migliorare, sono ben accetti consigli da chi ne sa più di me.
Un mio amico che usa winzozz ha sbavato quando ha visto un divx che ho creato con questo metodo, ora mi tocca andargli ad installare Gentoo :jam:
Marco Ugolini

arcobalenos
26-10-2003, 11:23
Ho dimenticato calcbpp.pl :fagiano:
Eccolo:
#!/usr/bin/perl -w

use POSIX;

sub round {
my $v = shift;

return floor($v + 0.5) != floor($v) ?
floor($v + 0.5) :
floor($v);
}

$raw_aspect = 720/576;

if (scalar(@ARGV) < 4) {
print("Please provide a) the cropped but unscaled resolution (e.g. " .
"716x524), b) the aspect ratio (either 4/3 or 16/9 for most DVDs), " .
"c) the video bitrate in kbps (e.g. 800) and d) the movie's fps.\n");
print("If your DVD is not encoded at 720x576 then change the \$raw_aspect" .
"variable at the beginning of this script.\n");
exit(1);
}

($unscaled_width, $unscaled_height) = split('x', $ARGV[0]);
$encoded_at = $ARGV[1];
if ($encoded_at =~ /\//) {
my @a = split(/\//, $encoded_at);
$encoded_at = $a[0] / $a[1];
}
$scaled_width = $unscaled_width * ($encoded_at / ($raw_aspect));
$scaled_height = $unscaled_height;
$picture_ar = $scaled_width / $scaled_height;
($bps, $fps) = @ARGV[2, 3];

printf("Prescaled picture: %dx%d, AR %.2f\n", $scaled_width, $scaled_height,
$picture_ar);
for ($width = 720; $width >= 320; $width -= 16) {
$height = 16 * round($width / $picture_ar / 16);
$diff = round($width / $picture_ar - $height);
$new_ar = $width / $height;
$picture_ar_error = abs(100 - $picture_ar / $new_ar * 100);
printf("${width}x${height}, diff % 3d, new AR %.2f, AR error %.2f%% " .
"scale=%d:%d bpp: %.3f\n", $diff, $new_ar, $picture_ar_error, $width,
$height, ($bps * 1000) / ($width * $height * $fps));

polpastrello
26-10-2003, 11:28
ehm, mi space, ma non posoo essere un tester valido per il tuo howto, guarda qui:

/home# mencoder -o -ovc copy -oac copy -aid 129 -dvd 1
MEncoder 1.0pre2-3.3.2 (C) 2000-2003 MPlayer Team

CPU: Advanced Micro Devices Athlon Thunderbird 1335 MHz (Family: 6, Stepping: 2)Detected cache-line size is 64 bytes
MMX2 supported but disabled
CPUflags: Type: 6 MMX: 1 MMX2: 0 3DNow: 1 3DNow2: 1 SSE: 0 SSE2: 0
Compiled for x86 CPU with extensions: MMX 3DNow 3DNowEx SSE

Reading /root/.mplayer/mencoder_codecs.conf: Can't open '/root/.mplayer/mencoder_codecs.conf': No such file or directory
Reading /etc/mplayer/mencoder_codecs.conf: 61 audio & 157 video codecs
File not found: 'frameno.avi'
Failed to open frameno.avi
Reading config file /root/.mplayer/mencoder: No such file or directory
-dvd N is deprecated, use dvd://N instead.


:bhò:

arcobalenos
26-10-2003, 11:32
Io se fossi in te disinstallerei mplayer e mencoder e li installerei dai sorgenti
Prova anche a farlo da utente invece che da root

almafer
26-10-2003, 11:34
Originariamente inviato da arcobalenos
Io se fossi in te disinstallerei mplayer e mencoder e li installerei dai sorgenti
mi pare osirix diceva l'altro giorno che con la nuova versione di mplayer al posto di
mplayer -dvd
bisognasse scrivere
mplayer ://dvd
:fagiano:

gigyz
26-10-2003, 12:50
esatto con le nuovi versioni a sintassi è cambiata.
al posto di mplayer -vc dummy -vo null -hardframedrop -ao pcm -aofile test.wav test.avi
io uso:
mplayer -vc null -vo null -ao pcm -aofile test.wav -aop list=volnorm test.avi
perchè molto spesso il volume dell'audio dei DVD è basso
poi io in genere copio l'audio sei canali del dvd e estraggo l'audio in inglese convertendolo in ogg come hai fatto tu quindi con ogmmerge metto il video l'audio 6 canali italiano e l'audio in inglese in oggVorbis
poi faccio anche i sottotitoli sempre durante la compressione usando -vobsubout sottotitoli -vobsuboutid it -vobuboutindex 0
e naturalmente cambiando id e index faccio anche quelli in inglese. Tanto per sfizio tempo fa ho fatto su 2 cd un film con 9 sototitoli e tre lingue in OggVorbis.

osiryx
26-10-2003, 13:01
Originariamente inviato da almafer
mi pare osirix diceva l'altro giorno che con la nuova versione di mplayer al posto di
mplayer -dvd
bisognasse scrivere
mplayer ://dvd
:fagiano:
mplayer dvd://1

polpastrello
26-10-2003, 13:47
scusatemi, forse dovrei aprire un 3d. ma provo prima con voi.
Seguendo il consiglio di arcobalenos, ho installato i sorgenti di mplayer, precisamente MPlayer-0.92
Ecco, se lo faccio partire devo riavviare, s'impalla tutto. tutto nero.....Perchè?? sinceramente non mi interessa. Quello che vorrei sapere è come eliminare questa installazione andata a pessimo fine, perche non posso reinstallare con apt il mio "vecchio" mplayer funzionante se prima non tolgo questo.
che comnado devo usare?
:cry:

osiryx
26-10-2003, 13:52
apt-get remove mplayer

almafer
26-10-2003, 13:53
prova a spostarti nella cartella dove hai scompattato mplayer e dare
make unistal
se non funziona devi rimuovere a mano le varie voci

Loading