Come un file video standard è strutturato sotto il cofano

0

Sono nuovo nell'esaminare i formati di file video e mi sto chiedendo cosa sarebbe servito per analizzarne uno. Per farlo, prima dovrei capire come appare il formato, quindi è di questo che tratta questa domanda.

Mi chiedo se si possa descrivere brevemente come è strutturato un formato di file video o cosa contiene. Qualsiasi formato di file video è utile, ma WebM sarebbe preferito in quanto aperto / libero da diritti e moderno (che presumo significhino che sarebbe più semplice da capire). Ma qualsiasi formato di file è più semplice per dimostrare che il punto è il migliore.

La cosa principale che sto cercando non è una specifica dettagliata a questo punto, fondamentalmente ciò che accade in un file video . Sono abituato a contenuti "statici" come la programmazione di file di linguaggio o di file di immagini, ma i video sono grandi file in streaming in cui è necessario gestire i problemi di rete e la sincronizzazione e tutto ciò, come parte del "passaggio attraverso il contenuto del file". Le mie conoscenze consistono in "i video vengono probabilmente inviati come blocchi di una sorta di dati binari", ma questo è tutto. Mi piacerebbe sapere approssimativamente come si organizza in questi file diversi (di nuovo, ognuno va bene, o anche un esempio generico va bene). Quali sono le caratteristiche generali del formato di file.

Vorrei poter dare un'occhiata a un parser WebM , ma non sono sicuro quale sia lo scopo del le caratteristiche sono per i file video. Fondamentalmente cercando di capire come funziona un file video.

    
posta Lance Pollard 19.08.2018 - 08:54
fonte

2 risposte

7

L'analisi di un film digitale completo è un compito estremamente complesso. Perché per la maggior parte chiedi su WebM - un formato contenitore - mi concentrerò su quello.

Si inizia sempre con singoli flussi contenenti i dati del payload: video (ad esempio H.264, VP9), audio (ad esempio AAC, Opus) e sottotitoli (ad esempio SubRip, Blu-ray PGS). Legato a quei flussi sono necessari alcuni metadati per una corretta riproduzione. Ad esempio, gli stream devono essere sincronizzati correttamente.

Come semplice esempio, immagina un file WebM contenente un flusso video VP9 e un flusso audio Opus.

Il contenitore WebM funge da wrapper per i flussi VP9 e Opus che consente di inserirli in un singolo file e di accedervi comunque in modo conveniente. Inoltre contiene dati aggiuntivi come i tipi di flussi che contiene o checksum per il ripristino degli errori.

In modo originale è possibile memorizzare i flussi uno dopo l'altro in un singolo blocco ciascuno. Ovviamente questa è una soluzione orribile per lo streaming perché dovresti bufferizzare il file completo prima che possa iniziare la riproduzione. Questa è una delle ragioni per cui i flussi sono intercalati. Il file memorizza un piccolo frammento di video seguito da una piccola porzione di audio (forse mezzo secondo ciascuno) e ripete il pattern in tutto il file.

Di cosa hai bisogno per analizzare un file di questo tipo?

  • Un parser WebM per elaborare il contenitore ed estrarre i flussi del carico utile.
  • Un parser VP9 (probabilmente come parte di un decodificatore VP9 completo) per elaborare il flusso video.
  • Un parser Opus (probabilmente ancora come parte di un decodificatore Opus completo) per elaborare il flusso audio.

WebM è un sottoinsieme di Matroska. Puoi ottenere una specifica completa del formato sul sito Web Matroska . Il parser a cui fai il link sembra estremamente semplicistico a prima vista, ma potrebbe essere un buon punto di partenza. Per un'implementazione completa dovresti dare un'occhiata più da vicino al parser di riferimento: libmatroska . Viene utilizzato ad esempio nell'applicazione standard di Muting di Matroska MKVMerge .

Btw: "Muxing" è l'abbreviazione di "multiplexing". La forma lunga è usata raramente, però.

    
risposta data 19.08.2018 - 10:00
fonte
5

I formati dei contenitori video sono in genere costituiti da una serie di blocchi di contenuti. Un blocco di solito consiste in pochi byte marker (importante per trovare il prossimo blocco se si ottengono dati incompleti durante lo streaming), un codice tipo (metadati, dati audio, dati video, ...), una lunghezza, seguita da una certa quantità di i dati.

In genere il file inizia con un blocco di metadati. Contiene informazioni sul file: è una singola immagine, un flusso solo audio, video e audio misti? Ci sono più canali audio (lingue diverse)? Qual è la risoluzione del video? Quali sono i codec audio e video utilizzati?

Dopo viene una serie di blocchi di contenuti. La loro interpretazione spetta ai codec. I blocchi audio e video sono intercalati in modo che possano essere riprodotti contemporaneamente. Un singolo blocco video può contenere tutti i dati per un fotogramma video, seguito da blocchi audio per i dati audio per lo stesso intervallo di tempo. Ma questa suddivisione dipende dall'encoder e potrebbe anche essere fatta in modo diverso. L'audio per diversi fotogrammi potrebbe essere inserito in un singolo blocco audio, forse, per salvare l'overhead della codifica.

I codec stessi sono un argomento enorme e diverso.

    
risposta data 19.08.2018 - 09:32
fonte

Leggi altre domande sui tag