 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[MPEG-4] Info struttura del file... Clicca QUI per vedere il messaggio nel forum |
DarkGod |
Ciauz!
Per il mio progetto di tesi, ho bisogno di sapere come sono strutturati i file video formato MPEG-4.
Per 'struttura' intendo proprio com'è fatto fisicamente il file a livello di byte: come riconoscere i vari frame del filmato, come distinguere gli I-frame dai B-frame, quali sono le intestazioni, ecc.
Avete idea di dove (e SE (!)) possa trovare tali informazioni?
PS: eventalmente mi potrebbero servire anche le stesse informazioni ma per i formati MPEG-2 e DivX... |
lughes |
Prova a mandare una mail a leonardo chiariglione è un genio e ha lavorato alla creazione dell'MPEG 2 e mi sembra anche del 4....
http://www.chiariglione.org |
mythily |
prova a vedere nel webcen dell'anno scorso, nel corso di editoria multimediale dovrebbero esserci le slide sull'mpeg4 |
foolish |
ma l'mp4 ed il divx non utilizzano la stessa struttura? |
DarkGod |
Originally posted by lughes
Prova a mandare una mail a leonardo chiariglione è un genio e ha lavorato alla creazione dell'MPEG 2 e mi sembra anche del 4....
http://www.chiariglione.org
Grazie mille del contatto, mi sarà sicuramente utile!! :) |
DarkGod |
Originally posted by foolish
ma l'mp4 ed il divx non utilizzano la stessa struttura?
Più o meno..........
Nel senso che, da quello che ho capito fino ad ora, MPEG4 è un formato Microsoft, mentre DivX è stato creato "rubacchiando e attingendo" dalle specifiche di MPEG4... ;)
(Credo che le specifiche DivX siano pubbliche...) |
CrackDown |
hai provato su mpeg4.net ???
pare ci siano le reference degli standards e molte informazioni nella sezione "resources"... ovviamente in inglese. |
ripe |
Originally posted by DarkGod
Più o meno..........
Nel senso che, da quello che ho capito fino ad ora, MPEG4 è un formato Microsoft, mentre DivX è stato creato "rubacchiando e attingendo" dalle specifiche di MPEG4... ;)
(Credo che le specifiche DivX siano pubbliche...)
Microsoft ed Apple... anche se poi la casa di Bill Gates ha scelto di puntare sul WMV! :)
Forse sui rispettivi siti puoi trovare qualche informazione utile... |
Barone |
Allora Divx dovrebbe essere il cuginetto bastardo di Mpeg 4....però io mi sto occupando di h264, che è simile a Mpeg4..percui se hai qualche richiesta specifica posso darti qualche dritta...purtroppo molti doc ufficiali sono a pagamento, ma magari recupero qualcosa di free in st dove sto facendo stage e tesi su h264... |
Fredx84 |
Io tempo fa ho fatto una piccola ricerca sul formato MP3 per l'esame di maturità... Visto che appartiene alla stessa famiglia di MPEG-4, magari riesco a darti qualche dritta utile...
Quando mi sono cimentato in questa "pazza" ricerca, dopo un po' di letture ho "scoperto" che lo standard ufficiale viene pubblicato dall'ISO ( www.iso.ch ), l'organizzazione internazionale degli standard, e non dal gruppo di lavoro MPEG (infatti nel sito ufficiale di MPEG non ci ho trovato granché...). Così sono andato a cercare nel sito dell'ISO il documento 11172-3 (le specifiche del MPEG 1 - Layer 3), ma ho visto che erano a pagamento (come qualcuno prima sottolineava). Tuttavia, conoscendo il codice del documento, non mi è stato difficile reperire lo stesso attraverso qualche ricerca con Google. Ci sono voluti pochi tentativi. Infatti mi è bastato digitare "11172-3.doc", "11172-3.pdf", "11172-3.zip", "11172-3.tar.gz", ecc... Alla fine ho trovato su un sito (www.mp3-tech.org o qualcosa di simile) la documentazione ufficiale dell'ISO gratis. Tu potresti fare lo stesso: fai un po' di ricerche finché non scopri qual'è l'ente che rilascia le specifiche ufficiali (credo sia sempre l'ISO) e il nome del documento... dopodiché te lo vai a cercare con Google. Io ho fatto così. Spero di esserti stato utile (e nel frattempo vi ho dato anche un po' di dritte sull'MP3, magari a qualcuno interessano...). Facilmente la documentazione sarà in inglese.
Dimenticavo... c'è poi un sito carino (sempre in inglese) dove spiegano un po' la struttura di molti file di uso comune con diversi esempi di codice per i programmatori. Il sito è questo:
www.sourceforge.net
Ciao. |
ste.virus |
Originally posted by foolish
ma l'mp4 ed il divx non utilizzano la stessa struttura?
all'inizio si! un tizio creò il DivX 3.11 alpha decompilando e rimaneggiando il mpeg4 di casa microsoft... ed era una cosa non molto legale...
poi, avendo avuto un grande successo, dalla versione 4 in poi di DivX il codice è stato riscritto da zero per evitare guai legali... ed è nata la DivX Inc. |
DarkGod |
Ho fatto svariate ricerche (e sto continuando a farne) e ho raccolto diversa documentazione, tra cui le specifiche dell'MPEG-4 dell' ISMA (Internet Streaming Media Alliance)...
...ma nonostante questo sono ancora in alto mare.
Io dovrei gestire l'invio di un filmato in streaming, decidendo in tempo reale se inviare o no i vari frame, a seconda della banda disponibile.
Dato che in MPEG-4 i frame sono divisi in diverse catagorie, praticamente dovrei evitare di inviare i frame "secondari" se la banda disponibile è scarsa.
Il problema è: come riconoscere i vari frame all'interno del file del filmato?? |
ste.virus |
io so che se usi DrDivx, il software ufficiale per comprimere in divx, durante la compressione compare un grafico che ti visualizza i frame con colori diversi a seconda se sono i fotogrammi "chiave" oppure secondari... te lo dice al momento della compressione, ma per visualizzarli successivamente se ad esempio usi VirtualDub ci sono due bottoni con il simbolo di una chiave che servono apposta a muoversi tra fotogrammi "chiave" saltando queli secondari... ma come faccia a riconoscerli questo non lo so ti conviene provare a guardare su divx.com se c'è qualcosa... tieni presente che i fotogrammi chiave non hanno sempre la stessa frequenza perchè dipende dall'intervallo impostato in fase di settaggio del codec, e comunque è sempre un intervallo approssimativo perchè non appena cambia una scena viene creato automaticamente un nuovo fotogramma chiave, e se la scena cambia 2 o 3 volte rapidamente vengono creati nuovi fotogrammi chiave a breve intervallo tra uno e l'altro...
un ultima cosa: in genere io vedo che i vari siti che si occupano di streaming mettono 2 link diversi, uno che trasmette ad un bitrate per i modem a 56k e l'altro per le ADSL... |
Barone |
Allora su questo penso di essere abbastanza informato visto che ci sto lavorando x stage e tesi:
I fotogrammi "chiave" si chiamano Intra Frame e sono quelli grazie ai quali viene fatta la più importante predizione temporale x le successive immagini.Questi fotogrammi vengono codificati solo sfruttando la correlazione spaziale dei Macroblocchi dello stasso Frame...
Tornando alla tua domanda non ho capito se stai chiedendo come riconoscere un frame secondario o no a livello di qualche applicativo particolare o a livello di codice di riferimento.
Se l'opzione è la seconda allora ti dico che:
Ogni immagine ha una variabile con un valore che sta ad indicare quale tipo di immagine rappresenta...Se poi chiarisci meglio qual è il problema cerco di aiutarti un po' di più ;) |
DarkGod |
Originally posted by Barone
Allora su questo penso di essere abbastanza informato visto che ci sto lavorando x stage e tesi:
I fotogrammi "chiave" si chiamano Intra Frame e sono quelli grazie ai quali viene fatta la più importante predizione temporale x le successive immagini.Questi fotogrammi vengono codificati solo sfruttando la correlazione spaziale dei Macroblocchi dello stasso Frame...
Tornando alla tua domanda non ho capito se stai chiedendo come riconoscere un frame secondario o no a livello di qualche applicativo particolare o a livello di codice di riferimento.
Se l'opzione è la seconda allora ti dico che:
Ogni immagine ha una variabile con un valore che sta ad indicare quale tipo di immagine rappresenta...Se poi chiarisci meglio qual è il problema cerco di aiutarti un po' di più ;)
Dunque, dunque....
Sì, so come funzionano gli Intra Frame e che gli altri frame vengono calcolati praticamente per "differenza".
La mia situazione è questa: ho già un apllicativo (in C) che prende un filmato, lo divide in pacchetti e lo invia in wireless ad un'altra applicazione che lo ricompone, lo buferizza e lo dà in pasto ad un video player.
Ovviamente, essendo tutto in real-time, se ci sono interferenze nel canale di trasmissione, appena finisce il buffer del ricevente il filmato si "inchioda".
Io dovrei essere in grado di accorgermi di questa situazione (per esempio testando la velocità con cui si svuota il buffer in relazione con la velocità di arrivo dei pacchetti), e diminuire "al volo" la mole di dati che sto inviando. Dato che il filmato è già codificato, ho pensato di diminuire l'invio dei frame secondari via via fino a quando il canale non abbia banda sufficiente a gestire la trasmissione.
Devo però sapere come riconoscere i vari frame secondari all'interno del file, perchè non posso "droppare" pacchetti a caso! :P
Ho trovato moltissima documentazione, ufficiale e non, su come avviene la codifica di MPEG-4, come vengono gestiti i fari frame, ecc.... ma niente di così basso livello da permettermi di "scrutare" realmente nel file del filmato e discriminarne le varie parti.
Qualsiasi aiuto è estremamente ben accetto :)
Grazie in anticipo....
PS: non è detto che ciò che intendo fare sia fattibile.... |
foolish |
te quindi intendi diminuire la qualità del video?
perchè se togli una parte del filmato sei sicuro poi che il filmato sia "guardabile"? |
DarkGod |
Originally posted by foolish
te quindi intendi diminuire la qualità del video?
perchè se togli una parte del filmato sei sicuro poi che il filmato sia "guardabile"?
Esatto! Ridurre la qualità, anche di molto, fino a renderlo scattosissimo, non importa; l'importante è che venga mantenuta la sincronizzazione real time.
(Per esempio potrebbe esserci un'interferenza momentanea sul canale: in questo caso, il filmato andrebbe a scatti per qualche secondo, per poi riprendere normalmente.)
Però se elimino dei frame (o pezzi di file) fodamentali, il filmato si blocca totalmente e perde la sincronizzazione... |
Barone |
Quello che vuoi fare te è molto complesso e non del tutto ancora impelmentato in tutti gli encoder che ho visto...Se ho capito bene cerchi una routine che permetta di variare il bitstream in base alle condizioni di traferimento...Dove sono io in stage c'è una persona molto competente che sta facendo qualcosa di simile...ti dico subito che è un lavoro di mesi!!Il fatto è che devi gestire tutti i tool di compressione (DCT, QUANTIZZ, scelta del tipo di immagini) in semi real time al fine di ottimizzare banda e traferimento...
A livello molto supèerficiale direi che potresti quantizzare piu grossolanamente o utilizzare un formato immagine minore (tipo QCIF).però gli algortimi di scelta di tali opzioni credo siano troppo complessi x un semplice studente con poca esperienza nel campo....Io e il mio tutor stavamno parlando di qualcosa di simile a questo e mi diceva che è un lavoro complesso, sicuramente nn da tesi triennale ;)
hai altre domande o vuoi chiarimenti su altri punti? |
DarkGod |
Originally posted by Barone
Quello che vuoi fare te è molto complesso e non del tutto ancora impelmentato in tutti gli encoder che ho visto...Se ho capito bene cerchi una routine che permetta di variare il bitstream in base alle condizioni di traferimento...Dove sono io in stage c'è una persona molto competente che sta facendo qualcosa di simile...ti dico subito che è un lavoro di mesi!!Il fatto è che devi gestire tutti i tool di compressione (DCT, QUANTIZZ, scelta del tipo di immagini) in semi real time al fine di ottimizzare banda e traferimento...
A livello molto supèerficiale direi che potresti quantizzare piu grossolanamente o utilizzare un formato immagine minore (tipo QCIF).però gli algortimi di scelta di tali opzioni credo siano troppo complessi x un semplice studente con poca esperienza nel campo....Io e il mio tutor stavamno parlando di qualcosa di simile a questo e mi diceva che è un lavoro complesso, sicuramente nn da tesi triennale ;)
hai altre domande o vuoi chiarimenti su altri punti?
mmmhh...
Sì, ho capito perfettamente quello che vuoi dire, e purtroppo è ciò che immaginavo anche io, dato che è da un po' che cerco di trovare qualcosa che mi possa aiutare, ma senza risultato.
Se è così non mi resta che parlarne con la prof..... :sad:
Quindi credi che non si trovino dei programmini (per Linux) che facciamo qualcosa di simile?
Perchè io ho notato che cancellando a caso pezzi del file di origine (prima di inviarlo), molte volte il filmato si vede lo stesso, anche se con evidenti perdite di qualità, mentre altre volte si blocca del tutto, perchè evidentemente ho cancellato pezzi fondamentali del filmato (magari un header o un I-Frame) . In un certo senso mi basterebbe poter discriminare (ma non ho idea di come poterlo fare!) le parti fondamentali del file da quelle che posso cancellare "senza problemi", in modo da inviare soltanto le prime... il tutto senza entrare nei dettagli della compressione o della struttura del file...
Credi sia fattibile? |
DarkGod |
Sposto un attimo il problema.
Sapete se ci sono in giro programmini (per Win o Linux) che comprimono i filmati in formato MPEG-4?
Se ne conoscete qualcuno mi evitate le mille ricerche con google... ;);)
EDIT: altra domandina: MPEG-4 è formato da più layer, utilizzabili per ottenere diverse qualità dello stesso filmato.
Sapete come poter visualizzare solo il layer di qualità più bassa?
Grazie x la pazienza :P
|
DarkGod |
Originally posted by Barone
Quello che vuoi fare te è molto complesso e non del tutto ancora impelmentato in tutti gli encoder che ho visto...Se ho capito bene cerchi una routine che permetta di variare il bitstream in base alle condizioni di traferimento...Dove sono io in stage c'è una persona molto competente che sta facendo qualcosa di simile...ti dico subito che è un lavoro di mesi!!Il fatto è che devi gestire tutti i tool di compressione (DCT, QUANTIZZ, scelta del tipo di immagini) in semi real time al fine di ottimizzare banda e traferimento...
A livello molto supèerficiale direi che potresti quantizzare piu grossolanamente o utilizzare un formato immagine minore (tipo QCIF).però gli algortimi di scelta di tali opzioni credo siano troppo complessi x un semplice studente con poca esperienza nel campo....Io e il mio tutor stavamno parlando di qualcosa di simile a questo e mi diceva che è un lavoro complesso, sicuramente nn da tesi triennale ;)
hai altre domande o vuoi chiarimenti su altri punti?
Ho parlato con la prof: quello che avrei dovuto fare io è stato già realizzato, quindi il problema si sposta in un'altra direzione (codifica video "scalabile").
Per non andate OT, ho aperto un nuovo 3d... eccolo qui:
http://www.dsy.it/forum/showthread.php?threadid=20052
Ciao e grazie ancora :) |
|
|
|
|