Para um único arquivo, a única opção (*) que eu poderia fazer para trabalhar foi esta:
id3v2 -a "$(mp3info -p "%a" foo.mp3|iconv -f windows-1256 -t utf-8)"\
-A "$(mp3info -p "%l" foo.mp3|iconv -f windows-1256 -t utf-8)"\
-t "$(mp3info -p "%t" foo.mp3|iconv -f windows-1256 -t utf-8)" foo.mp3
para um único arquivo chamado foo.mp3
. Isso resultou em tags ID3v1 (ou 1.1) no windows-1256 sendo convertidas em tags v2.3 em utf-8. As seguintes advertências se aplicam:
- Se suas tags não forem Windows-1256 (por exemplo, elas são, em vez disso, ISO-8859-6 ou não são arábicas), o comando irá manobrá-las irrecuperavelmente, sem avisar
- Eu só testei com um arquivo, que não tinha informações de álbuns, então talvez não funcione para todos os casos
- Pode ou não converter outras tags, como número de faixa, ano, gênero etc.
- Eu não tenho o Windows, então não tenho idéia se os arquivos resultantes funcionam lá
Se funcionar, coloque o comando em um arquivo, chame-o de "retag.sh", substitua foo.mp3 por "$ 1" (incluindo as aspas). Em seguida, faça uma cópia de todos os mp3s relevantes cp -a Music/mp3 Music/retagged-mp3
e substitua por abandonar: find Music/retagged-mp3 -type f -print0|xargs -0 retag.sh
. Uma vez verificados que eles mostram ok e jogam ok e nenhum foi perdido na conversão, substitua os mp3 originais por aqueles com novo nome.
(*) Eu tentei lltag e id3v2 para ler as tags na linha de comando, mas isso não funcionou. puddletag, exfalso e easytag não mostrariam as tags, e o tagtool mostraria elas assumindo a codificação ISO-8859-1.