# ffmpeg -f lavfi -i sine -t 1ms -write_xing 0 -write_id3v2 0 -write_id3v1 0 -f mp3 test.mp3 # convert -size 4x4 "xc:#000" 4x4.png # eyeD3 --encoding=utf16 --add-image=4x4.png:OTHER:test test.mp3 # fq test.mp3 .headers[0]._bits > utf16-apic $ fq -d id3v2 dv utf16-apic |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: utf16-apic (id3v2) 0x0-0x256 (598) | | | header{}: 0x0-0xa (10) 0x000|49 44 33 |ID3 | magic: "ID3" (valid) 0x0-0x3 (3) 0x000| 04 | . | version: 4 (valid) 0x3-0x4 (1) 0x000| 00 | . | revision: 0 0x4-0x5 (1) | | | flags{}: 0x5-0x6 (1) 0x000| 00 | . | unsynchronisation: false 0x5-0x5.1 (0.1) 0x000| 00 | . | extended_header: false 0x5.1-0x5.2 (0.1) 0x000| 00 | . | experimental_indicator: false 0x5.2-0x5.3 (0.1) 0x000| 00 | . | unused: 0 0x5.3-0x6 (0.5) 0x000| 00 00 04 4c | ...L | size: 588 0x6-0xa (4) | | | frames[0:2]: 0xa-0x156 (332) | | | [0]{}: frame 0xa-0x12f (293) 0x000| 41 50 49 43 | APIC | id: "APIC" (Attached picture) 0xa-0xe (4) 0x000| 00 00| ..| size: 283 0xe-0x12 (4) 0x010|02 1b |.. | | | | flags{}: 0x12-0x14 (2) 0x010| 00 | . | unused0: 0 0x12-0x12.1 (0.1) 0x010| 00 | . | tag_alter_preservation: false 0x12.1-0x12.2 (0.1) 0x010| 00 | . | file_alter_preservation: false 0x12.2-0x12.3 (0.1) 0x010| 00 | . | read_only: false 0x12.3-0x12.4 (0.1) 0x010| 00 00 | .. | unused1: 0 0x12.4-0x13.1 (0.5) 0x010| 00 | . | grouping_identity: false 0x13.1-0x13.2 (0.1) 0x010| 00 | . | unused2: 0 0x13.2-0x13.4 (0.2) 0x010| 00 | . | compression: false 0x13.4-0x13.5 (0.1) 0x010| 00 | . | encryption: false 0x13.5-0x13.6 (0.1) 0x010| 00 | . | unsync: false 0x13.6-0x13.7 (0.1) 0x010| 00 | . | data_length_indicator: false 0x13.7-0x14 (0.1) 0x010| 01 | . | text_encoding: "utf16" (1) 0x14-0x15 (1) 0x010| 69 6d 61 67 65 2f 70 6e 67 00 | image/png. | mime_type: "image/png" 0x15-0x1f (10) 0x010| 00| .| picture_type: 0 0x1f-0x20 (1) 0x020|ff fe 74 00 65 00 73 00 74 00 00 00 |..t.e.s.t... | description: "test" 0x20-0x2c (12) |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| picture{}: (png) 0x2c-0x12f (259) 0x020| 89 50 4e 47| .PNG| signature: raw bits (valid) 0x2c-0x34 (8) 0x030|0d 0a 1a 0a |.... | | | | chunks[0:9]: 0x34-0x12f (251) | | | [0]{}: chunk 0x34-0x4d (25) 0x030| 00 00 00 0d | .... | length: 13 0x34-0x38 (4) 0x030| 49 48 44 52 | IHDR | type: "IHDR" 0x38-0x3c (4) 0x030| 49 | I | ancillary: false 0x38.3-0x38.4 (0.1) 0x030| 48 | H | private: false 0x39.3-0x39.4 (0.1) 0x030| 44 | D | reserved: false 0x3a.3-0x3a.4 (0.1) 0x030| 52 | R | safe_to_copy: true 0x3b.3-0x3b.4 (0.1) 0x030| 00 00 00 04| ....| width: 4 0x3c-0x40 (4) 0x040|00 00 00 04 |.... | height: 4 0x40-0x44 (4) 0x040| 01 | . | bit_depth: 1 0x44-0x45 (1) 0x040| 00 | . | color_type: "grayscale" (0) 0x45-0x46 (1) 0x040| 00 | . | compression_method: "deflate" (0) 0x46-0x47 (1) 0x040| 00 | . | filter_method: "adaptive_filtering" (0) 0x47-0x48 (1) 0x040| 00 | . | interlace_method: "none" (0) 0x48-0x49 (1) 0x040| 81 8a a3 d3 | .... | crc: 0x818aa3d3 (valid) 0x49-0x4d (4) | | | [1]{}: chunk 0x4d-0x5d (16) 0x040| 00 00 00| ...| length: 4 0x4d-0x51 (4) 0x050|04 |. | 0x050| 67 41 4d 41 | gAMA | type: "gAMA" 0x51-0x55 (4) 0x050| 67 | g | ancillary: false 0x51.3-0x51.4 (0.1) 0x050| 41 | A | private: false 0x52.3-0x52.4 (0.1) 0x050| 4d | M | reserved: false 0x53.3-0x53.4 (0.1) 0x050| 41 | A | safe_to_copy: false 0x54.3-0x54.4 (0.1) 0x050| 00 00 b1 8f | .... | value: 45455 0x55-0x59 (4) 0x050| 0b fc 61 05 | ..a. | crc: 0xbfc6105 (valid) 0x59-0x5d (4) | | | [2]{}: chunk 0x5d-0x89 (44) 0x050| 00 00 00| ...| length: 32 0x5d-0x61 (4) 0x060|20 | | 0x060| 63 48 52 4d | cHRM | type: "cHRM" 0x61-0x65 (4) 0x060| 63 | c | ancillary: false 0x61.3-0x61.4 (0.1) 0x060| 48 | H | private: false 0x62.3-0x62.4 (0.1) 0x060| 52 | R | reserved: true 0x63.3-0x63.4 (0.1) 0x060| 4d | M | safe_to_copy: false 0x64.3-0x64.4 (0.1) 0x060| 00 00 7a 26 | ..z& | white_point_x: 31.27 0x65-0x69 (4) 0x060| 00 00 80 84 | .... | white_point_y: 32.9 0x69-0x6d (4) 0x060| 00 00 fa| ...| red_x: 64 0x6d-0x71 (4) 0x070|00 |. | 0x070| 00 00 80 e8 | .... | red_y: 33 0x71-0x75 (4) 0x070| 00 00 75 30 | ..u0 | green_x: 30 0x75-0x79 (4) 0x070| 00 00 ea 60 | ...` | green_y: 60 0x79-0x7d (4) 0x070| 00 00 3a| ..:| blue_x: 15 0x7d-0x81 (4) 0x080|98 |. | 0x080| 00 00 17 70 | ...p | blue_y: 6 0x81-0x85 (4) 0x080| 9c ba 51 3c | ..Q< | crc: 0x9cba513c (valid) 0x85-0x89 (4) | | | [3]{}: chunk 0x89-0x97 (14) 0x080| 00 00 00 02 | .... | length: 2 0x89-0x8d (4) 0x080| 62 4b 47| bKG| type: "bKGD" 0x8d-0x91 (4) 0x090|44 |D | 0x080| 62 | b | ancillary: false 0x8d.3-0x8d.4 (0.1) 0x080| 4b | K | private: false 0x8e.3-0x8e.4 (0.1) 0x080| 47| G| reserved: false 0x8f.3-0x8f.4 (0.1) 0x090|44 |D | safe_to_copy: false 0x90.3-0x90.4 (0.1) 0x090| 00 01 | .. | gray: 1 0x91-0x93 (2) 0x090| dd 8a 13 a4 | .... | crc: 0xdd8a13a4 (valid) 0x93-0x97 (4) | | | [4]{}: chunk 0x97-0xaa (19) 0x090| 00 00 00 07 | .... | length: 7 0x97-0x9b (4) 0x090| 74 49 4d 45 | tIME | type: "tIME" 0x9b-0x9f (4) 0x090| 74 | t | ancillary: true 0x9b.3-0x9b.4 (0.1) 0x090| 49 | I | private: false 0x9c.3-0x9c.4 (0.1) 0x090| 4d | M | reserved: false 0x9d.3-0x9d.4 (0.1) 0x090| 45 | E | safe_to_copy: false 0x9e.3-0x9e.4 (0.1) 0x090| 07| .| data: raw bits 0x9f-0xa6 (7) 0x0a0|e5 05 14 14 35 24 |....5$ | 0x0a0| 18 db 42 e2 | ..B. | crc: 0x18db42e2 (valid) 0xa6-0xaa (4) | | | [5]{}: chunk 0xaa-0xc1 (23) 0x0a0| 00 00 00 0b | .... | length: 11 0xaa-0xae (4) 0x0a0| 49 44| ID| type: "IDAT" 0xae-0xb2 (4) 0x0b0|41 54 |AT | 0x0a0| 49 | I | ancillary: false 0xae.3-0xae.4 (0.1) 0x0a0| 44| D| private: false 0xaf.3-0xaf.4 (0.1) 0x0b0|41 |A | reserved: false 0xb0.3-0xb0.4 (0.1) 0x0b0| 54 | T | safe_to_copy: true 0xb1.3-0xb1.4 (0.1) 0x0b0| 08 d7 63 60 80 00 00 00 08 00 01 | ..c`....... | data: raw bits 0xb2-0xbd (11) 0x0b0| 2f 20 dd| / .| crc: 0x2f20dd31 (valid) 0xbd-0xc1 (4) 0x0c0|31 |1 | | | | [6]{}: chunk 0xc1-0xf2 (49) 0x0c0| 00 00 00 25 | ...% | length: 37 0xc1-0xc5 (4) 0x0c0| 74 45 58 74 | tEXt | type: "tEXt" 0xc5-0xc9 (4) 0x0c0| 74 | t | ancillary: true 0xc5.3-0xc5.4 (0.1) 0x0c0| 45 | E | private: false 0xc6.3-0xc6.4 (0.1) 0x0c0| 58 | X | reserved: true 0xc7.3-0xc7.4 (0.1) 0x0c0| 74 | t | safe_to_copy: true 0xc8.3-0xc8.4 (0.1) 0x0c0| 64 61 74 65 3a 63 72| date:cr| keyword: "date:create" 0xc9-0xd5 (12) 0x0d0|65 61 74 65 00 |eate. | 0x0d0| 32 30 32 31 2d 30 35 2d 32 30 54| 2021-05-20T| text: "2021-05-20T20:53:36+00:00" 0xd5-0xee (25) 0x0e0|32 30 3a 35 33 3a 33 36 2b 30 30 3a 30 30 |20:53:36+00:00 | 0x0e0| 67 53| gS| crc: 0x6753fe7a (valid) 0xee-0xf2 (4) 0x0f0|fe 7a |.z | | | | [7]{}: chunk 0xf2-0x123 (49) 0x0f0| 00 00 00 25 | ...% | length: 37 0xf2-0xf6 (4) 0x0f0| 74 45 58 74 | tEXt | type: "tEXt" 0xf6-0xfa (4) 0x0f0| 74 | t | ancillary: true 0xf6.3-0xf6.4 (0.1) 0x0f0| 45 | E | private: false 0xf7.3-0xf7.4 (0.1) 0x0f0| 58 | X | reserved: true 0xf8.3-0xf8.4 (0.1) 0x0f0| 74 | t | safe_to_copy: true 0xf9.3-0xf9.4 (0.1) 0x0f0| 64 61 74 65 3a 6d| date:m| keyword: "date:modify" 0xfa-0x106 (12) 0x100|6f 64 69 66 79 00 |odify. | 0x100| 32 30 32 31 2d 30 35 2d 32 30| 2021-05-20| text: "2021-05-20T20:53:36+00:00" 0x106-0x11f (25) 0x110|54 32 30 3a 35 33 3a 33 36 2b 30 30 3a 30 30 |T20:53:36+00:00 | 0x110| 16| .| crc: 0x160e46c6 (valid) 0x11f-0x123 (4) 0x120|0e 46 c6 |.F. | | | | [8]{}: chunk 0x123-0x12f (12) 0x120| 00 00 00 00 | .... | length: 0 0x123-0x127 (4) 0x120| 49 45 4e 44 | IEND | type: "IEND" 0x127-0x12b (4) 0x120| 49 | I | ancillary: false 0x127.3-0x127.4 (0.1) 0x120| 45 | E | private: false 0x128.3-0x128.4 (0.1) 0x120| 4e | N | reserved: false 0x129.3-0x129.4 (0.1) 0x120| 44 | D | safe_to_copy: false 0x12a.3-0x12a.4 (0.1) 0x120| ae 42 60 82 | .B`. | crc: 0xae426082 (valid) 0x12b-0x12f (4) | | | [1]{}: frame 0x12f-0x156 (39) 0x120| 54| T| id: "TSSE" (Software/Hardware and settings used for encoding) 0x12f-0x133 (4) 0x130|53 53 45 |SSE | 0x130| 00 00 00 1d | .... | size: 29 0x133-0x137 (4) | | | flags{}: 0x137-0x139 (2) 0x130| 00 | . | unused0: 0 0x137-0x137.1 (0.1) 0x130| 00 | . | tag_alter_preservation: false 0x137.1-0x137.2 (0.1) 0x130| 00 | . | file_alter_preservation: false 0x137.2-0x137.3 (0.1) 0x130| 00 | . | read_only: false 0x137.3-0x137.4 (0.1) 0x130| 00 00 | .. | unused1: 0 0x137.4-0x138.1 (0.5) 0x130| 00 | . | grouping_identity: false 0x138.1-0x138.2 (0.1) 0x130| 00 | . | unused2: 0 0x138.2-0x138.4 (0.2) 0x130| 00 | . | compression: false 0x138.4-0x138.5 (0.1) 0x130| 00 | . | encryption: false 0x138.5-0x138.6 (0.1) 0x130| 00 | . | unsync: false 0x138.6-0x138.7 (0.1) 0x130| 00 | . | data_length_indicator: false 0x138.7-0x139 (0.1) 0x130| 01 | . | text_encoding: "utf16" (1) 0x139-0x13a (1) 0x130| ff fe 4c 00 61 00| ..L.a.| text: "Lavf58.76.100" 0x13a-0x156 (28) 0x140|76 00 66 00 35 00 38 00 2e 00 37 00 36 00 2e 00|v.f.5.8...7.6...| 0x150|31 00 30 00 30 00 |1.0.0. | 0x150| 00 00 00 00 00 00 00 00 00 00| ..........| padding: raw bits (all zero) 0x156-0x256 (256) 0x160|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00|................| * |until 0x255.7 (end) (256) | |