attributo codecs tag video html5

Sto cercando di specificare un codec video / audio specifico nel tag video usando

 

ma non riesco a trovare la dichiarazione dei codec giusta per riprodurre il video, ho scaricato un analizzatore video e posso vedere che è un avc1 e può vedere che l’audio map.40.2 ma può risolvere il resto del codec, cosa fa il 4d401e significa in quanto sopra?

Saluti Toby

Il parametro codecs è specificato da RFC 6381 . In particolare, vedere la sezione 3.3 per il significato dei valori avc1 e mp4a .

Nel caso di avc1.4D401E , avc1 indica video H.264, seguito da un punto e tre numeri esadecimali a due cifre definiti dallo standard H.264 :

  1. profile_idc
  2. il byte contenente i flag vincint_set (attualmente constraint_set0_flag attraverso constraint_set5_flag e reserved_zero_2bits )
  3. level_idc

Qualche esempio:

  • avc1.42E01E : profilo di base vincolato H.264 livello 3
  • avc1.4D401E : livello profilo principale H.264 3
  • avc1.64001E : Livello alto profilo H.264 3

Questi sono anche il secondo, terzo e quarto byte del Sequence Parameter Set e della AVC Configuration Box in un file MP4. È ansible scaricare questi byte utilizzando un programma come mp4file : mp4file --dump movie.mp4 . Cercare la avcC (configurazione AVC) ei valori esadecimali per AVCProfileIndication , profile_compatibility e AVCLevelIndication .

Per quanto riguarda mp4a.40.2 , mp4a indica audio MPEG-4. È seguito da un punto e da un object esadecimale ObjectTypeIndication ( objectTypeId in output mp4file ), che può essere consultato sul sito di registrazione MPEG4 . Se questo valore esadecimale è 40 (audio ISO / IEC 14496-3), viene seguito da un altro punto e un tipo di object audio in decimale. Questi sono elencati nello standard ISO / IEC 14496-3 e su Wikipedia e corrispondono ai primi 5 bit del DecoderSpecificInfo ( decSpecificInfo ) (a meno che questi bit non siano uguali a 31, nel qual caso aggiungi 32 ai successivi 6 bit). mp4a.40.2 indica l’audio AAC LC, che è quello che viene solitamente utilizzato con video HTML5 H.264.

Ad esempio, codecs="avc1.42E01E, mp4a.40.2" sarebbe corretto per il film qui sotto:

 $ mp4file --dump movie.mp4 ... type avcC (moov.trak.mdia.minf.stbl.stsd.avc1.avcC) ◀━━ avc1 configurationVersion = 1 (0x01) AVCProfileIndication = 66 (0x42) ◀━━ 42 profile_compatibility = 224 (0xe0) ◀━━ E0 AVCLevelIndication = 30 (0x1e) ◀━━ 1E ... type esds (moov.trak.mdia.minf.stbl.stsd.mp4a.esds) ◀━━ mp4a version = 0 (0x00) flags = 0 (0x000000) ESID = 2 (0x0002) streamDependenceFlag = 0 (0x0) <1 bits> URLFlag = 0 (0x0) <1 bits> OCRstreamFlag = 0 (0x0) <1 bits> streamPriority = 0 (0x00) <5 bits> decConfigDescr objectTypeId = 64 (0x40) ◀━━ 40 streamType = 5 (0x05) <6 bits> upStream = 0 (0x0) <1 bits> reserved = 1 (0x1) <1 bits> bufferSizeDB = 0 (0x000000) <24 bits> maxBitrate = 78267 (0x000131bb) avgBitrate = 78267 (0x000131bb) decSpecificInfo info = <2 bytes> 11 90 |..| ◀━━ 2 (first 5 bits in decimal) ... 

mark4o fornisce di gran lunga la migliore spiegazione che ho visto su come decodificare le informazioni sui codec. Eccellente.

Un pezzo che potrebbe richiedere un po ‘più di dettaglio è come scomporre il tipo specifico di object audio dal valore decSpecificInfo. Trovare la parte “mp4a.40” è molto chiaro, la sezione “.2” può essere un po ‘complicata.

Iniziamo con una sequenza di valori esadecimali a byte singolo: “11 90” nell’esempio di mark4o o “12 08” nel mio caso. Entrambi sono un totale di 2 byte … potrebbero esserci più valori ma solo i primi 2 argomenti per trovare il tipo di object (e di solito solo il primo byte). Stiamo cercando singoli bit in modo da convertire ogni cifra nei valori esadecimali in binario; ci dovrebbero essere 4 cifre binarie per ogni cifra esadecimale. Prendi le prime 5 cifre binarie – 4 dalla prima cifra esadecimale, 1 dalla successiva – e converti quel valore binario in decimale. Ecco i passaggi:

 Example 1 (11 90): Starting value: 11 90 Separate the hex digits: 1 1 9 0 Convert each digit to binary: 0001 0001 1001 0000 Take the first 5 bits: 0001 0 Combine into binary value: 00010 Convert to decimal: 2 Example 2 (12 08): Starting value: 12 08 Separate the hex digits: 1 2 0 8 Convert each digit to binary: 0001 0010 0000 1000 Take the first 5 bits: 0001 0 Combine into binary value: 00010 Convert to decimal: 2 

Sono lo stesso tipo di object nonostante abbiano valori decSpecificInfo diversi.

È ansible utilizzare lo strumento MP4Box per trovare le stringhe di codec nel formato RFC6381. Devi comunque unirti a loro con le virgole.

Puoi usare questo comando:

MP4Box -info big.mp4 2>&1 | grep RFC6381 | awk '{print $4}' | paste -sd , -