Newsgroup: it.comp.software.divx
Titolo: MP3 CBR con bitrate strano

Mi sono imbattuto in un caso che non avevo mai visto.
Ieri OxygeN ha riportato un caso di due AVI (entrambi sincronizzati),
che uniti con avimerge davano un risultato con il seguente problema:
------------------------------
L'audio č fuori sincro dopo alcuni minuti di filmato "unito", mentre
dal punto d'unione in poi ritorna "in sinc", anche se poi si
de-sincronizza... :-(
------------------------------
Dalle analisi fatte dal mio programma, ho individuato il problema.
Si tratta del bitrate audio, che nei file di partenza presenta
queste caratteristiche:
------------------------------
Audio tag: 0x55 (MP3)
Bitrate: 127.696 kbps CBR
Canali: 2
Frequenza: 44100 Hz
Chunks: 14807
Stream size: 47,273,161 bytes
Ritardo: 0 ms
------------------------------
Di solito il bitrate di un MP3 CBR e' un numero intero espresso in
kbps (dove k vale 1000).
Qui invece e' un numero strano, 127.696 kbps.
Se facciamo questo calcolo (il numero di bit dello stream diviso
per il bitrate):
47,273,161*8/127696 = 2961.606377 secondi
Questo valore coincide con la durata del video, che e' riportata nelle
"Info generiche":
Durata: 00:49:22 (2961.56 s)
Sem invece, sostituiamo nella formula 127000, otteniamo:
47,273,161*8/127000 = 2,977.836913 secondi
cioe', assumendo che il bitrate sia 127 kbps, pare che la durata
dell'audio sia 16 secondi in piu' della effettiva durata...
Ora arrivo al punto :-)
Queste sono le caratteristiche della traccia audio del risultato:
----------------------------
Audio tag: 0x55 (MP3)
Bitrate: 127 kbps CBR
Canali: 2
Frequenza: 44100 Hz
Chunks: 28767
Stream size: 91,841,653 bytes
Ritardo: 0 ms
----------------------------
Si puo' osservare che:
1) il bitrate e' 127 kbps CBR (cifra tonda);
2) la dimensione dello stream (91,841,653 bytes) e' inferiore
   della somma degli stream di partenza (92,346,221 bytes),
   mentre, da altre prove fatte, ho constatato che coindide
   sempre con la somma...
Ho dato un'occhiata ai sorgenti di transcode, dell'utility
avimerge e della libreria usata avilib, ed ecco dov'e' il
problema (file avilib.c, linea 2470):
AVI->track[AVI->aptr].mp3rate = 8*str2ulong(hdrl_data+i+8)/1000;
il campo "mp3rate" e' dichiarato come intero, e questa
istruzione approssima il bitrate a un multiplo intero di
1000 bps.
Nel caso specifico, il valore 127696 bps viene approssimato
a 127 kbps.
Il risultato di questa inaccuratezza e' stato quello che abbiamo
visto, cioe' un filmato che desincronizza progressivamente, poi
torna in sincrono nel punto di giunzione e si desincronizza
progressivamente fino alla fine...
A me questo problema con avimerge non era mai capitato, perche'
nei miei casi, il bitrate audio e' sempre un multiplo esatto
di 1000 bps.
Adesso resta da controllare se altri programmi rispettano il
valore esatto o se fanno lo stesso errore di avimerge...
La correzione di avimerge e' abbastanza facile, forse la faro'
io, oppure la segnalero' sulla ml di transcode (ammesso che
non l'abbiano gia' risolto nell'attuale versione di sviluppo...)

 della libreria usata avilib, ed ecco dov'e' il problema
Io *ADORO* questo ragazzo! ;)
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
La generosità consiste nel dare più di quel che si potrebbe, l'orgoglio
nel prendere meno di quanto si avrebbe bisogno. - Kahlil Gibran

 Io *ADORO* questo ragazzo! ;)
ma ti risulta che si possa fare un divx con mp3 cbr a 127696 bps?
Tutta l'utility transcode da' per scontato che il bitrate sia un
multiplo di 1000 bps (quindi, 128000 bps va bene, cosi' come anche
127000, sebbene sia strano).
Ma 127.696 kbps e' un valore valido, o no?
Dove si potrebbe controllare?
Mi chiedo quale programma possa aver generato una simile stranezza

 Mi chiedo quale programma possa aver generato una simile stranezza
A meno che non sia una VBR che per qualche motivo è gli header scritti
in maniera sbagliata (ipotesi fantascientifica messa in piedi sul
momento)... ;)
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
Causa cambio abitazione cedo colf ermafrodita zoppa in cambio di un
tavolino a 3 piedi anche traballante.

 momento)... ;)
l'avevo pensato anch'io :-)
Esistono altri modi per capire se e' VBR, al limite anche estraendolo...
Chiedero' al tizio di indagare in quel senso
Grazie

 momento di "compressione audio"
boh... aspettiamo i risultati delle prove che ho chiesto di fare a OxygeN

 boh... aspettiamo i risultati delle prove che ho chiesto di fare a OxygeN
bene bene. Sono proprio curioso. Tutta la tua descrizione è stata veramente 
interessante ;)
Per curiosità, posso chiederti anche se sai aiutarmi nella domanda postata 
oggi alle 10.28 "Quale miglior rapporto qualità/spazio"?
Ti chiedo questo giusto perchè mi è capitato di codficare un divx in formato 
SuperVideoCD e credo ci siano proprio problemi di asincronismo (cioè il divx 
credo abbia un bitrate non molto compatibile con il formato SVCD e quindi... 
quando lo visualizzo... mi parte spesso a scatti ecc...)
Non so se dipenda anche dal fatto che ho usato nero per la conversione :-P
ciauz
CLA

 quando lo visualizzo... mi parte spesso a scatti ecc...)
hai controllato se il framerate del divx di partenza e' 25?
Comunque, mi sembra improbabile che il problema sia nel framerate

 Comunque, mi sembra improbabile che il problema sia nel framerate
sinceramente prima di fare l'operazione non sapevo di questo.
Poi mi sono documentato meglio e ci sto iniziando a capire qualcosa.
Però non so ancora come fare ad eseguire questi controlli..
e come ridecoificare manualmente (perchè oggi stavo riprovando con nero ed 
un cd rw per vedere i risultati, ma dopo 3 tentativi.. ci ho rinunciato. Il 
1 si è bloccato a 5%, il secondo a 53%, il 3'.... si è fermato a 35% e... 
dopo 1ora e mezza era ancora 35%, quindi secondo me si era bloccato 
nuovamente :-(
Comunque grazie 1000 di tutto.
Ciauz
CLA

 Però non so ancora come fare ad eseguire questi controlli..
con il programma GSpot

 l'avevo pensato anch'io :-)
mi ero quasi convinto che fosse un VBR, e invece sembra proprio CBR.
Leggendo qua e la', ma soprattutto il PDF di Alex Noe', le tracce
audio VBR in un AVI hanno un campo nell'header ("Sample size")
sempre settato a 0.
Quindi tutti i programmi (compreso quello che sto scrivendo)
controllano quel campo e assumono che sia CBR se e solo se quel
campo e' diverso da 0.
Ecco i dati che mi hanno mandato sulle tracce audio di quei due AVI:
---------------------------------
Audio tag: 0x55 (MP3)
Bitrate: 127.704 kbps CBR
Canali: 2
Frequenza: 44100 Hz
Chunks: 14118
Stream size: 45,073,060 bytes
Sample size: 1
Scale: 1
Rate: 15963
Ritardo: 0 ms
---------------------------------
Audio tag: 0x55 (MP3)
Bitrate: 127.696 kbps CBR
Canali: 2
Frequenza: 44100 Hz
Chunks: 14807
Stream size: 47,273,161 bytes
Sample size: 1
Scale: 1
Rate: 15962
Ritardo: 0 ms
---------------------------------
Il mio programma stampa "CBR" perche' controllando "Sample size", vede
che e' diverso da 0 (e' 1).
Mi ero chiesto se il campo "Sample size" fosse a 1 per sbaglio, e se
mettendolo a 0, si tornava al giusto caso VBR...
Ma non e' cosi': i VBR, oltre ad avere il "Sample size" sempre a 0,
hanno sempre il campo "Scale" a un valore diverso da 1 (i CBR invece
hanno sempre "Scale = 1"). Inoltre i VBR hanno il campo "Rate" che
coincide sempre con la frequenza di campionamento (in questo caso
44100).
Da questi dati si ricava anche l' "interleave", basta dividere la durata
in secondi per il numero dei chunks. Nel primo caso abbiamo:
2823.64/14118 = 0.200002
E nel secondo:
2961.56/14807 = 0.200010
In sintesi, cio' vuol dire che questi audio sono CBR e che il muxer
ha usato un valore di interleave di 200 ms (spesso si usa 40 ms, in
modo da avere un chunk audio per frame, ma puo' andare bene anche un
valore piu' alto, senza esagerare...), cioe', la parte dell'AVI
riservata al filmato e' composta, sequenzialmente, di 200 ms di
stream video intercalati a 200 ms di stream audio.
Nei VBR non si puo' fare un abbinamento cosi' regolare, perche'
una posizione dell'audio non corrisponde esattamente alla stessa
posizione nello stream...
Quindi, esiste da qualche parte un programma che genera divx con
audio MP3 CBR con valori di bitrate non multipli di 1000 bps.
Adesso ho consigliato al tizio di rimuxare gli MP3 come se
fossero VBR. Una tale operazione e' possibile, perche' i CBR
possono essere visti come un caso particolare di VBR :-)
In questo modo le utility di unione dovrebbero dare un risultato
sincronizzato (anche se con intestazione VBR), perche' quando
muxano, nel calcolo dei tempi non usano piu' il valore di bitrate
scritto nell'header...

 MP3 CBR con valori di bitrate non multipli di 1000 bps.
E dev'essere debellato con un antivirus! ;)
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
Il fascino di una donna è in genere direttamente proporzionale al suo
passaggio. - Marcel Proust

 con il programma GSpot
Ho provato con GSpot ma non fuziona :-(
Apro i video e mi scrive n.a
Ora ho chiesto che sto cercando un software per fare tutti questi tipi di 
conversione in modo da riconvertirmi i vari video nei formati standard vcd o 
svcd o dvd (a seconda di quello che devo fare), così poi mi faccio un 
anterima anche per vedere se tutto è andato a buon fine e poi masterizzo ;)
grazie 1000
CLA