# 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 verbose /utf16-apic |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: /utf16-apic (id3v2) 0x0-0x255.7 (598) 0x000|49 44 33 |ID3 | magic: "ID3" (valid) 0x0-0x2.7 (3) 0x000| 04 | . | version: 4 0x3-0x3.7 (1) 0x000| 00 | . | revision: 0 0x4-0x4.7 (1) | | | flags{}: 0x5-0x5.7 (1) 0x000| 00 | . | unsynchronisation: false 0x5-0x5 (0.1) 0x000| 00 | . | extended_header: false 0x5.1-0x5.1 (0.1) 0x000| 00 | . | experimental_indicator: false 0x5.2-0x5.2 (0.1) 0x000| 00 | . | unused: 0 0x5.3-0x5.7 (0.5) 0x000| 00 00 04 4c | ...L | size: 588 0x6-0x9.7 (4) | | | frames[0:2]: 0xa-0x155.7 (332) | | | [0]{}: frame 0xa-0x12e.7 (293) 0x000| 41 50 49 43 | APIC | id: "APIC" (Attached picture) 0xa-0xd.7 (4) 0x000| 00 00| ..| size: 283 0xe-0x11.7 (4) 0x010|02 1b |.. | | | | flags{}: 0x12-0x13.7 (2) 0x010| 00 | . | unused0: 0 0x12-0x12 (0.1) 0x010| 00 | . | tag_alter_preservation: false 0x12.1-0x12.1 (0.1) 0x010| 00 | . | file_alter_preservation: false 0x12.2-0x12.2 (0.1) 0x010| 00 | . | read_only: false 0x12.3-0x12.3 (0.1) 0x010| 00 00 | .. | unused1: 0 0x12.4-0x13 (0.5) 0x010| 00 | . | grouping_identity: false 0x13.1-0x13.1 (0.1) 0x010| 00 | . | unused2: 0 0x13.2-0x13.3 (0.2) 0x010| 00 | . | compression: false 0x13.4-0x13.4 (0.1) 0x010| 00 | . | encryption: false 0x13.5-0x13.5 (0.1) 0x010| 00 | . | unsync: false 0x13.6-0x13.6 (0.1) 0x010| 00 | . | data_length_indicator: false 0x13.7-0x13.7 (0.1) 0x010| 01 | . | text_encoding: "UTF-16" (1) 0x14-0x14.7 (1) 0x010| 69 6d 61 67 65 2f 70 6e 67 00 | image/png. | mime_type: "image/png" 0x15-0x1e.7 (10) 0x010| 00| .| picture_type: 0 0x1f-0x1f.7 (1) 0x020|ff fe 74 00 65 00 73 00 74 00 00 00 |..t.e.s.t... | description: "test" 0x20-0x2b.7 (12) | | | picture{}: (png) 0x2c-0x12e.7 (259) 0x020| 89 50 4e 47| .PNG| signature: raw bits (valid) 0x2c-0x33.7 (8) 0x030|0d 0a 1a 0a |.... | | | | chunks[0:9]: 0x34-0x12e.7 (251) | | | [0]{}: chunk 0x34-0x4c.7 (25) 0x030| 00 00 00 0d | .... | length: 13 0x34-0x37.7 (4) 0x030| 49 48 44 52 | IHDR | type: "IHDR" 0x38-0x3b.7 (4) 0x030| 49 | I | ancillary: false 0x38.3-0x38.3 (0.1) 0x030| 48 | H | private: false 0x39.3-0x39.3 (0.1) 0x030| 44 | D | reserved: false 0x3a.3-0x3a.3 (0.1) 0x030| 52 | R | safe_to_copy: true 0x3b.3-0x3b.3 (0.1) 0x030| 00 00 00 04| ....| width: 4 0x3c-0x3f.7 (4) 0x040|00 00 00 04 |.... | height: 4 0x40-0x43.7 (4) 0x040| 01 | . | bit_depth: 1 0x44-0x44.7 (1) 0x040| 00 | . | color_type: "g" (0) (Grayscale) 0x45-0x45.7 (1) 0x040| 00 | . | compression_method: "deflate" (0) 0x46-0x46.7 (1) 0x040| 00 | . | filter_method: "Adaptive filtering" (0) 0x47-0x47.7 (1) 0x040| 00 | . | interlace_method: "No interlace" (0) 0x48-0x48.7 (1) 0x040| 81 8a a3 d3 | .... | crc: 0x818aa3d3 (valid) 0x49-0x4c.7 (4) | | | [1]{}: chunk 0x4d-0x5c.7 (16) 0x040| 00 00 00| ...| length: 4 0x4d-0x50.7 (4) 0x050|04 |. | 0x050| 67 41 4d 41 | gAMA | type: "gAMA" 0x51-0x54.7 (4) 0x050| 67 | g | ancillary: false 0x51.3-0x51.3 (0.1) 0x050| 41 | A | private: false 0x52.3-0x52.3 (0.1) 0x050| 4d | M | reserved: false 0x53.3-0x53.3 (0.1) 0x050| 41 | A | safe_to_copy: false 0x54.3-0x54.3 (0.1) 0x050| 00 00 b1 8f | .... | value: 45455 0x55-0x58.7 (4) 0x050| 0b fc 61 05 | ..a. | crc: 0xbfc6105 (valid) 0x59-0x5c.7 (4) | | | [2]{}: chunk 0x5d-0x88.7 (44) 0x050| 00 00 00| ...| length: 32 0x5d-0x60.7 (4) 0x060|20 | | 0x060| 63 48 52 4d | cHRM | type: "cHRM" 0x61-0x64.7 (4) 0x060| 63 | c | ancillary: false 0x61.3-0x61.3 (0.1) 0x060| 48 | H | private: false 0x62.3-0x62.3 (0.1) 0x060| 52 | R | reserved: true 0x63.3-0x63.3 (0.1) 0x060| 4d | M | safe_to_copy: false 0x64.3-0x64.3 (0.1) 0x060| 00 00 7a 26 | ..z& | white_point_x: 31.27 0x65-0x68.7 (4) 0x060| 00 00 80 84 | .... | white_point_y: 32.9 0x69-0x6c.7 (4) 0x060| 00 00 fa| ...| red_x: 64 0x6d-0x70.7 (4) 0x070|00 |. | 0x070| 00 00 80 e8 | .... | red_y: 33 0x71-0x74.7 (4) 0x070| 00 00 75 30 | ..u0 | green_x: 30 0x75-0x78.7 (4) 0x070| 00 00 ea 60 | ...` | green_y: 60 0x79-0x7c.7 (4) 0x070| 00 00 3a| ..:| blue_x: 15 0x7d-0x80.7 (4) 0x080|98 |. | 0x080| 00 00 17 70 | ...p | blue_y: 6 0x81-0x84.7 (4) 0x080| 9c ba 51 3c | ..Q< | crc: 0x9cba513c (valid) 0x85-0x88.7 (4) | | | [3]{}: chunk 0x89-0x96.7 (14) 0x080| 00 00 00 02 | .... | length: 2 0x89-0x8c.7 (4) 0x080| 62 4b 47| bKG| type: "bKGD" 0x8d-0x90.7 (4) 0x090|44 |D | 0x080| 62 | b | ancillary: false 0x8d.3-0x8d.3 (0.1) 0x080| 4b | K | private: false 0x8e.3-0x8e.3 (0.1) 0x080| 47| G| reserved: false 0x8f.3-0x8f.3 (0.1) 0x090|44 |D | safe_to_copy: false 0x90.3-0x90.3 (0.1) 0x090| 00 01 | .. | gray: 1 0x91-0x92.7 (2) 0x090| dd 8a 13 a4 | .... | crc: 0xdd8a13a4 (valid) 0x93-0x96.7 (4) | | | [4]{}: chunk 0x97-0xa9.7 (19) 0x090| 00 00 00 07 | .... | length: 7 0x97-0x9a.7 (4) 0x090| 74 49 4d 45 | tIME | type: "tIME" 0x9b-0x9e.7 (4) 0x090| 74 | t | ancillary: true 0x9b.3-0x9b.3 (0.1) 0x090| 49 | I | private: false 0x9c.3-0x9c.3 (0.1) 0x090| 4d | M | reserved: false 0x9d.3-0x9d.3 (0.1) 0x090| 45 | E | safe_to_copy: false 0x9e.3-0x9e.3 (0.1) 0x090| 07| .| data: raw bits 0x9f-0xa5.7 (7) 0x0a0|e5 05 14 14 35 24 |....5$ | 0x0a0| 18 db 42 e2 | ..B. | crc: 0x18db42e2 (valid) 0xa6-0xa9.7 (4) | | | [5]{}: chunk 0xaa-0xc0.7 (23) 0x0a0| 00 00 00 0b | .... | length: 11 0xaa-0xad.7 (4) 0x0a0| 49 44| ID| type: "IDAT" 0xae-0xb1.7 (4) 0x0b0|41 54 |AT | 0x0a0| 49 | I | ancillary: false 0xae.3-0xae.3 (0.1) 0x0a0| 44| D| private: false 0xaf.3-0xaf.3 (0.1) 0x0b0|41 |A | reserved: false 0xb0.3-0xb0.3 (0.1) 0x0b0| 54 | T | safe_to_copy: true 0xb1.3-0xb1.3 (0.1) 0x0b0| 08 d7 63 60 80 00 00 00 08 00 01 | ..c`....... | data: raw bits 0xb2-0xbc.7 (11) 0x0b0| 2f 20 dd| / .| crc: 0x2f20dd31 (valid) 0xbd-0xc0.7 (4) 0x0c0|31 |1 | | | | [6]{}: chunk 0xc1-0xf1.7 (49) 0x0c0| 00 00 00 25 | ...% | length: 37 0xc1-0xc4.7 (4) 0x0c0| 74 45 58 74 | tEXt | type: "tEXt" 0xc5-0xc8.7 (4) 0x0c0| 74 | t | ancillary: true 0xc5.3-0xc5.3 (0.1) 0x0c0| 45 | E | private: false 0xc6.3-0xc6.3 (0.1) 0x0c0| 58 | X | reserved: true 0xc7.3-0xc7.3 (0.1) 0x0c0| 74 | t | safe_to_copy: true 0xc8.3-0xc8.3 (0.1) 0x0c0| 64 61 74 65 3a 63 72| date:cr| keyword: "date:create" 0xc9-0xd4.7 (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-0xed.7 (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-0xf1.7 (4) 0x0f0|fe 7a |.z | | | | [7]{}: chunk 0xf2-0x122.7 (49) 0x0f0| 00 00 00 25 | ...% | length: 37 0xf2-0xf5.7 (4) 0x0f0| 74 45 58 74 | tEXt | type: "tEXt" 0xf6-0xf9.7 (4) 0x0f0| 74 | t | ancillary: true 0xf6.3-0xf6.3 (0.1) 0x0f0| 45 | E | private: false 0xf7.3-0xf7.3 (0.1) 0x0f0| 58 | X | reserved: true 0xf8.3-0xf8.3 (0.1) 0x0f0| 74 | t | safe_to_copy: true 0xf9.3-0xf9.3 (0.1) 0x0f0| 64 61 74 65 3a 6d| date:m| keyword: "date:modify" 0xfa-0x105.7 (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-0x11e.7 (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-0x122.7 (4) 0x120|0e 46 c6 |.F. | | | | [8]{}: chunk 0x123-0x12e.7 (12) 0x120| 00 00 00 00 | .... | length: 0 0x123-0x126.7 (4) 0x120| 49 45 4e 44 | IEND | type: "IEND" 0x127-0x12a.7 (4) 0x120| 49 | I | ancillary: false 0x127.3-0x127.3 (0.1) 0x120| 45 | E | private: false 0x128.3-0x128.3 (0.1) 0x120| 4e | N | reserved: false 0x129.3-0x129.3 (0.1) 0x120| 44 | D | safe_to_copy: false 0x12a.3-0x12a.3 (0.1) 0x120| ae 42 60 82 | .B`. | crc: 0xae426082 (valid) 0x12b-0x12e.7 (4) | | | [1]{}: frame 0x12f-0x155.7 (39) 0x120| 54| T| id: "TSSE" (Software/Hardware and settings used for encoding) 0x12f-0x132.7 (4) 0x130|53 53 45 |SSE | 0x130| 00 00 00 1d | .... | size: 29 0x133-0x136.7 (4) | | | flags{}: 0x137-0x138.7 (2) 0x130| 00 | . | unused0: 0 0x137-0x137 (0.1) 0x130| 00 | . | tag_alter_preservation: false 0x137.1-0x137.1 (0.1) 0x130| 00 | . | file_alter_preservation: false 0x137.2-0x137.2 (0.1) 0x130| 00 | . | read_only: false 0x137.3-0x137.3 (0.1) 0x130| 00 00 | .. | unused1: 0 0x137.4-0x138 (0.5) 0x130| 00 | . | grouping_identity: false 0x138.1-0x138.1 (0.1) 0x130| 00 | . | unused2: 0 0x138.2-0x138.3 (0.2) 0x130| 00 | . | compression: false 0x138.4-0x138.4 (0.1) 0x130| 00 | . | encryption: false 0x138.5-0x138.5 (0.1) 0x130| 00 | . | unsync: false 0x138.6-0x138.6 (0.1) 0x130| 00 | . | data_length_indicator: false 0x138.7-0x138.7 (0.1) 0x130| 01 | . | text_encoding: "UTF-16" (1) 0x139-0x139.7 (1) 0x130| ff fe 4c 00 61 00| ..L.a.| text: "Lavf58.76.100" 0x13a-0x155.7 (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-0x255.7 (256) 0x160|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00|................| * |until 0x255.7 (end) (256) | |