1
1
mirror of https://github.com/wader/fq.git synced 2024-10-26 20:06:29 +03:00

Merge pull request #396 from wader/prores

prores_frame: Add basic container and frame header decoder
This commit is contained in:
Mattias Wadman 2022-08-24 19:46:43 +02:00 committed by GitHub
commit a27fdfe746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 1426 additions and 985 deletions

View File

@ -108,6 +108,7 @@ opus_packet,
pcap,
pcapng,
png,
prores_frame,
[protobuf](doc/formats.md#protobuf),
protobuf_widevine,
pssh_playready,

View File

@ -70,7 +70,7 @@
|[`matroska`](#matroska) |Matroska&nbsp;file |<sub>`aac_frame` `av1_ccr` `av1_frame` `avc_au` `avc_dcr` `flac_frame` `flac_metadatablocks` `hevc_au` `hevc_dcr` `image` `mp3_frame` `mpeg_asc` `mpeg_pes_packet` `mpeg_spu` `opus_packet` `vorbis_packet` `vp8_frame` `vp9_cfm` `vp9_frame`</sub>|
|[`mp3`](#mp3) |MP3&nbsp;file |<sub>`id3v2` `id3v1` `id3v11` `apev2` `mp3_frame`</sub>|
|`mp3_frame` |MPEG&nbsp;audio&nbsp;layer&nbsp;3&nbsp;frame |<sub>`xing`</sub>|
|[`mp4`](#mp4) |ISOBMFF&nbsp;MPEG-4&nbsp;part&nbsp;12&nbsp;and&nbsp;similar |<sub>`aac_frame` `av1_ccr` `av1_frame` `flac_frame` `flac_metadatablocks` `id3v2` `image` `jpeg` `mp3_frame` `avc_au` `avc_dcr` `mpeg_es` `hevc_au` `hevc_dcr` `mpeg_pes_packet` `opus_packet` `protobuf_widevine` `pssh_playready` `vorbis_packet` `vp9_frame` `vpx_ccr` `icc_profile`</sub>|
|[`mp4`](#mp4) |ISOBMFF&nbsp;MPEG-4&nbsp;part&nbsp;12&nbsp;and&nbsp;similar |<sub>`aac_frame` `av1_ccr` `av1_frame` `avc_au` `avc_dcr` `flac_frame` `flac_metadatablocks` `hevc_au` `hevc_dcr` `icc_profile` `id3v2` `image` `jpeg` `mp3_frame` `mpeg_es` `mpeg_pes_packet` `opus_packet` `prores_frame` `protobuf_widevine` `pssh_playready` `vorbis_packet` `vp9_frame` `vpx_ccr`</sub>|
|`mpeg_asc` |MPEG-4&nbsp;Audio&nbsp;Specific&nbsp;Config |<sub></sub>|
|`mpeg_es` |MPEG&nbsp;Elementary&nbsp;Stream |<sub>`mpeg_asc` `vorbis_packet`</sub>|
|`mpeg_pes` |MPEG&nbsp;Packetized&nbsp;elementary&nbsp;stream |<sub>`mpeg_pes_packet` `mpeg_spu`</sub>|
@ -84,6 +84,7 @@
|`pcap` |PCAP&nbsp;packet&nbsp;capture |<sub>`link_frame` `tcp_stream` `ipv4_packet`</sub>|
|`pcapng` |PCAPNG&nbsp;packet&nbsp;capture |<sub>`link_frame` `tcp_stream` `ipv4_packet`</sub>|
|`png` |Portable&nbsp;Network&nbsp;Graphics&nbsp;file |<sub>`icc_profile` `exif`</sub>|
|`prores_frame` |Apple&nbsp;ProRes&nbsp;frame |<sub></sub>|
|[`protobuf`](#protobuf) |Protobuf |<sub></sub>|
|`protobuf_widevine` |Widevine&nbsp;protobuf |<sub>`protobuf`</sub>|
|`pssh_playready` |PlayReady&nbsp;PSSH |<sub></sub>|

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 134 KiB

View File

@ -38,6 +38,7 @@ import (
_ "github.com/wader/fq/format/opus"
_ "github.com/wader/fq/format/pcap"
_ "github.com/wader/fq/format/png"
_ "github.com/wader/fq/format/prores"
_ "github.com/wader/fq/format/protobuf"
_ "github.com/wader/fq/format/raw"
_ "github.com/wader/fq/format/rtmp"

View File

@ -690,6 +690,13 @@ out # Decode file as png
out $ fq -d png . file
out # Decode value as png
out ... | png
"help(prores_frame)"
out prores_frame: Apple ProRes frame decoder
out Examples:
out # Decode file as prores_frame
out $ fq -d prores_frame . file
out # Decode value as prores_frame
out ... | prores_frame
"help(protobuf)"
out protobuf: Protobuf decoder
out Examples:

View File

@ -103,6 +103,7 @@ const (
PCAP = "pcap"
PCAPNG = "pcapng"
PNG = "png"
PRORES_FRAME = "prores_frame"
PROTOBUF = "protobuf"
PROTOBUF_WIDEVINE = "protobuf_widevine"
PSSH_PLAYREADY = "pssh_playready"

View File

@ -61,6 +61,24 @@ var subTypeNames = scalar.StrToDescription{
"vide": "Video Track",
}
var dataFormatNames = scalar.StrToDescription{
"apch": "Apple ProRes 422 High Quality",
"apcn": "Apple ProRes 422 Standard Definition",
"apcs": "Apple ProRes 422 LT",
"apco": "Apple ProRes 422 Proxy",
"ap4h": "Apple ProRes 4444",
"fLaC": "Fres Lossless Audio Codec",
"Opus": "Xiph Opus",
"vp09": "VP9",
"avc1": "Advanced Video Coding / H.264 / MPEG-4 Part 10",
"hev1": "High Efficiency Video Coding / H.265 / MPEG-H Part 2",
"hvc1": "High Efficiency Video Coding / H.265 / MPEG-H Part 2",
"av01": "AV1",
"mp4a": "MPEG Audio",
"mp4v": "MPEG Video",
"jpeg": "JPEG Image",
}
var (
uuidIsmlManifestBytes = [16]byte{0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd, 0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66}
uuidXmpBytes = [16]byte{0xbe, 0x7a, 0xcf, 0xcb, 0x97, 0xa9, 0x42, 0xe8, 0x9c, 0x71, 0x99, 0x94, 0x91, 0xe3, 0xaf, 0xac}
@ -403,7 +421,7 @@ func init() {
d.FieldArrayLoop("boxes", func() bool { return i < entryCount }, func(d *decode.D) {
d.FieldStruct("box", func(d *decode.D) {
size := d.FieldU32("size")
dataFormat := d.FieldUTF8("type", 4)
dataFormat := d.FieldUTF8("type", 4, dataFormatNames)
subType := ""
if t := ctx.currentTrack(); t != nil {
t.sampleDescriptions = append(t.sampleDescriptions, sampleDescription{

View File

@ -33,6 +33,7 @@ var av1CCRFormat decode.Group
var av1FrameFormat decode.Group
var flacFrameFormat decode.Group
var flacMetadatablocksFormat decode.Group
var iccProfileFormat decode.Group
var id3v2Format decode.Group
var imageFormat decode.Group
var jpegFormat decode.Group
@ -44,12 +45,12 @@ var mpegHEVCDCRFrameFormat decode.Group
var mpegHEVCSampleFormat decode.Group
var mpegPESPacketSampleFormat decode.Group
var opusPacketFrameFormat decode.Group
var proResFrameFormat decode.Group
var protoBufWidevineFormat decode.Group
var psshPlayreadyFormat decode.Group
var vorbisPacketFormat decode.Group
var vp9FrameFormat decode.Group
var vpxCCRFormat decode.Group
var iccProfileFormat decode.Group
func init() {
interp.RegisterFormat(decode.Format{
@ -68,25 +69,26 @@ func init() {
{Names: []string{format.AAC_FRAME}, Group: &aacFrameFormat},
{Names: []string{format.AV1_CCR}, Group: &av1CCRFormat},
{Names: []string{format.AV1_FRAME}, Group: &av1FrameFormat},
{Names: []string{format.AVC_AU}, Group: &mpegAVCAUFormat},
{Names: []string{format.AVC_DCR}, Group: &mpegAVCDCRFormat},
{Names: []string{format.FLAC_FRAME}, Group: &flacFrameFormat},
{Names: []string{format.FLAC_METADATABLOCKS}, Group: &flacMetadatablocksFormat},
{Names: []string{format.HEVC_AU}, Group: &mpegHEVCSampleFormat},
{Names: []string{format.HEVC_DCR}, Group: &mpegHEVCDCRFrameFormat},
{Names: []string{format.ICC_PROFILE}, Group: &iccProfileFormat},
{Names: []string{format.ID3V2}, Group: &id3v2Format},
{Names: []string{format.IMAGE}, Group: &imageFormat},
{Names: []string{format.JPEG}, Group: &jpegFormat},
{Names: []string{format.MP3_FRAME}, Group: &mp3FrameFormat},
{Names: []string{format.AVC_AU}, Group: &mpegAVCAUFormat},
{Names: []string{format.AVC_DCR}, Group: &mpegAVCDCRFormat},
{Names: []string{format.MPEG_ES}, Group: &mpegESFormat},
{Names: []string{format.HEVC_AU}, Group: &mpegHEVCSampleFormat},
{Names: []string{format.HEVC_DCR}, Group: &mpegHEVCDCRFrameFormat},
{Names: []string{format.MPEG_PES_PACKET}, Group: &mpegPESPacketSampleFormat},
{Names: []string{format.OPUS_PACKET}, Group: &opusPacketFrameFormat},
{Names: []string{format.PRORES_FRAME}, Group: &proResFrameFormat},
{Names: []string{format.PROTOBUF_WIDEVINE}, Group: &protoBufWidevineFormat},
{Names: []string{format.PSSH_PLAYREADY}, Group: &psshPlayreadyFormat},
{Names: []string{format.VORBIS_PACKET}, Group: &vorbisPacketFormat},
{Names: []string{format.VP9_FRAME}, Group: &vp9FrameFormat},
{Names: []string{format.VPX_CCR}, Group: &vpxCCRFormat},
{Names: []string{format.ICC_PROFILE}, Group: &iccProfileFormat},
},
Functions: []string{"_help"},
})
@ -245,6 +247,12 @@ func mp4Tracks(d *decode.D, ctx *decodeContext) {
d.FieldFormatLen(name, nBits, jpegFormat, inArg)
case dataFormat == "jpeg":
d.FieldFormatLen(name, nBits, jpegFormat, inArg)
case dataFormat == "apch",
dataFormat == "apcn",
dataFormat == "scpa",
dataFormat == "apco",
dataFormat == "ap4h":
d.FieldFormatLen(name, nBits, proResFrameFormat, inArg)
default:
d.FieldRawLen(name, d.BitsLeft())
}
@ -263,7 +271,7 @@ func mp4Tracks(d *decode.D, ctx *decodeContext) {
}
}
d.FieldValueStr("data_foramt", trackSDDataFormat)
d.FieldValueStr("data_foramt", trackSDDataFormat, dataFormatNames)
switch trackSDDataFormat {
case "lpcm",

View File

@ -192,7 +192,7 @@ $ fq -d mp4 dv aac.mp4
| | | boxes[0:1]: 0x437-0x490.7 (90)
| | | [0]{}: box 0x437-0x490.7 (90)
0x430| 00 00 00 5a | ...Z | size: 90 0x437-0x43a.7 (4)
0x430| 6d 70 34 61 | mp4a | type: "mp4a" 0x43b-0x43e.7 (4)
0x430| 6d 70 34 61 | mp4a | type: "mp4a" (MPEG Audio) 0x43b-0x43e.7 (4)
0x430| 00| .| reserved: raw bits 0x43f-0x444.7 (6)
0x440|00 00 00 00 00 |..... |
0x440| 00 01 | .. | data_reference_index: 1 0x445-0x446.7 (2)
@ -429,4 +429,4 @@ $ fq -d mp4 dv aac.mp4
0x290|b4 |. | [1]: raw bits byte_align 0x290.6-0x290.7 (0.2)
0x290| 70 | p | [2]: raw bits data 0x291-0x291.7 (1)
| | | id: 1 0x59d-NA (0)
| | | data_foramt: "mp4a" 0x59d-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x59d-NA (0)

View File

@ -178,7 +178,7 @@ $ fq -d mp4 dv av1.mp4
| | | boxes[0:1]: 0x1369-0x13f3.7 (139)
| | | [0]{}: box 0x1369-0x13f3.7 (139)
0x1360| 00 00 00 8b | .... | size: 139 0x1369-0x136c.7 (4)
0x1360| 61 76 30| av0| type: "av01" 0x136d-0x1370.7 (4)
0x1360| 61 76 30| av0| type: "av01" (AV1) 0x136d-0x1370.7 (4)
0x1370|31 |1 |
0x1370| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x1371-0x1376.7 (6)
0x1370| 00 01 | .. | data_reference_index: 1 0x1377-0x1378.7 (2)
@ -341,4 +341,4 @@ $ fq -d mp4 dv av1.mp4
0x0050|f6 0a 4f ae f3 fe ec e7 30 4f 3f 13 9c 75 c9 6a|..O.....0O?..u.j| data: raw bits 0x50-0x11bf.7 (4464)
* |until 0x11bf.7 (4464) | |
| | | id: 1 0x14b2-NA (0)
| | | data_foramt: "av01" 0x14b2-NA (0)
| | | data_foramt: "av01" (AV1) 0x14b2-NA (0)

View File

@ -196,7 +196,7 @@ $ fq -d mp4 dv avc.mp4
| | | boxes[0:1]: 0xf2a-0xfd9.7 (176)
| | | [0]{}: box 0xf2a-0xfd9.7 (176)
0x00f20| 00 00 00 b0 | .... | size: 176 0xf2a-0xf2d.7 (4)
0x00f20| 61 76| av| type: "avc1" 0xf2e-0xf31.7 (4)
0x00f20| 61 76| av| type: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0xf2e-0xf31.7 (4)
0x00f30|63 31 |c1 |
0x00f30| 00 00 00 00 00 00 | ...... | reserved: raw bits 0xf32-0xf37.7 (6)
0x00f30| 00 01 | .. | data_reference_index: 1 0xf38-0xf39.7 (2)
@ -514,4 +514,4 @@ $ fq -d mp4 dv avc.mp4
0x00d50|79 0a ff 01 f9 2d 04 d3 29 fe 4d 76 42 26 f6 cd|y....-..).MvB&..|
* |until 0xd80.7 (51) | |
| | | id: 1 0x10e0-NA (0)
| | | data_foramt: "avc1" 0x10e0-NA (0)
| | | data_foramt: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0x10e0-NA (0)

View File

@ -204,7 +204,7 @@ $ fq -d mp4 dv dash_audio_init.mp4
| | | boxes[0:1]: 0x218-0x265.7 (78)
| | | [0]{}: box 0x218-0x265.7 (78)
0x210| 00 00 00 4e | ...N | size: 78 0x218-0x21b.7 (4)
0x210| 6d 70 34 61| mp4a| type: "mp4a" 0x21c-0x21f.7 (4)
0x210| 6d 70 34 61| mp4a| type: "mp4a" (MPEG Audio) 0x21c-0x21f.7 (4)
0x220|00 00 00 00 00 00 |...... | reserved: raw bits 0x220-0x225.7 (6)
0x220| 00 01 | .. | data_reference_index: 1 0x226-0x227.7 (2)
0x220| 00 00 | .. | version: 0 0x228-0x229.7 (2)
@ -348,7 +348,7 @@ $ fq -d mp4 dv dash_audio_init.mp4
| | | tracks[0:1]: 0x330-NA (0)
| | | [0]{}: track 0x330-NA (0)
| | | id: 1 0x330-NA (0)
| | | data_foramt: "mp4a" 0x330-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x330-NA (0)
| | | samples[0:0]: 0x330-NA (0)
$ fq -d mp4 dv dash_audio_1.m4s
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: dash_audio_1.m4s (mp4) 0x0-0x4eb.7 (1260)
@ -696,7 +696,7 @@ $ fq -d mp4 dv dash_video_init.mp4
| | | boxes[0:1]: 0x21c-0x2a2.7 (135)
| | | [0]{}: box 0x21c-0x2a2.7 (135)
0x0210| 00 00 00 87| ....| size: 135 0x21c-0x21f.7 (4)
0x0220|61 76 63 31 |avc1 | type: "avc1" 0x220-0x223.7 (4)
0x0220|61 76 63 31 |avc1 | type: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0x220-0x223.7 (4)
0x0220| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x224-0x229.7 (6)
0x0220| 00 01 | .. | data_reference_index: 1 0x22a-0x22b.7 (2)
0x0220| 00 00 | .. | version: 0 0x22c-0x22d.7 (2)
@ -886,7 +886,7 @@ $ fq -d mp4 dv dash_video_init.mp4
| | | tracks[0:1]: 0x333-NA (0)
| | | [0]{}: track 0x333-NA (0)
| | | id: 1 0x333-NA (0)
| | | data_foramt: "avc1" 0x333-NA (0)
| | | data_foramt: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0x333-NA (0)
| | | samples[0:0]: 0x333-NA (0)
$ fq -d mp4 dv dash_video_1.m4s
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: dash_video_1.m4s (mp4) 0x0-0x1fd0.7 (8145)

View File

@ -14,4 +14,4 @@ $ fq -o decode_samples=false -d mp4 '.tracks | dv' aac.mp4
0x280| 01 18 81| ...| [3]: raw bits sample 0x28d-0x291.7 (5)
0x290|b4 70 |.p |
| | | id: 1 0x59d-NA (0)
| | | data_foramt: "mp4a" 0x59d-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x59d-NA (0)

View File

@ -193,7 +193,7 @@ $ fq -d mp4 dv flac.mp4
| | | [0]{}: box 0x42f-0x484.7 (86)
0x420| 00| .| size: 86 0x42f-0x432.7 (4)
0x430|00 00 56 |..V |
0x430| 66 4c 61 43 | fLaC | type: "fLaC" 0x433-0x436.7 (4)
0x430| 66 4c 61 43 | fLaC | type: "fLaC" (Fres Lossless Audio Codec) 0x433-0x436.7 (4)
0x430| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x437-0x43c.7 (6)
0x430| 00 01 | .. | data_reference_index: 1 0x43d-0x43e.7 (2)
0x430| 00| .| version: 0 0x43f-0x440.7 (2)
@ -372,4 +372,4 @@ $ fq -d mp4 dv flac.mp4
0x280| 00 | . | byte_align: 0 (valid) 0x287.2-0x287.7 (0.6)
0x280| 82 cb | .. | footer_crc: "82cb" (raw bits) (valid) 0x288-0x289.7 (2)
| | | id: 1 0x543-NA (0)
| | | data_foramt: "fLaC" 0x543-NA (0)
| | | data_foramt: "fLaC" (Fres Lossless Audio Codec) 0x543-NA (0)

View File

@ -154,7 +154,7 @@ $ fq -d mp4 dv fragmented.mp4
| | | boxes[0:1]: 0x1a9-0x23f.7 (151)
| | | [0]{}: box 0x1a9-0x23f.7 (151)
0x001a0| 00 00 00 97 | .... | size: 151 0x1a9-0x1ac.7 (4)
0x001a0| 61 76 63| avc| type: "avc1" 0x1ad-0x1b0.7 (4)
0x001a0| 61 76 63| avc| type: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0x1ad-0x1b0.7 (4)
0x001b0|31 |1 |
0x001b0| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x1b1-0x1b6.7 (6)
0x001b0| 00 01 | .. | data_reference_index: 1 0x1b7-0x1b8.7 (2)
@ -411,7 +411,7 @@ $ fq -d mp4 dv fragmented.mp4
| | | boxes[0:1]: 0x391-0x3fe.7 (110)
| | | [0]{}: box 0x391-0x3fe.7 (110)
0x00390| 00 00 00 6e | ...n | size: 110 0x391-0x394.7 (4)
0x00390| 6d 70 34 61 | mp4a | type: "mp4a" 0x395-0x398.7 (4)
0x00390| 6d 70 34 61 | mp4a | type: "mp4a" (MPEG Audio) 0x395-0x398.7 (4)
0x00390| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x399-0x39e.7 (6)
0x00390| 00| .| data_reference_index: 1 0x39f-0x3a0.7 (2)
0x003a0|01 |. |
@ -1167,7 +1167,7 @@ $ fq -d mp4 dv fragmented.mp4
0x02240|86 f8 14 d8 53 23 af ff f2 50 06 7f 30 02 17 55|....S#...P..0..U|
* |until 0x2af4.7 (2234) | |
| | | id: 1 0x2bb4-NA (0)
| | | data_foramt: "avc1" 0x2bb4-NA (0)
| | | data_foramt: "avc1" (Advanced Video Coding / H.264 / MPEG-4 Part 10) 0x2bb4-NA (0)
| | | [1]{}: track 0x13e0-0x2bb3.7 (6100)
| | | samples[0:6]: 0x13e0-0x2af9.7 (5914)
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| [0][0:4]: sample (aac_frame) 0x13e0-0x14ad.7 (206)
@ -1270,4 +1270,4 @@ $ fq -d mp4 dv fragmented.mp4
0x02af0| b4 | . | [1]: raw bits byte_align 0x2af8.6-0x2af8.7 (0.2)
0x02af0| 70 | p | [2]: raw bits data 0x2af9-0x2af9.7 (1)
| | | id: 2 0x2bb4-NA (0)
| | | data_foramt: "mp4a" 0x2bb4-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x2bb4-NA (0)

View File

@ -196,7 +196,7 @@ $ fq -d mp4 dv hevc.mp4
| | | boxes[0:1]: 0xa2a-0x13dc.7 (2483)
| | | [0]{}: box 0xa2a-0x13dc.7 (2483)
0x0a20| 00 00 09 b3 | .... | size: 2483 0xa2a-0xa2d.7 (4)
0x0a20| 68 65| he| type: "hev1" 0xa2e-0xa31.7 (4)
0x0a20| 68 65| he| type: "hev1" (High Efficiency Video Coding / H.265 / MPEG-H Part 2) 0xa2e-0xa31.7 (4)
0x0a30|76 31 |v1 |
0x0a30| 00 00 00 00 00 00 | ...... | reserved: raw bits 0xa32-0xa37.7 (6)
0x0a30| 00 01 | .. | data_reference_index: 1 0xa38-0xa39.7 (2)
@ -636,4 +636,4 @@ $ fq -d mp4 dv hevc.mp4
0x0040|fd a9 78 83 ff fb 75 6c 0b 3f ff 94 ce 7f aa fe|..x...ul.?......|
* |until 0x880.7 (2127) | |
| | | id: 1 0x149b-NA (0)
| | | data_foramt: "hev1" 0x149b-NA (0)
| | | data_foramt: "hev1" (High Efficiency Video Coding / H.265 / MPEG-H Part 2) 0x149b-NA (0)

View File

@ -192,7 +192,7 @@ $ fq -d mp4 dv mp3.mp4
| | | boxes[0:1]: 0x443-0x492.7 (80)
| | | [0]{}: box 0x443-0x492.7 (80)
0x440| 00 00 00 50 | ...P | size: 80 0x443-0x446.7 (4)
0x440| 6d 70 34 61 | mp4a | type: "mp4a" 0x447-0x44a.7 (4)
0x440| 6d 70 34 61 | mp4a | type: "mp4a" (MPEG Audio) 0x447-0x44a.7 (4)
0x440| 00 00 00 00 00| .....| reserved: raw bits 0x44b-0x450.7 (6)
0x450|00 |. |
0x450| 00 01 | .. | data_reference_index: 1 0x451-0x452.7 (2)
@ -506,4 +506,4 @@ $ fq -d mp4 dv mp3.mp4
* |until 0x29d.7 (188) | |
| | | crc_calculated: "c36b" (raw bits) 0x29e-NA (0)
| | | id: 1 0x565-NA (0)
| | | data_foramt: "mp4a" 0x565-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x565-NA (0)

View File

@ -195,7 +195,7 @@ $ fq -d mp4 dv mpeg2.mp4
| | | [0]{}: box 0x214f-0x21ea.7 (156)
0x2140| 00| .| size: 156 0x214f-0x2152.7 (4)
0x2150|00 00 9c |... |
0x2150| 6d 70 34 76 | mp4v | type: "mp4v" 0x2153-0x2156.7 (4)
0x2150| 6d 70 34 76 | mp4v | type: "mp4v" (MPEG Video) 0x2153-0x2156.7 (4)
0x2150| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x2157-0x215c.7 (6)
0x2150| 00 01 | .. | data_reference_index: 1 0x215d-0x215e.7 (2)
0x2150| 00| .| version: 0 0x215f-0x2160.7 (2)
@ -356,4 +356,4 @@ $ fq -d mp4 dv mpeg2.mp4
0x0040|00 00 00 00 01 b8 00 08 00 40 00 00 01 00 00 0f|.........@......|
* |until 0x1fa5.7 (8046) | |
| | | id: 1 0x22a9-NA (0)
| | | data_foramt: "mp4v" 0x22a9-NA (0)
| | | data_foramt: "mp4v" (MPEG Video) 0x22a9-NA (0)

View File

@ -187,7 +187,7 @@ $ fq -d mp4 dv opus.mp4
| | | boxes[0:1]: 0x33c-0x372.7 (55)
| | | [0]{}: box 0x33c-0x372.7 (55)
0x330| 00 00 00 37| ...7| size: 55 0x33c-0x33f.7 (4)
0x340|4f 70 75 73 |Opus | type: "Opus" 0x340-0x343.7 (4)
0x340|4f 70 75 73 |Opus | type: "Opus" (Xiph Opus) 0x340-0x343.7 (4)
0x340| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x344-0x349.7 (6)
0x340| 00 01 | .. | data_reference_index: 1 0x34a-0x34b.7 (2)
0x340| 00 00 | .. | version: 0 0x34c-0x34d.7 (2)
@ -353,4 +353,4 @@ $ fq -d mp4 dv opus.mp4
0x120|02 cc 49 57 27 d4 a3 83 e9 53 33 fe 45 62 33 33|..IW'....S3.Eb33|
* |until 0x196.7 (120) | |
| | | id: 1 0x439-NA (0)
| | | data_foramt: "Opus" 0x439-NA (0)
| | | data_foramt: "Opus" (Xiph Opus) 0x439-NA (0)

View File

@ -179,7 +179,7 @@ $ fq -d mp4 'dv' stz2.mp4
| | | [0]{}: box 0x1ce-0x214.7 (71)
0x1c0| 00 00| ..| size: 71 0x1ce-0x1d1.7 (4)
0x1d0|00 47 |.G |
0x1d0| 6d 70 34 61 | mp4a | type: "mp4a" 0x1d2-0x1d5.7 (4)
0x1d0| 6d 70 34 61 | mp4a | type: "mp4a" (MPEG Audio) 0x1d2-0x1d5.7 (4)
0x1d0| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x1d6-0x1db.7 (6)
0x1d0| 00 01 | .. | data_reference_index: 1 0x1dc-0x1dd.7 (2)
0x1d0| 00 00| ..| version: 0 0x1de-0x1df.7 (2)
@ -463,4 +463,4 @@ $ fq -d mp4 'dv' stz2.mp4
* |until 0x4f5.7 (188) | |
| | | crc_calculated: "c36b" (raw bits) 0x4f6-NA (0)
| | | id: 1 0x530-NA (0)
| | | data_foramt: "mp4a" 0x530-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x530-NA (0)

View File

@ -194,7 +194,7 @@ $ fq -d mp4 dv vorbis.mp4
| | | boxes[0:1]: 0x382-0x10b6.7 (3381)
| | | [0]{}: box 0x382-0x10b6.7 (3381)
0x0380| 00 00 0d 35 | ...5 | size: 3381 0x382-0x385.7 (4)
0x0380| 6d 70 34 61 | mp4a | type: "mp4a" 0x386-0x389.7 (4)
0x0380| 6d 70 34 61 | mp4a | type: "mp4a" (MPEG Audio) 0x386-0x389.7 (4)
0x0380| 00 00 00 00 00 00| ......| reserved: raw bits 0x38a-0x38f.7 (6)
0x0390|00 01 |.. | data_reference_index: 1 0x390-0x391.7 (2)
0x0390| 00 00 | .. | version: 0 0x392-0x393.7 (2)
@ -383,4 +383,4 @@ $ fq -d mp4 dv vorbis.mp4
0x0130|f2 81 46 bb c2 48 52 08 27 b8 83 10 ca 08 b1 a7|..F..HR.'.......|
* |until 0x1dc.7 (174) | |
| | | id: 1 0x1189-NA (0)
| | | data_foramt: "mp4a" 0x1189-NA (0)
| | | data_foramt: "mp4a" (MPEG Audio) 0x1189-NA (0)

View File

@ -178,7 +178,7 @@ $ fq -d mp4 dv vp9.mp4
| | | [0]{}: box 0x170d-0x1790.7 (132)
0x1700| 00 00 00| ...| size: 132 0x170d-0x1710.7 (4)
0x1710|84 |. |
0x1710| 76 70 30 39 | vp09 | type: "vp09" 0x1711-0x1714.7 (4)
0x1710| 76 70 30 39 | vp09 | type: "vp09" (VP9) 0x1711-0x1714.7 (4)
0x1710| 00 00 00 00 00 00 | ...... | reserved: raw bits 0x1715-0x171a.7 (6)
0x1710| 00 01 | .. | data_reference_index: 1 0x171b-0x171c.7 (2)
0x1710| 00 00 | .. | version: 0 0x171d-0x171e.7 (2)
@ -336,4 +336,4 @@ $ fq -d mp4 dv vp9.mp4
0x0040|f9 be 8f e7 71 ff 5f 97 ef c3 f9 7e 37 b0 7e ad|....q._....~7.~.|
* |until 0x1563.7 (5424) | |
| | | id: 1 0x184f-NA (0)
| | | data_foramt: "vp09" 0x184f-NA (0)
| | | data_foramt: "vp09" (VP9) 0x184f-NA (0)

View File

@ -0,0 +1,61 @@
package prores
// https://wiki.multimedia.cx/index.php/Apple_ProRes
import (
"github.com/wader/fq/format"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/interp"
"github.com/wader/fq/pkg/scalar"
)
func init() {
interp.RegisterFormat(decode.Format{
Name: format.PRORES_FRAME,
Description: "Apple ProRes frame",
DecodeFn: decodeProResFrame,
})
}
func decodeProResFrame(d *decode.D, _ any) any {
var size int64
d.FieldStruct("container", func(d *decode.D) {
size = int64(d.FieldU32("size"))
d.FieldUTF8("type", 4, d.AssertStr("icpf"))
})
d.FramedFn((size-8)*8, func(d *decode.D) {
d.FieldStruct("header", func(d *decode.D) {
d.FieldU16("hdr_size")
d.FieldU16("version")
d.FieldUTF8("creator_id", 4)
d.FieldU16("width")
d.FieldU16("height")
d.FieldStruct("frame_flags", func(d *decode.D) {
d.FieldU2("chrominance_factor", scalar.UToSymStr{
2: "422",
3: "444",
})
d.FieldU2("unused0")
d.FieldU2("frame_type", scalar.UToSymStr{
0: "progressive",
1: "interlaced_top_first",
2: "interlaced_bottom_first",
})
d.FieldU2("unused1")
})
// TODO: more mappings
d.FieldU8("reserved1")
d.FieldU8("primaries")
d.FieldU8("transf_func")
d.FieldU8("color_matrix")
d.FieldU4("src_pix_fmt")
d.FieldU4("alpha_info")
d.FieldU8("reserved2")
d.FieldU8("q_mat_flags")
d.FieldRawLen("q_mat_luma", 64*8)
d.FieldRawLen("q_mat_chroma", 64*8)
})
d.FieldRawLen("picture_data", d.BitsLeft())
})
return nil
}

View File

@ -0,0 +1,328 @@
# ffmpeg -y -f lavfi -i testsrc -c:v prores -t 50ms prores_frame.mov
$ fq -d mp4 dv prores_frame.mov
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: prores_frame.mov (mp4) 0x0-0x6efe.7 (28415)
| | | boxes[0:4]: 0x0-0x6efe.7 (28415)
| | | [0]{}: box 0x0-0x13.7 (20)
0x0000|00 00 00 14 |.... | size: 20 0x0-0x3.7 (4)
0x0000| 66 74 79 70 | ftyp | type: "ftyp" (File type and compatibility) 0x4-0x7.7 (4)
0x0000| 71 74 20 20 | qt | major_brand: "qt " 0x8-0xb.7 (4)
0x0000| 00 00 02 00| ....| minor_version: 512 0xc-0xf.7 (4)
| | | brands[0:1]: 0x10-0x13.7 (4)
0x0010|71 74 20 20 |qt | [0]: "qt" brand 0x10-0x13.7 (4)
| | | [1]{}: box 0x14-0x1b.7 (8)
0x0010| 00 00 00 08 | .... | size: 8 0x14-0x17.7 (4)
0x0010| 77 69 64 65 | wide | type: "wide" (Expansion space reservation) 0x18-0x1b.7 (4)
| | | data: raw bits 0x1c-NA (0)
| | | [2]{}: box 0x1c-0x6c3c.7 (27681)
0x0010| 00 00 6c 21| ..l!| size: 27681 0x1c-0x1f.7 (4)
0x0020|6d 64 61 74 |mdat | type: "mdat" (Media data container) 0x20-0x23.7 (4)
0x0020| 00 00 6c 19 69 63 70 66 00 94 00 00| ..l.icpf....| data: raw bits 0x24-0x6c3c.7 (27673)
0x0030|66 6d 70 67 01 40 00 f0 c2 00 02 02 02 a0 00 03|fmpg.@..........|
* |until 0x6c3c.7 (27673) | |
| | | [3]{}: box 0x6c3d-0x6efe.7 (706)
0x6c30| 00 00 02| ...| size: 706 0x6c3d-0x6c40.7 (4)
0x6c40|c2 |. |
0x6c40| 6d 6f 6f 76 | moov | type: "moov" (Container for all the meta-data) 0x6c41-0x6c44.7 (4)
| | | boxes[0:3]: 0x6c45-0x6efe.7 (698)
| | | [0]{}: box 0x6c45-0x6cb0.7 (108)
0x6c40| 00 00 00 6c | ...l | size: 108 0x6c45-0x6c48.7 (4)
0x6c40| 6d 76 68 64 | mvhd | type: "mvhd" (Movie header, overall declarations) 0x6c49-0x6c4c.7 (4)
0x6c40| 00 | . | version: 0 0x6c4d-0x6c4d.7 (1)
0x6c40| 00 00| ..| flags: 0 0x6c4e-0x6c50.7 (3)
0x6c50|00 |. |
0x6c50| 00 00 00 00 | .... | creation_time: 0 (1904-01-04T00:00:00Z) 0x6c51-0x6c54.7 (4)
0x6c50| 00 00 00 00 | .... | modification_time: 0 (1904-01-04T00:00:00Z) 0x6c55-0x6c58.7 (4)
0x6c50| 00 00 03 e8 | .... | time_scale: 1000 0x6c59-0x6c5c.7 (4)
0x6c50| 00 00 00| ...| duration: 40 0x6c5d-0x6c60.7 (4)
0x6c60|28 |( |
0x6c60| 00 01 00 00 | .... | preferred_rate: 1 0x6c61-0x6c64.7 (4)
0x6c60| 01 00 | .. | preferred_volume: 1 0x6c65-0x6c66.7 (2)
0x6c60| 00 00 00 00 00 00 00 00 00| .........| reserved: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 0x6c67-0x6c70.7 (10)
0x6c70|00 |. |
| | | matrix_structure{}: 0x6c71-0x6c94.7 (36)
0x6c70| 00 01 00 00 | .... | a: 1 0x6c71-0x6c74.7 (4)
0x6c70| 00 00 00 00 | .... | b: 0 0x6c75-0x6c78.7 (4)
0x6c70| 00 00 00 00 | .... | u: 0 0x6c79-0x6c7c.7 (4)
0x6c70| 00 00 00| ...| c: 0 0x6c7d-0x6c80.7 (4)
0x6c80|00 |. |
0x6c80| 00 01 00 00 | .... | d: 1 0x6c81-0x6c84.7 (4)
0x6c80| 00 00 00 00 | .... | v: 0 0x6c85-0x6c88.7 (4)
0x6c80| 00 00 00 00 | .... | x: 0 0x6c89-0x6c8c.7 (4)
0x6c80| 00 00 00| ...| y: 0 0x6c8d-0x6c90.7 (4)
0x6c90|00 |. |
0x6c90| 40 00 00 00 | @... | w: 1 0x6c91-0x6c94.7 (4)
0x6c90| 00 00 00 00 | .... | preview_time: 0 0x6c95-0x6c98.7 (4)
0x6c90| 00 00 00 00 | .... | preview_duration: 0 0x6c99-0x6c9c.7 (4)
0x6c90| 00 00 00| ...| poster_time: 0 0x6c9d-0x6ca0.7 (4)
0x6ca0|00 |. |
0x6ca0| 00 00 00 00 | .... | selection_time: 0 0x6ca1-0x6ca4.7 (4)
0x6ca0| 00 00 00 00 | .... | selection_duration: 0 0x6ca5-0x6ca8.7 (4)
0x6ca0| 00 00 00 00 | .... | current_time: 0 0x6ca9-0x6cac.7 (4)
0x6ca0| 00 00 00| ...| next_track_id: 2 0x6cad-0x6cb0.7 (4)
0x6cb0|02 |. |
| | | [1]{}: box 0x6cb1-0x6edd.7 (557)
0x6cb0| 00 00 02 2d | ...- | size: 557 0x6cb1-0x6cb4.7 (4)
0x6cb0| 74 72 61 6b | trak | type: "trak" (Container for an individual track or stream) 0x6cb5-0x6cb8.7 (4)
| | | boxes[0:3]: 0x6cb9-0x6edd.7 (549)
| | | [0]{}: box 0x6cb9-0x6d14.7 (92)
0x6cb0| 00 00 00 5c | ...\ | size: 92 0x6cb9-0x6cbc.7 (4)
0x6cb0| 74 6b 68| tkh| type: "tkhd" (Track header, overall information about the track) 0x6cbd-0x6cc0.7 (4)
0x6cc0|64 |d |
0x6cc0| 00 | . | version: 0 0x6cc1-0x6cc1.7 (1)
0x6cc0| 00 00 03 | ... | flags: 3 0x6cc2-0x6cc4.7 (3)
0x6cc0| 00 00 00 00 | .... | creation_time: 0 (1904-01-04T00:00:00Z) 0x6cc5-0x6cc8.7 (4)
0x6cc0| 00 00 00 00 | .... | modification_time: 0 (1904-01-04T00:00:00Z) 0x6cc9-0x6ccc.7 (4)
0x6cc0| 00 00 00| ...| track_id: 1 0x6ccd-0x6cd0.7 (4)
0x6cd0|01 |. |
0x6cd0| 00 00 00 00 | .... | reserved1: 0 0x6cd1-0x6cd4.7 (4)
0x6cd0| 00 00 00 28 | ...( | duration: 40 0x6cd5-0x6cd8.7 (4)
0x6cd0| 00 00 00 00 00 00 00| .......| reserved2: raw bits 0x6cd9-0x6ce0.7 (8)
0x6ce0|00 |. |
0x6ce0| 00 00 | .. | layer: 0 0x6ce1-0x6ce2.7 (2)
0x6ce0| 00 00 | .. | alternate_group: 0 0x6ce3-0x6ce4.7 (2)
0x6ce0| 00 00 | .. | volume: 0 0x6ce5-0x6ce6.7 (2)
0x6ce0| 00 00 | .. | reserved3: 0 0x6ce7-0x6ce8.7 (2)
| | | matrix_structure{}: 0x6ce9-0x6d0c.7 (36)
0x6ce0| 00 01 00 00 | .... | a: 1 0x6ce9-0x6cec.7 (4)
0x6ce0| 00 00 00| ...| b: 0 0x6ced-0x6cf0.7 (4)
0x6cf0|00 |. |
0x6cf0| 00 00 00 00 | .... | u: 0 0x6cf1-0x6cf4.7 (4)
0x6cf0| 00 00 00 00 | .... | c: 0 0x6cf5-0x6cf8.7 (4)
0x6cf0| 00 01 00 00 | .... | d: 1 0x6cf9-0x6cfc.7 (4)
0x6cf0| 00 00 00| ...| v: 0 0x6cfd-0x6d00.7 (4)
0x6d00|00 |. |
0x6d00| 00 00 00 00 | .... | x: 0 0x6d01-0x6d04.7 (4)
0x6d00| 00 00 00 00 | .... | y: 0 0x6d05-0x6d08.7 (4)
0x6d00| 40 00 00 00 | @... | w: 1 0x6d09-0x6d0c.7 (4)
0x6d00| 01 40 00| .@.| track_width: 320 0x6d0d-0x6d10.7 (4)
0x6d10|00 |. |
0x6d10| 00 f0 00 00 | .... | track_height: 240 0x6d11-0x6d14.7 (4)
| | | [1]{}: box 0x6d15-0x6d38.7 (36)
0x6d10| 00 00 00 24 | ...$ | size: 36 0x6d15-0x6d18.7 (4)
0x6d10| 65 64 74 73 | edts | type: "edts" (Edit list container) 0x6d19-0x6d1c.7 (4)
| | | boxes[0:1]: 0x6d1d-0x6d38.7 (28)
| | | [0]{}: box 0x6d1d-0x6d38.7 (28)
0x6d10| 00 00 00| ...| size: 28 0x6d1d-0x6d20.7 (4)
0x6d20|1c |. |
0x6d20| 65 6c 73 74 | elst | type: "elst" (An edit list) 0x6d21-0x6d24.7 (4)
0x6d20| 00 | . | version: 0 0x6d25-0x6d25.7 (1)
0x6d20| 00 00 00 | ... | flags: 0 0x6d26-0x6d28.7 (3)
0x6d20| 00 00 00 01 | .... | entry_count: 1 0x6d29-0x6d2c.7 (4)
| | | entries[0:1]: 0x6d2d-0x6d38.7 (12)
| | | [0]{}: entry 0x6d2d-0x6d38.7 (12)
0x6d20| 00 00 00| ...| segment_duration: 40 0x6d2d-0x6d30.7 (4)
0x6d30|28 |( |
0x6d30| 00 00 00 00 | .... | media_time: 0 0x6d31-0x6d34.7 (4)
0x6d30| 00 01 00 00 | .... | media_rate: 1 0x6d35-0x6d38.7 (4)
| | | [2]{}: box 0x6d39-0x6edd.7 (421)
0x6d30| 00 00 01 a5 | .... | size: 421 0x6d39-0x6d3c.7 (4)
0x6d30| 6d 64 69| mdi| type: "mdia" (Container for the media information in a track) 0x6d3d-0x6d40.7 (4)
0x6d40|61 |a |
| | | boxes[0:3]: 0x6d41-0x6edd.7 (413)
| | | [0]{}: box 0x6d41-0x6d60.7 (32)
0x6d40| 00 00 00 20 | ... | size: 32 0x6d41-0x6d44.7 (4)
0x6d40| 6d 64 68 64 | mdhd | type: "mdhd" (Media header, overall information about the media) 0x6d45-0x6d48.7 (4)
0x6d40| 00 | . | version: 0 0x6d49-0x6d49.7 (1)
0x6d40| 00 00 00 | ... | flags: 0 0x6d4a-0x6d4c.7 (3)
0x6d40| 00 00 00| ...| creation_time: 0 (1904-01-04T00:00:00Z) 0x6d4d-0x6d50.7 (4)
0x6d50|00 |. |
0x6d50| 00 00 00 00 | .... | modification_time: 0 (1904-01-04T00:00:00Z) 0x6d51-0x6d54.7 (4)
0x6d50| 00 00 32 00 | ..2. | time_scale: 12800 0x6d55-0x6d58.7 (4)
0x6d50| 00 00 02 00 | .... | duration: 512 0x6d59-0x6d5c.7 (4)
0x6d50| 7f ff | .. | language: "\x7f\x7f\x7f" 0x6d5d-0x6d5e.7 (2)
0x6d50| 00| .| quality: 0 0x6d5f-0x6d60.7 (2)
0x6d60|00 |. |
| | | [1]{}: box 0x6d61-0x6d8d.7 (45)
0x6d60| 00 00 00 2d | ...- | size: 45 0x6d61-0x6d64.7 (4)
0x6d60| 68 64 6c 72 | hdlr | type: "hdlr" (Handler, declares the media (handler) type) 0x6d65-0x6d68.7 (4)
0x6d60| 00 | . | version: 0 0x6d69-0x6d69.7 (1)
0x6d60| 00 00 00 | ... | flags: 0 0x6d6a-0x6d6c.7 (3)
0x6d60| 6d 68 6c| mhl| component_type: "mhlr" 0x6d6d-0x6d70.7 (4)
0x6d70|72 |r |
0x6d70| 76 69 64 65 | vide | component_subtype: "vide" (Video Track) 0x6d71-0x6d74.7 (4)
0x6d70| 00 00 00 00 | .... | component_manufacturer: "" 0x6d75-0x6d78.7 (4)
0x6d70| 00 00 00 00 | .... | component_flags: 0 0x6d79-0x6d7c.7 (4)
0x6d70| 00 00 00| ...| component_flags_mask: 0 0x6d7d-0x6d80.7 (4)
0x6d80|00 |. |
0x6d80| 0c 56 69 64 65 6f 48 61 6e 64 6c 65 72 | .VideoHandler | component_name: "\fVideoHandler" 0x6d81-0x6d8d.7 (13)
| | | [2]{}: box 0x6d8e-0x6edd.7 (336)
0x6d80| 00 00| ..| size: 336 0x6d8e-0x6d91.7 (4)
0x6d90|01 50 |.P |
0x6d90| 6d 69 6e 66 | minf | type: "minf" (Media information container) 0x6d92-0x6d95.7 (4)
| | | boxes[0:4]: 0x6d96-0x6edd.7 (328)
| | | [0]{}: box 0x6d96-0x6da9.7 (20)
0x6d90| 00 00 00 14 | .... | size: 20 0x6d96-0x6d99.7 (4)
0x6d90| 76 6d 68 64 | vmhd | type: "vmhd" (Video media header, overall information (video track only)) 0x6d9a-0x6d9d.7 (4)
0x6d90| 00 | . | version: 0 0x6d9e-0x6d9e.7 (1)
0x6d90| 00| .| flags: 1 0x6d9f-0x6da1.7 (3)
0x6da0|00 01 |.. |
0x6da0| 00 00 | .. | graphicsmode: 0 0x6da2-0x6da3.7 (2)
| | | opcolor[0:3]: 0x6da4-0x6da9.7 (6)
0x6da0| 00 00 | .. | [0]: 0 value 0x6da4-0x6da5.7 (2)
0x6da0| 00 00 | .. | [1]: 0 value 0x6da6-0x6da7.7 (2)
0x6da0| 00 00 | .. | [2]: 0 value 0x6da8-0x6da9.7 (2)
| | | [1]{}: box 0x6daa-0x6dd5.7 (44)
0x6da0| 00 00 00 2c | ..., | size: 44 0x6daa-0x6dad.7 (4)
0x6da0| 68 64| hd| type: "hdlr" (Handler, declares the media (handler) type) 0x6dae-0x6db1.7 (4)
0x6db0|6c 72 |lr |
0x6db0| 00 | . | version: 0 0x6db2-0x6db2.7 (1)
0x6db0| 00 00 00 | ... | flags: 0 0x6db3-0x6db5.7 (3)
0x6db0| 64 68 6c 72 | dhlr | component_type: "dhlr" 0x6db6-0x6db9.7 (4)
0x6db0| 75 72 6c 20 | url | component_subtype: "url" (URL) 0x6dba-0x6dbd.7 (4)
0x6db0| 00 00| ..| component_manufacturer: "" 0x6dbe-0x6dc1.7 (4)
0x6dc0|00 00 |.. |
0x6dc0| 00 00 00 00 | .... | component_flags: 0 0x6dc2-0x6dc5.7 (4)
0x6dc0| 00 00 00 00 | .... | component_flags_mask: 0 0x6dc6-0x6dc9.7 (4)
0x6dc0| 0b 44 61 74 61 48| .DataH| component_name: "\vDataHandler" 0x6dca-0x6dd5.7 (12)
0x6dd0|61 6e 64 6c 65 72 |andler |
| | | [2]{}: box 0x6dd6-0x6df9.7 (36)
0x6dd0| 00 00 00 24 | ...$ | size: 36 0x6dd6-0x6dd9.7 (4)
0x6dd0| 64 69 6e 66 | dinf | type: "dinf" (Data information box, container) 0x6dda-0x6ddd.7 (4)
| | | boxes[0:1]: 0x6dde-0x6df9.7 (28)
| | | [0]{}: box 0x6dde-0x6df9.7 (28)
0x6dd0| 00 00| ..| size: 28 0x6dde-0x6de1.7 (4)
0x6de0|00 1c |.. |
0x6de0| 64 72 65 66 | dref | type: "dref" (Data reference box, declares source(s) of media data in track) 0x6de2-0x6de5.7 (4)
0x6de0| 00 | . | version: 0 0x6de6-0x6de6.7 (1)
0x6de0| 00 00 00 | ... | flags: 0 0x6de7-0x6de9.7 (3)
0x6de0| 00 00 00 01 | .... | entry_count: 1 0x6dea-0x6ded.7 (4)
| | | boxes[0:1]: 0x6dee-0x6df9.7 (12)
| | | [0]{}: box 0x6dee-0x6df9.7 (12)
0x6de0| 00 00| ..| size: 12 0x6dee-0x6df1.7 (4)
0x6df0|00 0c |.. |
0x6df0| 75 72 6c 20 | url | type: "url " 0x6df2-0x6df5.7 (4)
0x6df0| 00 | . | version: 0 0x6df6-0x6df6.7 (1)
0x6df0| 00 00 01 | ... | flags: 1 0x6df7-0x6df9.7 (3)
| | | data: raw bits 0x6dfa-NA (0)
| | | [3]{}: box 0x6dfa-0x6edd.7 (228)
0x6df0| 00 00 00 e4 | .... | size: 228 0x6dfa-0x6dfd.7 (4)
0x6df0| 73 74| st| type: "stbl" (Sample table box, container for the time/space map) 0x6dfe-0x6e01.7 (4)
0x6e00|62 6c |bl |
| | | boxes[0:5]: 0x6e02-0x6edd.7 (220)
| | | [0]{}: box 0x6e02-0x6e81.7 (128)
0x6e00| 00 00 00 80 | .... | size: 128 0x6e02-0x6e05.7 (4)
0x6e00| 73 74 73 64 | stsd | type: "stsd" (Sample descriptions (codec types, initialization etc.)) 0x6e06-0x6e09.7 (4)
0x6e00| 00 | . | version: 0 0x6e0a-0x6e0a.7 (1)
0x6e00| 00 00 00 | ... | flags: 0 0x6e0b-0x6e0d.7 (3)
0x6e00| 00 00| ..| entry_count: 1 0x6e0e-0x6e11.7 (4)
0x6e10|00 01 |.. |
| | | boxes[0:1]: 0x6e12-0x6e81.7 (112)
| | | [0]{}: box 0x6e12-0x6e81.7 (112)
0x6e10| 00 00 00 70 | ...p | size: 112 0x6e12-0x6e15.7 (4)
0x6e10| 61 70 34 68 | ap4h | type: "ap4h" (Apple ProRes 4444) 0x6e16-0x6e19.7 (4)
0x6e10| 00 00 00 00 00 00| ......| reserved: raw bits 0x6e1a-0x6e1f.7 (6)
0x6e20|00 01 |.. | data_reference_index: 1 0x6e20-0x6e21.7 (2)
0x6e20| 00 00 | .. | version: 0 0x6e22-0x6e23.7 (2)
0x6e20| 00 00 | .. | revision_level: 0 0x6e24-0x6e25.7 (2)
0x6e20| 46 46 4d 50 | FFMP | max_packet_size: 1179012432 0x6e26-0x6e29.7 (4)
0x6e20| 00 00 02 00 | .... | temporal_quality: 512 0x6e2a-0x6e2d.7 (4)
0x6e20| 00 00| ..| spatial_quality: 512 0x6e2e-0x6e31.7 (4)
0x6e30|02 00 |.. |
0x6e30| 01 40 | .@ | width: 320 0x6e32-0x6e33.7 (2)
0x6e30| 00 f0 | .. | height: 240 0x6e34-0x6e35.7 (2)
0x6e30| 00 48 00 00 | .H.. | horizontal_resolution: 72 0x6e36-0x6e39.7 (4)
0x6e30| 00 48 00 00 | .H.. | vertical_resolution: 72 0x6e3a-0x6e3d.7 (4)
0x6e30| 00 00| ..| data_size: 0 0x6e3e-0x6e41.7 (4)
0x6e40|00 00 |.. |
0x6e40| 00 01 | .. | frame_count: 1 0x6e42-0x6e43.7 (2)
0x6e40| 14 4c 61 76 63 35 39 2e 31 38 2e 31| .Lavc59.18.1| compressor_name: "Lavc59.18.100 prores" 0x6e44-0x6e63.7 (32)
0x6e50|30 30 20 70 72 6f 72 65 73 00 00 00 00 00 00 00|00 prores.......|
0x6e60|00 00 00 00 |.... |
0x6e60| 00 18 | .. | depth: 24 0x6e64-0x6e65.7 (2)
0x6e60| ff ff | .. | color_table_id: -1 0x6e66-0x6e67.7 (2)
| | | boxes[0:2]: 0x6e68-0x6e81.7 (26)
| | | [0]{}: box 0x6e68-0x6e71.7 (10)
0x6e60| 00 00 00 0a | .... | size: 10 0x6e68-0x6e6b.7 (4)
0x6e60| 66 69 65 6c| fiel| type: "fiel" (Video field order) 0x6e6c-0x6e6f.7 (4)
0x6e70|01 00 |.. | data: raw bits 0x6e70-0x6e71.7 (2)
| | | [1]{}: box 0x6e72-0x6e81.7 (16)
0x6e70| 00 00 00 10 | .... | size: 16 0x6e72-0x6e75.7 (4)
0x6e70| 70 61 73 70 | pasp | type: "pasp" (Pixel aspect ratio) 0x6e76-0x6e79.7 (4)
0x6e70| 00 00 00 01 | .... | h_spacing: 1 0x6e7a-0x6e7d.7 (4)
0x6e70| 00 00| ..| v_spacing: 1 0x6e7e-0x6e81.7 (4)
0x6e80|00 01 |.. |
| | | [1]{}: box 0x6e82-0x6e99.7 (24)
0x6e80| 00 00 00 18 | .... | size: 24 0x6e82-0x6e85.7 (4)
0x6e80| 73 74 74 73 | stts | type: "stts" (Sample time-to-sample) 0x6e86-0x6e89.7 (4)
0x6e80| 00 | . | version: 0 0x6e8a-0x6e8a.7 (1)
0x6e80| 00 00 00 | ... | flags: 0 0x6e8b-0x6e8d.7 (3)
0x6e80| 00 00| ..| entry_count: 1 0x6e8e-0x6e91.7 (4)
0x6e90|00 01 |.. |
| | | entries[0:1]: 0x6e92-0x6e99.7 (8)
| | | [0]{}: entry 0x6e92-0x6e99.7 (8)
0x6e90| 00 00 00 01 | .... | count: 1 0x6e92-0x6e95.7 (4)
0x6e90| 00 00 02 00 | .... | delta: 512 0x6e96-0x6e99.7 (4)
| | | [2]{}: box 0x6e9a-0x6eb5.7 (28)
0x6e90| 00 00 00 1c | .... | size: 28 0x6e9a-0x6e9d.7 (4)
0x6e90| 73 74| st| type: "stsc" (Sample-to-chunk, partial data-offset information) 0x6e9e-0x6ea1.7 (4)
0x6ea0|73 63 |sc |
0x6ea0| 00 | . | version: 0 0x6ea2-0x6ea2.7 (1)
0x6ea0| 00 00 00 | ... | flags: 0 0x6ea3-0x6ea5.7 (3)
0x6ea0| 00 00 00 01 | .... | entry_count: 1 0x6ea6-0x6ea9.7 (4)
| | | entries[0:1]: 0x6eaa-0x6eb5.7 (12)
| | | [0]{}: entry 0x6eaa-0x6eb5.7 (12)
0x6ea0| 00 00 00 01 | .... | first_chunk: 1 0x6eaa-0x6ead.7 (4)
0x6ea0| 00 00| ..| samples_per_chunk: 1 0x6eae-0x6eb1.7 (4)
0x6eb0|00 01 |.. |
0x6eb0| 00 00 00 01 | .... | sample_description_id: 1 0x6eb2-0x6eb5.7 (4)
| | | [3]{}: box 0x6eb6-0x6ec9.7 (20)
0x6eb0| 00 00 00 14 | .... | size: 20 0x6eb6-0x6eb9.7 (4)
0x6eb0| 73 74 73 7a | stsz | type: "stsz" (Sample sizes (framing)) 0x6eba-0x6ebd.7 (4)
0x6eb0| 00 | . | version: 0 0x6ebe-0x6ebe.7 (1)
0x6eb0| 00| .| flags: 0 0x6ebf-0x6ec1.7 (3)
0x6ec0|00 00 |.. |
0x6ec0| 00 00 6c 19 | ..l. | sample_size: 27673 0x6ec2-0x6ec5.7 (4)
0x6ec0| 00 00 00 01 | .... | entry_count: 1 0x6ec6-0x6ec9.7 (4)
| | | [4]{}: box 0x6eca-0x6edd.7 (20)
0x6ec0| 00 00 00 14 | .... | size: 20 0x6eca-0x6ecd.7 (4)
0x6ec0| 73 74| st| type: "stco" (Chunk offset, partial data-offset information) 0x6ece-0x6ed1.7 (4)
0x6ed0|63 6f |co |
0x6ed0| 00 | . | version: 0 0x6ed2-0x6ed2.7 (1)
0x6ed0| 00 00 00 | ... | flags: 0 0x6ed3-0x6ed5.7 (3)
0x6ed0| 00 00 00 01 | .... | entry_count: 1 0x6ed6-0x6ed9.7 (4)
| | | entries[0:1]: 0x6eda-0x6edd.7 (4)
0x6ed0| 00 00 00 24 | ...$ | [0]: 36 chunk_offset 0x6eda-0x6edd.7 (4)
| | | [2]{}: box 0x6ede-0x6efe.7 (33)
0x6ed0| 00 00| ..| size: 33 0x6ede-0x6ee1.7 (4)
0x6ee0|00 21 |.! |
0x6ee0| 75 64 74 61 | udta | type: "udta" (User-data) 0x6ee2-0x6ee5.7 (4)
| | | boxes[0:1]: 0x6ee6-0x6efe.7 (25)
| | | [0]{}: box 0x6ee6-0x6efe.7 (25)
0x6ee0| 00 00 00 19 | .... | size: 25 0x6ee6-0x6ee9.7 (4)
0x6ee0| a9 73 77 72 | .swr | type: "<22>swr" 0x6eea-0x6eed.7 (4)
0x6ee0| 00 0d| ..| data: raw bits 0x6eee-0x6efe.7 (17)
0x6ef0|55 c4 4c 61 76 66 35 39 2e 31 36 2e 31 30 30| |U.Lavf59.16.100||
| | | tracks[0:1]: 0x24-0x6efe.7 (28379)
| | | [0]{}: track 0x24-0x6efe.7 (28379)
| | | samples[0:1]: 0x24-0x6c3c.7 (27673)
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| [0]{}: sample (prores_frame) 0x24-0x6c3c.7 (27673)
| | | container{}: 0x24-0x2b.7 (8)
0x0020| 00 00 6c 19 | ..l. | size: 27673 0x24-0x27.7 (4)
0x0020| 69 63 70 66 | icpf | type: "icpf" (valid) 0x28-0x2b.7 (4)
| | | header{}: 0x2c-0xbf.7 (148)
0x0020| 00 94 | .. | hdr_size: 148 0x2c-0x2d.7 (2)
0x0020| 00 00| ..| version: 0 0x2e-0x2f.7 (2)
0x0030|66 6d 70 67 |fmpg | creator_id: "fmpg" 0x30-0x33.7 (4)
0x0030| 01 40 | .@ | width: 320 0x34-0x35.7 (2)
0x0030| 00 f0 | .. | height: 240 0x36-0x37.7 (2)
| | | frame_flags{}: 0x38-0x38.7 (1)
0x0030| c2 | . | chrominance_factor: "444" (3) 0x38-0x38.1 (0.2)
0x0030| c2 | . | unused0: 0 0x38.2-0x38.3 (0.2)
0x0030| c2 | . | frame_type: "progressive" (0) 0x38.4-0x38.5 (0.2)
0x0030| c2 | . | unused1: 2 0x38.6-0x38.7 (0.2)
0x0030| 00 | . | reserved1: 0 0x39-0x39.7 (1)
0x0030| 02 | . | primaries: 2 0x3a-0x3a.7 (1)
0x0030| 02 | . | transf_func: 2 0x3b-0x3b.7 (1)
0x0030| 02 | . | color_matrix: 2 0x3c-0x3c.7 (1)
0x0030| a0 | . | src_pix_fmt: 10 0x3d-0x3d.3 (0.4)
0x0030| a0 | . | alpha_info: 0 0x3d.4-0x3d.7 (0.4)
0x0030| 00 | . | reserved2: 0 0x3e-0x3e.7 (1)
0x0030| 03| .| q_mat_flags: 3 0x3f-0x3f.7 (1)
0x0040|04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04|................| q_mat_luma: raw bits 0x40-0x7f.7 (64)
* |until 0x7f.7 (64) | |
0x0080|04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04|................| q_mat_chroma: raw bits 0x80-0xbf.7 (64)
* |until 0xbf.7 (64) | |
0x00c0|40 00 00 6b 7d 00 2d 30 05 a7 05 df 00 25 05 6c|@..k}.-0.....%.l| picture_data: raw bits 0xc0-0x6c3c.7 (27517)
* |until 0x6c3c.7 (27517) | |
| | | id: 1 0x6eff-NA (0)
| | | data_foramt: "ap4h" (Apple ProRes 4444) 0x6eff-NA (0)

BIN
format/prores/testdata/prores_frame.mov vendored Normal file

Binary file not shown.

View File

@ -179,6 +179,7 @@ opus_packet Opus packet
pcap PCAP packet capture
pcapng PCAPNG packet capture
png Portable Network Graphics file
prores_frame Apple ProRes frame
protobuf Protobuf
protobuf_widevine Widevine protobuf
pssh_playready PlayReady PSSH