Giter Club home page Giter Club logo

id3edit's Introduction

id3edit

Status: 🟢 Active - License: GPL v3

id3edit is a command line ID3v2 tag editor and debugger

Print all frames with details

# Install clang and zlib
pacman -S clang zlib # Use the package manager of your distribution

# Install libprinthex
git clone https://github.com/rstemmer/libprinthex.git
cd libprinthex
./build.sh
sudo ./install.sh # Installs to /usr/local/{lib,include}

# Install id3edit
git clone https://github.com/rstemmer/id3edit.git
cd id3edit
./build.sh
sudo ./install.sh # Installs to /usr/local/bin

id3edit --readonly --showheader --get-all --get-frames bugtrigger.mp3

Features

id3edit is a command line editor to edit and debug ID3v2 tags (ID3v2.3.0 & ID3v2.4.0 of mp3 files with full Unicode support.

I separated id3edit from the MusicDB Project to give it its own repository and own issue tracker.

Its main features are:

  • Show all frames of the ID3 tag (colloquial "mp3 tags")
  • Get/Add/Edit specific frames (see Name Definitions)
  • Get/Add artworks (Support for jpeg and png. Create an issue if you need more types.)
  • Remove frames or the whole tag
  • Print hex-dump of a specific frame
  • You can overwrite the input file or write to a new path
  • It is made to handle invalid tags and headers and debug them
  • Can print a detailed list of all frames with comments when they are invalid
  • Supports Unicode correctly!
  • It works from command line
  • Support for ID3v2.3.0 (most common) and ID3v2.4.0 (latest)
  • All encodings supported (ISO 8859-1, UTF-16 with BOM, UTF-16BE, UTF-8)
  • Partial support of extended header: CRC feature supported!

Execution environment:

Limitations

  • See Issue Tracker

Name Definitions

  • Tag: The whole ID3 meta data of an mp3 file is called the Tag. A tag can have multiple frames.
  • Frame: A Frame is one piece of information of the audio file. For example the name of the song.
  • [ID3] Tag Header: A Tag consists of a header followed by multiple frames.
  • Frame Header: Each frame consists of a header and the information encoded in the frame. This information itself can have a further header. For example text frames start with a byte defining the encoding of the text.

History of id3edit

The last three points form the feature list are the reason I developed this tool. In the year 2013 I wanted to unify all tags of my music collection. Therefore I need an ID3 editor I can call from a script to automate the tagging process. Furthermore they had to be able to use Unicode encoded string (Think of Japanese bands). I only found only a few editors that were able to work with Unicode at all. Only one of them provided a command line interface. This tool complete messed up all my tags because the promised Unicode support did not work.

That's why I needed a "ID3 Debugger" and this project was born.

Lessons learned: Also backup huge data collection and test foreign tools properly before using it in scripts :)

After separating id3edit from MusicDB I reviewed the whole code and added some missing features. Furthermore I added ID3v2.4.0 support. So version 2.0.0 of id3edit was born.

Examples

Here are some everyday examples as well as an example of how to fix a broken ID3 tag.

Getting And Setting Frames

The following example first gets the name of audio file example.mp3, then changes its name to "Example Song Name".

id3edit --get-name example.mp3
id3edit --set-name "Example Song Name" example.mp3

To write into a new file, you can use the --outfile option. If all other meta data shall be removed use the --clear option. The following example creates a clean set of meta data for a song file:

id3edit --set-name    "Example Song"         \\
        --set-album   "Example Album"        \\
        --set-artist  "Example Artist"       \\
        --set-artwork ~/pictures/example.jpg \\
        --set-genre   "Example Genre"        \\
        --set-release 2018                   \\
        --set-track   "13/42"                \\
        --set-cd      "1/1"                  \\
        --clean                              \\
        --encoding    utf-8                  \\
        --outfile Example\ Song.mp3          \\
        sourcefile.mp3

# Review changes
id3edit --get-all Example\ Song.mp3

Debugging

Following scenario: The meta data of a song stored in an ID3 tag is invalid. As an example I use a song from the band Hämatom. The file was originally tagged by a tool that claimed to support Unicode. As we discover in this section, this was not true :)

Printing the meta data

Print all meta data

  • --get-all prints all relevant frames.

Obviously there are some encoding problems and two different release dates. We will look at the song name (TIT2 frame) and genre (TCON frame) in detail later.

Getting details of the damaged frames

Now we can use id3edit to further inspect the file to figure out what's wrong:

Print all frames with details

  • --showheader prints lots of details of the ID3 header and the frame headers while reading the ID3 Tag.
  • --get-frames prints a list of all available frames including details of their size and encoding as well as other useful information.
    • The first column checks if the frames are defined or deprecated in the specific ID3v2 standard.
    • Gray IDs are IDs that are not directly supported by id3edit. (When they start with a T we can work with them anyway)
    • When there is a problem with the UTF-16 encoding, it gets mentioned in yellow.
    • If there is an artwork embedded, details like the mime type and dimension of the image are displayed.

The result of this first look into the details give us the following information:

  1. There is a frame not fully supported by id3edit (TSSE). That's why they do not appear in the result of --get-all. (This is not a problem)
  2. The TDRC frame is not defined in ID3v2.3.0 version of the standard that is defined by the header.
  3. The claimed size of the ID3 Tag is greater than the actual size. The size given in the ID3 Tag Header will be adjusted. This must not be a sign of an invalid Tag. ID3 allows padding bytes that get striped away by id3edit.
  4. There are two BOMs (Byte Order Marks) in the TCON frame. This is an indicator that the mp3 file was tagged by a software that is not ID3v2 conform and/or has problems with Unicode encoded data. It also explains why the genre name in the first screenshot looks so strange.
  5. The artworks width is shorter than its height. That's just ugly but not really a problem with the ID3 Tag itself.

Check and repair song name

First lets check whats wrong with the song name (TIT2):

Hex dump of song title

  • --dump $FRAMEID print a hex dump of a specific frame

The previous analysis using --get-framelist told us, that the TIT2 frame should have been ISO 8859-1 (also called Latin-1 or falsely ASCII) encoded. This gets indicated by the first byte of the text frame (0x00 = ISO 8859-1). The actual text is UTF-8 encoded. That is why the bytes 0xC3 and 0xA4 are interpreted as individual characters which is valid for the ISO 8859-1 encoding standard. All other characters are correct because the have the same values in UTF-8 they have in ISO 8859-1.

The invalid frame can simply be fixed by calling id3edit --set-name "Stay Kränk" invalid.mp3.

Check the TCON problem

Just for demonstration lets see whats wrong with the TCON frame (Content Type - The genre of a song)

Hex dump of a comment frame

As already seen by the --get-frames output, there are two BOMs in the frame. The first byte 0x01 defines the encoding of the frame as UTF-16. The ID3v2 standard then expects a single byte order mark (BOM). The first one tells us, that a UTF-16 LE (Little Endian) encoded string follows. Then a new BOM appears defining an different flavor (UTF-16 BE - Big Endian). The text string itself is actually UTF-16 BE. The second BOM violated the ID3v2 standard so that the bytes gets interpreted as an UTF-16 LE encoded string.

Furthermore the 'ä' got replaced by a 'd' which indicated further Unicode problems in the deeper inside of the tool I used to tag the file initially.

Installation

  1. Install dependencies:
  2. You should check the install.sh script before executing. The default installation path is /usr/local/bin.
  3. Follow the following instructions:
# On Linux: Install clang and zlib
pacman -S git clang zlib # Use the package manager of your distribution
# On MacOS:
xcode-select --install # In case git/clang do not work yet

# Install libprinthex
git clone https://github.com/rstemmer/libprinthex.git
cd libprinthex
./build.sh
sudo ./install.sh # Installs to /usr/local/{lib,include}


# download
git clone https://github.com/rstemmer/id3edit.git
cd id3edit

# build
./build.sh

# install
sudo ./install.sh

Usage

  • id3edit --help to see all available options.
  • id3edit --version to get the version number only, easy to parse without any escape sequences ;)

Shortcuts:

  • id3show $FILE: id3edit --readonly --get-all $FILE
  • id3frames $FILE: id3edit --readonly --get-frames $FILE
  • id3dump $FRAMEID $FILE: id3edit --readonly --dump $FRAMEID $FILE

Contribute

In case you find a bug feel free to create an Issue.

If you have a mp3 file with invalid meta data and you cannot debug it with id3edit, create an Issue and append the invalid file to it (or at least the ID3 Tag).

Pull requests are welcome as well.

Bare mp3 files start with the magic number 0xFF, 0xFB. Sometimes the second byte is different, because this magic number is not really magic, it already contains information about the encoding. In case you find a valid mp3 file and get the error "ID: '???' (??????) not supported! create an Issue and post the following output:

id3edit --readonly --showheader invalid.mp3
hexdump -C invalid.mp3 | head 

In general posing the following information can be helpful to find a bug:

id3edit --readonly --showheader --get-all --get-frames bugtrigger.mp3
hexdump -C bugtrigger.mp3 | head -n 50

id3edit's People

Contributors

rstemmer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

id3edit's Issues

no man page

Currently there is no man-page for id3edit.

Batch edit ?

I try to batch update the genre of a whole directory:

~/Music/Trees - Trees (50th Anniversary Edition)$ id3edit --set-genre "Folk" *.mp3

Invalid Argument: "Trees - Trees (50th Anniversary Edition) - 01 Nothing Special.mp3"
id3edit [2.1.3]

 id3edit --help
 id3edit --version
 id3edit options mp3file

But it doesn't seem to work...
Any additional argument to use ?

Remove all ID3 data including the Header from an audio file

id3edit --clean $FILE removes all Frames from an ID3 Tag and leaves a clean Tag.

It would be nice to add the feature to even remove the ID3 Tag Header.

Possible command line option:

  • id3edit --clear $FILE - It's a bit ugly because clear and clean are very similar
  • id3edit --remove-id3 $FILE
  • id3edit --strip $FILE

Result should be a raw mp3 file

FLAC support?

It would be great for all those who have FLAC audio libraries

Use iconv library for converting between encoding

Currently I use code from the LLVM project. I played a bit with iconv and figured out that this function is exact the function I need :)

Transcode("UTF-8", "UTF-16", inputbuffer, strlen(inputbuffer)+1, outputbuffer, (strlen(inputbuffer)+1) * encodingfactor);
int Transcode(const char *from, const char *to, void *input, size_t inputbytelimit, void *output, size_t outputbytelimit)
{
    iconv_t cd;
    size_t  retval;

    cd = iconv_open(to, from); 
    if(cd == (iconv_t) -1)
    {
        if(errno == EINVAL)
            fprintf(stderr, "\e[1;31miconv_open failed with error \e[1;35mEINVAL\e[1;31m!\e[0m\n");
        else
            fprintf(stderr, "\e[1;31miconv_open failed with unexpected error \e[1;35merrno = %i\e[1;31m!\e[0m\n", errno);
        return -1;
    }

    retval = iconv(cd, (char**)&input, &inputbytelimit, (char**)&output, &outputbytelimit);
    if(retval == (size_t) -1)
    {
        if(errno == E2BIG)
            fprintf(stderr, "\e[1;31miconv failed with error \e[1;35mE2BIG\e[1;31m!\e[0m\n");
        else if(errno == EILSEQ)
            fprintf(stderr, "\e[1;31miconv failed with error \e[1;35mEILSEQ\e[1;31m!\e[0m\n");
        else if(errno == EINVAL)
            fprintf(stderr, "\e[1;31miconv failed with error \e[1;35mEINVAL\e[1;31m!\e[0m\n");
        else
            fprintf(stderr, "\e[1;31miconv failed with unexpected error \e[1;35merrno = %i\e[1;31m!\e[0m\n", errno);
        return -1;
    }

    iconv_close(cd);
    return 0;
}

Support multiple APIC frames

There are lots of different APIC frame types. Currently I only support type 0x03 - Front Cover.

The only challenge is to finde a good UI integration.

Some tests fail on MacOS (despite valid result)

Executing test.sh on MacOS shows several test fail.
This ist most likely in all cases the situation that MacOS uses UTF16BE while Linux systems I used for testing use UTF16LE as default UTF16 encoding.
Is behavior is totally fine because there is a byte order mark (BOM) included with each text.
See also #29

Test results should be valid for both cases.
A solution will be to compare the outcoming file of a test run with two check sums. One expected for UTF16LE encoded data and one for UTF16BE encoded data. Simular as is has been done in the encoding test application (See #29 )

--create creates always ID3v2.3.0 tags

There should be an option to choose between the two standard:

  • --create 2.4.0: Problem: Change of the --create option that is incompatible to id3edit 1.x.x
  • --create240
  • --create --force240: Currently I evaluate the --force options at the end. In combination with create I need to do this at the very beginning of the editing process. Sinze --force* was always dangerous to use this change is OK. It would be better to finde a better solution and get rid of the nondeterministic --force* option.

ID: '���' (FFFBB0) not supported!

$ id3edit --readonly --showheader --get-all --get-frames invalid.mp3
Header
ID: '���'
Version: 2.0.0
Flags: 0x00
Size: 0
ID: '���' (FFFBB0) not supported!
ID3V2_Open failed with error -2!

$ hexdump -C invalid.mp3 | head -n 30
00000000 ff fb b0 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 49 6e 66 6f 00 00 00 0f 00 00 14 0d |....Info........|
00000030 00 31 1d 0e 00 03 05 08 0a 0d 10 12 14 17 1a 1c |.1..............|
00000040 1f 21 23 27 29 2b 2e 30 33 36 38 3b 3d 40 43 45 |.!#')+.0368;=@ce|
00000050 47 4a 4d 4f 52 54 57 5a 5c 5e 61 63 66 69 6b 6e |GJMORTWZ^acfikn|
00000060 70 73 76 78 7a 7d 80 82 85 87 8a 8d 8f 92 94 96 |psvxz}..........|
00000070 9a 9c 9e a1 a3 a6 a9 ab ad b0 b3 b5 b8 ba bd c0 |................|
00000080 c2 c5 c7 c9 cd cf d1 d4 d6 d9 dc de e1 e3 e6 e9 |................|
00000090 eb ed f0 f3 f5 f8 fa fc 00 00 00 00 4c 61 76 66 |............Lavf|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 24 00 00 00 00 00 00 00 31 1d 0e 4a e4 3d e6 |.$.......1..J.=.|
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000270 00 00 ff fb b0 64 00 0c e4 c5 76 9c 91 06 4d f2 |.....d....v...M.|
00000280 4c 47 73 e0 04 22 8e 0c a1 a4 8e 60 8c de c1 ee |LGs..".........| 00000290 39 10 84 33 0d a1 00 04 63 1e fb 44 41 a0 b0 77 |9..3....c..DA..w| 000002a0 09 37 2f ef 7b d9 09 02 82 88 94 ef 6e c4 23 db |.7/.{.......n.#.| 000002b0 10 20 9c 63 de b4 78 fd ed 88 4a 71 04 08 16 4f |. .c..x...Jq...O| 000002c0 58 c4 d8 86 5d de e3 65 dd eb 3d c0 21 0f cf 59 |X...]..e..=.!..Y| 000002d0 00 82 64 f6 23 18 10 20 98 5d 41 81 04 10 8d 7b |..d.#.. .]A....{| 000002e0 d8 7d 88 dc 82 19 da 23 62 33 c7 31 0b 3d 36 87 |.}.....#b3.1.=6.| 000002f0 bb e4 c9 ee 1e 4e ca 20 4c 9e b9 34 ef 60 56 f8 |.....N. L..4.V.|
00000300 75 05 06 20 a3 6a 12 31 02 04 08 10 0a c0 38 1b |u.. .j.1......8.|
00000310 0d b4 40 48 c2 02 7a bd 86 23 46 dd ae de ce 7e |..@h..z..#F....~|
00000320 19 e7 35 18 5d bf fd cf ff eb f5 d1 96 64 7f e3 |..5.]........d..|
00000330 7e 70 60 1e 40 05 90 c6 c0 a0 46 05 c6 36 43 83 |~p`[email protected].|
00000340 8c 7e 63 77 37 8d 90 20 f9 79 03 31 be 63 63 1f |.~cw7.. .y.1.cc.|
00000350 92 42 7f 3b a1 00 df 07 c3 ca 0c 44 00 fc 4f 97 |.B.;.......D..O.|
00000360 3f 65 85 0b 9f 89 e4 c3 0a 70 80 a7 ca 4a 14 a8 |?e.......p...J..|

encoding test "Encode UTF-16LE with BOM" fails on MacOS

On MacOS the encoding test "Encode UTF-16LE with BOM" fails.

Reason: I assumed inside the test application that "UTF-16" is implicit UTF-16LE with BOM.
Actually it is UTF16 LE or BE with BOM which totally makes sende.
MacOS uses UTF16BE while Linux systems I used for testing used UTF16LE.

On MacOS:

echo "test" | iconv -f UTF-8 -t UTF-16 | hexdump -C
# 00000000  fe ff 00 74 00 65 00 73  00 74 00 0a              |...t.e.s.t..|

On Linux:

echo "test" | iconv -f UTF-8 -t UTF-16 | hexdump -C
# 00000000  ff fe 74 00 65 00 73 00  74 00 0a 00              |..t.e.s.t...|

Solution: The test application needs to check for both possible results.

No frame flags supported

I never saw a frame that had any flags set.
This issue just documents the missing support.

In case it becomes an issue, feel free to leave a comment.

Flags to implement:

  • ID3v2.3.0
    • a - Tag alter preservation
    • b - File alter preservation
    • c - Read only
    • i - Compression
    • j - Encryption
    • k - Grouping identity
  • ID3v2.4.0
    • a - Tag alter preservation
    • b - File alter preservation
    • c - Read only
    • h - Grouping identity
    • k - Compression
    • m - Encryption
    • n - Unsynchronisation
    • p - Data length indicator

No extended header supported

I never saw a file found two files that used the extended ID3 header feature.
This issue is just to keep track of the limitation.

Feel free to comment when this becomes a real issue.

Flags to implement:

  • ID3v2.3.0
    • none - Jump over header
    • x - CRC data present
  • ID3v2.4.0
    • none - Jump over header
    • b - Tag is an update
    • c - CRC data present
    • d - Tag restrictions

Support for TLEN

TLEN contains the length of the audio file.
I already wrote code that can parse mp3 data and calculate its length.
It might be cool to use this knowledge to autogenerate a valid TLEN frame

remove extended header

Most software ignores the header, so it may be useful to get just rid of it.

  • --remove-extheader

Define encoding for frames

Allow the user to define the encoding of the text inside frames. Currently only UTF-16 will be used (as defined by the ID3v2.3.0 standard).
With ID3v2.4.0 UTF-8 is allowed and should be possible to use.
Further more very old player would benefit from ISO8859-1 encoded frames :)

!! it is important to update the version number when a ID3v2.4.0-Only encoding is used!

  • --set-encoding $FRAMEID $ENCODING or --fix-encoding … to only change the encoding byte of the frame, not the text itself (in case the encoding byte is wrong)
  • --encoding $ENCODING to specify the encoding of new created frames
  • --force-encoding $ENCODING to write all tags encoded as specified

get artwork from mp3 file

Currently it is possible to set a new artwork, but not to extract if from the mp3 file an store it in a separate file.

Command line option: id3edit --get-artwork artwork.jpg songfile.mp3

  • Tasks
    • Write function to parse the APIC frame
    • Add command line argument
    • Testing

Store NULL-terminated strings

The standard is not very clear about the strings inside text frames.
I never terminated the strings for ID3v2.3.0 text frames and never got trouble with it.
It might be different with ID3v2.4.0.
One thing is clear: Having NULL as last character is valid.

  • ffmpeg stores all strings in text frames NULL-terminated. It uses the ID3v2.4.0 standard.
  • audacity also terminates the strings. It also uses ID3v2.4.0

--set-track sets wrong track number

In some situations the track number set via --set-track can be wrong.

Requires investigation. One script for my MusicDB test-setup I use id3edit in triggers that bug.

No printhex.h file in repo

Had issues building package. First issue was the clang dep wasn't installed so it threw zlib errors. Now I'm having an issue where printhex.h is not found and I tried installing bsdmainutils to get their hexdump header. Still having an issue.

Output:
Compiling ./crc32.c …
Compiling ./encoding/crc.c …
Compiling ./encoding/size.c …
Compiling ./encoding/text.c …
Compiling ./extheader.c …
Compiling ./frameflags.c …
Compiling ./id3v2.c …
Compiling ./id3v2frame.c …
Compiling ./main.c …
./main.c:12:10: fatal error: 'printhex.h' file not found
#include <printhex.h>
^~~~~~~~~~~~
1 error generated.
Compiling ./rawfile.c …
/usr/bin/ld: cannot find -lprinthex: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

No header flags supported

Flags to implement:

  • ID3v2.3.0
    • a - Unsynchronisation
    • b - Extended header (read/write)
    • c - Experimental indicator
  • ID3v2.4.0
    • a - Unsynchronisation
    • b - Extended header (read/write)
    • c - Experimental indicator
    • d - Footer present

Error when --strip is applied to an already stripped mp3 file

Error when --strip is applied to an already stripped mp3 file

Reproduce:

base64 --decode > ./test.mp3 << EOF
//uUZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAE4ADj4+Pj
4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj////////////////
//////////////////////////////////////////////////8AAABQTEFNRTMuMTAwBLkAAAAA
AAAAADUgJAaQjQAB4AAABOClHWotAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vURAAAAioAXeAAAAA5
wAvMAAAAC4wteee9gQGnBW7495govjctbLXcgH1CAEATB8/E4IAg6DgIHMEMTg4CAIBjEAIO6wfD
HrD+D+CAJv/g4CAIAgGAfB8Hz//+CAIZQMfD//lwfB8H9HLb40kq8nBOD59YPg+XB8QAgciQEKwf
BDh7wfB8H/xACAIHMu/E4P//qBAMYIBj/Wa9Z/Ln8QA+H97e/M6SJuONIhFC3AZgMwmwuQ4lUdoc
RpE6A8IxOLX5rJjUFQVOwVBU6sFQVDTpUFQVBoGvBUFYKgqGuoGj0RB2oGga5UFQVBY9+IgZDXLH
vgqCuCoK/4iBk7/9W71Vv1JmlL0l1COiGmSkAhxpE6IMW0FSOEfs23NBSRLSoKgrBUFQ1BUFQ0oF
TpYGgZOqBoGmwVBUFga+oGgZBVwiBoFYieoGgaPSwdwWBoO/1gqCsqCuDLlA0DVQNB2WBoGgaBU7
/1gqCypMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqq//sUZMsP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
EOF

id3edit --strip ./test.mp3

Error:

ID: '' (FFFB94) not supported!
ID3V2_Open failed with error -2!

id3edit should just exit with error code 0 because the file is in a state the user wants it to be.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.