Newsgroup: it.comp.software.divx
Titolo: AVI e x264

Perchè è altamente sconsigliato usare AVI e X264 insieme?
Da quel che si dice in giro sembra che ci siano problemi di qualità, anche
se non tutti sono d'accordo. 
Sembra che i problemi non siano nell'avi in sè, ma nell'implementazione del
codec vfw.
Quali sono (se esistono) questi problemi di qualità? Quali sono le
caratteristiche dell'x264 che avi non supporta?
grazie, giubbe
-- 
HomePage e FAQ: 
http://giubbe.altervista.org
Inutile scrivere in privato, non ricevo le email

 caratteristiche dell'x264 che avi non supporta?
non lo so, ma un primo indizio ci viene dal messaggio che "mkvmerge"
stampa quando prende uno stream AVC (generato da x264) da un mp4:
-----------------------------------------------------------------
mkvmerge v1.7.0 ('What Do You Take Me For') built on Oct 20 2006 18:42:55
'z.mp4': Using the Quicktime/MP4 demultiplexer.
Warning: 'z.mp4' track 1: The AVC video track is missing the 'CTTS' atom for
frame timecode offsets. However, AVC/h.264 allows frames to have more than
the traditional one (for P frames) or two (for B frames) references to other
frames. The timecodes for such frames will be out-of-order, and the 'CTTS'
atom is needed for getting the timecodes right. As it is missing the
timecodes for this track might be wrong. You should watch the resulting file
and make sure that it looks like you expected it to.
Track 1 of 'z.mp4': Extracted the aspect ratio information from the MPEG-4
layer 10 (AVC) video data and set the display dimensions to 640/352.
'z.mp4' track 1: Using the MPEG-4 part 10 (AVC) video output module.
-----------------------------------------------------------------
ho letto un po' in fretta, ma se ho capito bene, il problema e' che
un bitstream H.264 non contiene tutte le informazioni necessarie a
una corretta visualizzazione:
un'informazione che manca e' il framerate, e quello lo sapevo (vale
lo stesso per i bistream MPEG-4 ASP;
altra informazione mancante e' il "CTTS atom"...
Se ho capito bene, il bistream contiene tutto cio' che serve per
ricostruire tutti i frames (le immagini) del filmato, ma questo non
e' sufficiente per fare una corretta visualizzazione del filmato:
bisogna anche sapere altre info che vengono memorizzate nel
contenitore.
Dato che AVI permette di memorizzare il framerate, ma non il "CTTS",
l'AVI puo' essere usato solo nelle codifiche che non necessitano
del "CTTS", che dovrebbero essero quelli in cui vengono usati frames
P e B nel modo in cui vengono usati anche in MPEG-4 ASP (cioe', con
un frame di riferimento per i P e due frame di riferimento per B).
Puo' darsi che attualmente x264 non sia ancora in grado di supportare
feature piu' avanzate dello standard H.264, e quindi produce sempre
bitstream che non danno problemi se messi in contenitori AVI.
Tuttavia, se in futuro gli sviluppatori di x264 dovessero
implementare feature piu' avanzate (frame che utilizzano piu'
riferimenti), le informazioni memorizzate nell'AVI non sarebbero
piu' sufficienti per una corretta visualizzazione del filmato.
Questo e' quello che mi pare di aver capito, ma naturalmente potrei
aver capito male... in tal caso spero che Andres mi corregga
-- 
Home page: 
http://fsinapsi.altervista.org

 bitstream che non danno problemi se messi in contenitori AVI.
E' quello che ho pensato anch'io, ma in giro c'è un sacco di gente che dice
che è una eresia mettere uno stream avc dentro un contenitore AVI senza
però spiegare il motivo.
Una cosa è assodata: non è possibile mettere dentro l'avi uno stream a
frame rate variabile, ma non mi sembra sufficiente per dire che non si può
usare x264 dentro un avi.
bye


 frame rate variabile,
si', hai ragione, AVI sarebbe a framerate costante.
Tuttavia qualcuno lo usa anche per frame rate variabili.
Circa un anno fa mi sono imbattuto in un filmatino (di pessima qualita')
con contenitore AVI e con le seguenti caratteristiche:
--------------------------------------------------------
FourCC                      IV50/IV50
Risoluzione                 320 x 240
Frame aspect ratio          4:3 = 1.333333
Pixel aspect ratio          1:1 = 1
Display aspect ratio        4:3 = 1.333333
Framerate                   25.118811 fps (25)
Frames totali               11684 (11702)
--------------------------------------------------------
qui si vedono due incongruenze: il framerate ha due valori diversi, e lo
stesso accade con il numero di frames totali.
Con mplayer si vede bene (usa una DLL di windows), eppure mencoder
non riusciva a convertirlo bene in xvid (ci devo riprovare con la
versione piu' recente).
Il motivo e' che e' a frame rate variabile!
Strano, vero? :-)
Se lo vuoi analizzare, lo uploado da qualche parte...
(l'anno scorso, me lo converti' Lord Kap in XviD con VDubMod...
ci tenevo molto perche' e' una rarita').


> caratteristiche dell'x264 che avi non supporta?
supporto corretto al vfr/timecodes
supporto corretto al par
supporto corretto all'ordine dei frames nel flusso. Il bello del x264 e' 
che i frames possono essere referenziati un po' da tutti a seconda della 
necessita'. Non c'e' sempre bisogno di un I frame ma basta anche un B...
info: 
http://forum.doom9.org/showthread.php?t=116703
info: 
http://forum.doom9.org/announcement.php?f=77
altra cosa ancora piu' importante: il codec x264 e' stato compilato 
inizialmente come exe, ma dato che era un po' ostico da usare e' stato 
creato un wrapper vfw attorno.
Tale wrapper non puo' pero' supportare tutte le potenzialita  del x264 e 
cosi' lo sviluppo del vfw e' stato ABBANDONATO. Altri sviluppatore hanno 
comuque portato avanti il progetto, ma in questa maniera il codec x264 
viene comunque snaturato.
E' dalla buil 581 che non c'e' nessun supporto ufficiale al vfw.
Sono comunque disponibili delle build "private"
http://gabextreme.googlepages.com/x264vfwunited
 , non aggiornate e che 
non fanno onore al progetto... (ma neanche il divx 3 ne faceva...)
aggiungo anche un link ad un commento di virus (in inglese, ma utente 
italiano) 
http://forum.doom9.org/showthread.php?p=884053#post884053
infine ulteriori info su 264: 
http://encyclopedia.tfd.com/H264
ciao
BHH
-- 
Andres Zanzani
Cesena, Italy
www.64k.it/andres
 -> Tutto per Mpeg4

 Strano, vero? :-)
ah, scusa, mi sono dimenticato di dire una cosa: il punto
e' che il codec IV50 ("Indeo Video" o qualcosa del genere)
deve per forza memorizzare i "timestamps" assieme ai frame,
quindi, quando quella DLL decodifica lo stream, sa emettere
i frame nei momenti giusti (perche' sono memorizzati nel
bitstream stesso)


 necessita'[...]
Grazie! Sapevo di poter contare su una tua risposta.
Per i primi due punti non credo che ci siano problemi con avi (ovviamente
senza contare che il filtro vfw è vecchio), per l'ultimo punto già il
filtro directshow è in grado di creare stream con quelle caratteristiche?
grazie, ancora


 filtro directshow è in grado di creare stream con quelle caratteristiche?
ho fatto qualche test molto veloce (in futuro ne faro' di piu' accurati).
Per prima cosa ho scaricato e installato la versione attuale di x264:
svn co svn://
svn.videolan.org/x264/trunk
 x264
la versione aggiornata a questo momento e': x264 core:54 svn-594
Da questi si crea l'eseguibile "x264" sotto linux (che corrisponde a
"x264.exe" sotto windows); ho visto che puo' generare direttamente MKV
grazie al supporto scritto da Mike Matsnev (credo che Andres si
riferisse a lui qualche giorno fa...)
Battendo "x264 --help" vengono stampate le opzioni; quelle sulle
features che qui ci interessano sono queste:
--------------------------------------
Frame-type options:
  -I, --keyint <integer>      Maximum GOP size [250]
  -b, --bframes <integer>     Number of B-frames between I and P [0]
      --b-pyramid             Keep some B-frames as references
      --no-cabac              Disable CABAC
  -r, --ref <integer>         Number of reference frames [1]
  -f, --deblock <alpha:beta>  Loop filter AlphaC0 and Beta parameters [0:0]
      --interlaced            Enable pure-interlaced mode
--------------------------------------
ho provato a fare le seguenti codifiche:
1) senza nessuna di quelle opzioni
2) specificando solo "-b 2"
3) specificando "-b 2 --b-pyramid"
4) specificando solo "-r 2"
5) specificando "-r 2 -b 2"
6) specificando "-r 2 -b 2 --b-pyramid"
7) specificando solo "--no-cabac"
8) specificando solo "-q 0" (codifica lossless)
Questi sono i valori SSIM ottenuti:
1) SSIM Mean Y:0.9961325
2) SSIM Mean Y:0.9959368
3) SSIM Mean Y:0.9960305
4) SSIM Mean Y:0.9961645
5) SSIM Mean Y:0.9959434
6) SSIM Mean Y:0.9960496
7) SSIM Mean Y:0.9961325
8) non viene riportato, ma ovviamente il SSIM e' 1
Ovviamente 1) e 7) hanno lo stesso SSIM perche' sono identici
(differiscono _solo_ nelle codifiche entropiche, dato che 7 non
usa CABAC ma una codifica VLC).
il 2) mi e' venuto un buon 15% piu' piccolo di 1);
il 3) e' venuto pochissimo piu' piccolo di 2);
il 4) e' venuto appena un pochino piu' piccolo di 1);
il 5) e' venuto appena piu' piccolo di 3);
il 6) e' venuto poco piu' piccolo di 5);
il 7) e' venuto circa il 20% piu' grande di 1);
il 8) e' venuto 17-18 volte piu' grande di 1).
La mia prima impressione e' che il guadagno piu' grosso (dell'ordine
del 20%) deriva dal fatto di impiegare codifiche aritmetiche (il
CABAC), che in MPEG-4 ASP non sono usate...
Ho provato a travasarli tutti in contenitori AVI e mencoder non
si e' mai lamentato di nulla; con comandi del tipo:
mencoder prova8.mkv -o prova8.avi -ovc copy
Riguardandoli con mplayer non ho notato stranezze, ma non saprei
dire se qualcuno di questi possa avere problemi di seeking o
altro...
Chedo scusa per eventuali errori nei dati riportati, ho un po'
di fretta...
Magari, se fate qualche prova anche voi, fate sapere! :-)
Stessa cosa da parte mia, se scopro qualcosa di nuovo.


 info: 
http://forum.doom9.org/announcement.php?f=77
Da ROTFL l'annuncio. Devono essersi proprio rotti le palle! ;)
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
La vecchiaia è quando si comincia a dire: "non mi sono mai sentito così
giovane". - Jules Renard

 Stessa cosa da parte mia, se scopro qualcosa di nuovo.
Magari avere tutto questo tempo, sigh.
Stavo anche pensando di passarti le faq...
Grazie! sei stato esaustivo come sempre.
bye


 Grazie! sei stato esaustivo come sempre.
come test sulle dimensioni e' inaccurato e poco significativo (per
fare prima ho usato un segmentino di 30 secondi; rifacendolo con
altri filmati potrebbero venire fuori risultati diversi).
Piu' che altro volevo vedere se c'erano le features di cui si
parlava e se si potevano mettere in AVI.
Proprio ora mi sono accorto che queste opzioni gia' erano usabili
direttamente anche in mencoder, che ancora non produce MKV (puo'
produrre MP4, ma con limitazioni); se ce le hanno messe suppongo
che non ci siano problemi a usarle in AVI. Comunque non ne sono
per niente sicuro...
Ciao
