4

I have some mp3 files with Cyrillic chars on file names and also on their tags.

I'm using audacious to play them. See the file info below:

enter image description here

Is it possible to change some encoding to show the contents correctly?

Âûñîêî should be Высоко, I guess.

12
  • Are thes ID3v1 or ID3v2 tags? If these are v1 then there is no encoding information available and you can only guess.
    – Anthon
    Feb 9, 2014 at 15:26
  • @Anthon, I don't know. How to discover the version?
    – Sigur
    Feb 9, 2014 at 15:37
  • 2
    Some commandline tools will tell you. e.g. eyeD3. It can do some tricks with encoding, but I am not sure if it can do cyrillic ID3v1 to UTF-8 ID3v2, I think not because there seems no way to specify the input encoding.
    – Anthon
    Feb 9, 2014 at 15:39
  • Can you share one of these files, or are they copyrighted?
    – Anthon
    Feb 9, 2014 at 15:42
  • I installed eyed3 and the output is ID3 v2.3.
    – Sigur
    Feb 9, 2014 at 15:45

3 Answers 3

5

Alternatively, you can use the mid3iconv utility from the python-mutagen package:

$ mid3iconv
Usage: mid3iconv [OPTION] [FILE]...

Mutagen-based replacement the id3iconv utility, which converts ID3 tags from
legacy encodings to Unicode and stores them using the ID3v2 format.

Options:
...
  -e ENCODING, --encoding=ENCODING
...
  --force-v1            Use an ID3v1 tag even if an ID3v2 tag is present
  --remove-v1           Remove v1 tag after processing the files

So, basically, running

mid3iconv -eCP1251 --remove-v1

will yield exactly the result you're looking for.

2
  • 1
    You may want also to --dry-run and display its result with --debug. And for f in **/*.mp3; do mid3conv --debug -eXXX $f; done after you make sure that all subdirectories are encoded in the same way. Aug 23, 2020 at 2:52
  • 1
    Or with find: find . -name '*.mp3' | while read path; do mid3iconv -eCP1251 --remove-v1 "$path"; done
    – Adobe
    Jan 24, 2023 at 19:06
4

I don't have any Cyrillic characters in my music collection but I can do Greek with no problem using the latest version of eyed3 installed by sudo pip install --upgrade eyed3:

 $ eyeD3 Μπεστ\ οφ/Τζίμης\ Πανούσης\ -\ Κάγκελα\ Παντού.mp3 
Τζίμης Πανούσης - Κάγκελα Παντού.mp3    [ 3.43 MB ]
-------------------------------------------------------------------------------
Time: 03:45 MPEG1, Layer III    [ 128 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Tzimis Panousis-Kagkela Pantou.mp3
artist: Tzimis Panousis
album: Unknown

In the example above, I have a directory (album name) called Μπεστ οφ which contains a song called Κάγκελα Παντού by Τζίμης Πανούσης. As you can see in the id3tool output above, the tags are not in Greek. Let's fix that:

$ eyeD3 -A "Μπεστ οφ" \
        -t "Κάγκελα Παντού" \
        -a "Τζίμης Πανούσης" \
        "./Μπεστ οφ/Τζίμης Πανούσης - Κάγκελα Παντού.mp3"

That correctly set the tags using the Greek alphabet:

$ eyeD3 Μπεστ\ οφ/Τζίμης\ Πανούσης\ -\ Κάγκελα\ Παντού.mp3 
Τζίμης Πανούσης - Κάγκελα Παντού.mp3    [ 3.43 MB ]
-------------------------------------------------------------------------------
Time: 03:45 MPEG1, Layer III    [ 128 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Κάγκελα Παντού
artist: Τζίμης Πανούσης
album: Μπεστ οφ

OK, but since the information is encoded in the name of the file, this can be automated. In the example above, the file name has this format:

Album/Artist - Title.mp3

So, we can parse and add the tags for all files with a little shell magic:

find . -type f -name "*mp3" | while read file; do 
    album="$(basename "$(dirname "$file")")"; 
    filename="$(basename "$file")"; 
    artist=${filename%%-*}; 
    title=${filename##*-}; 
    title=${title%%.mp3}; 
    eyeD3 -A "$album" -t "$title" -a "$artist" "$file"; 
done

After running this command, all files will have had their id3 tags modified:

  enter image description here

6
  • 1
    Please note that as Sigur commented, it might be that older versions of eyeD3 do not work correctly. I would also explicitly set --to-v2.4 to be sure the tag version is updated.
    – Anthon
    Feb 9, 2014 at 17:44
  • The script worked so nice! You can see here dl.dropboxusercontent.com/u/42709342/03.png Thanks so much.
    – Sigur
    Feb 9, 2014 at 17:45
  • @terdon, OK. Now I have to adapt the script. Since my file name is Юлия Савичева - 03 - Отпусти меня.mp3 the title tag is starting with empty space. I don't know why. Maybe because the number. Also the track number does not appear. I don't care but since it is contained in file name I guess that it should be used somewhere in the tag.
    – Sigur
    Feb 9, 2014 at 17:54
  • @Sigur this is just an example, I recommend you post a new question explaining the format of your file names and I'll give you a more specific script.
    – terdon
    Feb 9, 2014 at 18:09
  • @terdon, done! unix.stackexchange.com/q/114413/19195
    – Sigur
    Feb 9, 2014 at 18:30
3

I could succesfully update an MP3 file using:

eyeD3 -a "Ю" abc.mp3

This was done with eyeD3 0.7.4-beta as installed using pip from PyPI:

pip install eyeD3

Using that eyeD3 you could use a script to extract the artist and title from the MP3's file path and set them as ID3v2 2.4 tags with eyeD3.

9
  • Can you confirm that the info is displayed correctly in audacious or vlc or any other GUI app? Following the procedure in my answer it works fine on the CLI but GUI apps seem to ignore it and take the info from somewhere else.
    – terdon
    Feb 9, 2014 at 16:51
  • I installed eyeD3 0.7.4-beta (C) Copyright 2002-2013 Travis Shirk from the source. I rename my file to abc.mp3 (to remove all Cyrillic chars from file name) but eyeD3 -a "Ю" abc.mp3 produces errors. After some info I can find Writing ID3 version v2.3 Uncaught exception: 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256).
    – Sigur
    Feb 9, 2014 at 16:55
  • @terdon vlc, audacious both display fine. You might need to specify --to-v2.4 if you start with a v2.3 file to begin with.
    – Anthon
    Feb 9, 2014 at 16:58
  • It worked! eyeD3 --encoding utf8 -a "Ю" abc.mp3 had success!
    – Sigur
    Feb 9, 2014 at 17:10
  • Thanks, Anthon, I think id3tool only works with v1. @Sigur I've changed my answer to use eyeD3 as suggested by Anthon.
    – terdon
    Feb 9, 2014 at 17:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .