Newsgroup: it.comp.software.divx
Titolo: Manuale AVInaptic

Ho scritto un manualino che spiega i problemi in cui ci si puo'
imbattere quando si vogliono vedere divx con un lettore stand-alone.
L'ho messo nel mio sito: 
http://fsinapsi.altervista.org
E' il manuale del programma AVInaptic.
Ne ho scritto una buona parte, ma non e' ancora del tutto completo;
le parti che mancano sono quelle contrassegnate da "[...]".
Se volete segnalare errori o fare qualsiasi commento, fate pure.
Per quanto riguarda il programma, dall'ultima segnalazione alla
versione scaricabile dal sito, ho apportato queste modifiche:
- corretti una miriade di piccoli errori;
- aggiunte molte nuove info, che vengono fuori solo in casi
  particolari (ad esempio, quando uno stream possiede un nome,
  ora viene visualizzato tra parentesi graffe; inoltre vengono
  segnalati i sottotitoli del "DivX Media Format", la presenza
  di indici ODML, l'aspect ratio di header "vprp" (Video Property)
  e cose di questo genere...)
- possibilita' di fare semplici modifiche al volo, tipo impostare
  i ritardi (o anticipi) su ogni traccia audio, e modificare il
  FourCC.
Attualmente ho migliorato molto il parser MPEG4, basandomi
stavolta sul codice sorgente di libavcodec. In questo modo sono
riuscito a estrarre il "quantizer" usato per codificare ogni
frame, quindi appena risistemo il tutto (ci vorranno alcuni
giorni), aggiungero' una funzionalita' (opzionale, a scelta
dell'utente) di analisi simile a quella fatta da DRF Analyzer
(sotto Windows non e' necessario perche' gia' esistono i
programmi DRF Analyzer e GSpot, ma sotto Linux un unico programma
che puo' fare tutte queste analisi puo' essere davvero molto
utile...)

E' il manuale del programma AVInaptic.
Ehi Frank, guarda questo: 
http://sourceforge.net/projects/mediainfo/
Mi sembra molto versatile ed è open source.
Non so quanto sia affidabile, però rileava l'interlacciamento al volo,
cioè non scandaglia tutto il file, e mi pare che ci prenda..
Esempio si output:
General #0
Complete name        : K:\- HAH\House of Wax (Anaglyph 3D) (1953)
[ENG].avi
Format               : AVI
Info                 : Audio Video Interleave
Family               : RIFF
File size            : 1.37 GiB
PlayTime             : 1h 28mn
Bit rate             : 2215 Kbps
Writing library      : VirtualDub build 23774/release
Video #0
Codec                : DivX 5
Family               : MPEG-4
Codec settings       : BVOP / Packed Bitstream
PlayTime             : 1h 28mn
Bit rate             : 2077 Kbps
Width                : 640
Height               : 480
Aspect ratio         : 4/3
Frame rate           : 29.97 fps
Resolution           : 8
Chroma               : 4:2:0
Interlacement        : Interlaced
Bits/(Pixel*Frame)   : 0.226
Writing library      : DivX503b1988p
Audio #0
Codec                : AC3
Info                 : Dolby AC3
PlayTime             : 1h 29mn
Bit rate             : 128 Kbps
Bit rate mode        : CBR
Channel(s)           : 2 / 2 channels
Sampling rate        : 48 KHz
Delay                : 0
Video0 delay         : 0
ChannelPositions     : L R
-- 
Paradoxally,
Jan AxHell

 Interlacement        : Interlaced
ti riferisci a questa riga?
Sei sicuro che abbia fatto un'analisi sui frames (intendo dire, sulle
immagini vere e proprie) e non abbia solo ricavato l'informazione
dagli headers VOL?
Per saperlo, prova ad analizzare l'AVI col mio programma, e guarda se
nella sezione "Info sulla codifica MPEG" ti scrive "Interlaced: yes".
In tal caso, non ha fatto un'analisi dei frames...
In caso contrario, indaghero' su come ha fatto :-)
Comunque, ho trovato dove fa la stessa analisi che ho fatto anch'io,
cioe', nel file Source/MediaInfo/Video/File_Mpeg4v.cpp del codice
sorgente. La rilevazione della codifica interlacciata viene fatta
da questo pezzo di codice:
-------------------------------------------------------
    if (shape!=2) //Shape!=BinaryOnly
    {
        if (shape==0) //Shape=Rectangular
        {
            BS.Skip(1);                                //marker_bit
            Width=BS.Get(13);                        //object_layer_width
            BS.Skip(1);                                //marker_bit
            Height=BS.Get(13);                      //object_layer height
            BS.Skip(1);                                //marker_bit
        }
        interlaced=BS.Get(1);                       //interlaced
        if (interlaced)
            PictureStructure=0;
        else
            PictureStructure=3;
-------------------------------------------------------
e' identico a quello che ho scritto io, pero' in un altro linguaggio...
Questo e' il mio codice, che fa la stessa cosa (notare che anche il
numero dei bit dei campi corrisponde):
-------------------------------------------------------
        (if (<> _shape 2)
        then    (if (= _shape 0)
                then    ; qui c è la risoluzione w x h
                        ; (vedi h263.c di libavcodec...)
                        (bitdata f @size-used r rl 1 val)
                        (bitdata f @size-used r rl 13 w)
                        (bitdata f @size-used r rl 1 val)
                        (bitdata f @size-used r rl 13 h)
                        (bitdata f @size-used r rl 1 val) )
                (bitdata f @size-used r rl 1 val)
                (set _interlaced (= val 1))
-------------------------------------------------------
Comunque, dopo lo guardero' meglio, e cerchero' di compilarlo
sotto Linux...
Grazie per la segnalazione

In caso contrario, indaghero' su come ha fatto :-)
No, non ne ero affatto sicuro, te l'ho solo detto per confrontarlo col
tuo programma :-)
Infatti hai ragione:
[ Info sul file ]
Nome: House of Wax (Anaglyph 3D) (1953) [ENG].avi
Data: 25/09/2006 14:45:27
Dimensione: 1,468,176,122 bytes
[ Info generiche ]
Durata: 01:28:22 (5302.168835 s)
Tipo di contenitore: AVI
Streams totali: 2
Tipo stream n. 0: video
Tipo stream n. 1: audio
Audio streams: 1
[ Traccia video ]
Fourcc: divx/DX50
Risoluzione: 640 x 480
Frame aspect ratio: 4:3 = 1.333333
Pixel aspect ratio: 1:1 = 1
Display aspect ratio: 4:3 = 1.333333
Framerate: 29.97 fps
Frames totali: 158906
Stream size: 1,375,660,752 bytes
Bitrate: 2075.619686 kbps
Qf: 0.225444
Key frames: 1332 (0; 1; 6; 7; 8...)
Null frames: 0
Min key int: 1
Max key int: 300
Key int medio: 119.298798
Ritardo: 0 ms
[ Traccia audio ]
Audio tag: 0x2000 (AC3)
Bitrate: 128 kbps CBR
Canali: 2
Frequenza: 48000 Hz
Chunks: 158890
Stream size: 84,834,304 bytes
Ritardo: 0 ms
[ Info sulla codifica MPEG4 ]
Packed bitstream: yes
QPel: no
GMC: no
Interlaced: yes (bottom field first)
B-frames: yes
Quant type: H.263
Aspect ratio: Square pixels
-- 
Paradoxally,
Jan AxHell

 tuo programma :-)
al primo tentativo non sono riuscito a compilarlo, perche' e' un
progetto orientato verso tools Windows; e sul sito viene rilasciato
precompilato solo per Windows...
Comunque mi sara' utile, perche' ci trovo moltissime informazioni su
altri tipi di contenitori e su altre cose.
Ciao e grazie