Bug #1891
closedПроблемы с автоопределением кодировок тегов локальных файлов.
100%
Description
В общем, не работает.
Эта штука работает с потоками, как и показано в #1250 и #1271 , но с локальными файлами дело обстоит иначе.
Должна работать. но не работает.
Воспроизвести можно так:
0. Включить в настройках автоопределение кодировки. Выбрать китайский язык.
1. Загрузить в плейлист прилагаемый файл, предварительно распаковав его.
По идее, всё это должно перекодировать теги по схеме utf8 → cp1252 → libguess → utf8
Вот пример того, как это должно работать:
% GST_DEBUG=*id3*:5 gst-launch-0.10 filesrc location="/tmp/ヒロイニシティ/02 雪に願いを.mp3" ! id3demux ! fakesink -t >! /tmp/in здесь можно обратить внимание на "Read 1 fields from Text ID frame of size ## with encoding 0. " отсюда растут ноги cp1252 % cat /tmp/in | iconv -f utf-8 -t cp1252 -c > /tmp/in1 при этом, без указания ключа игнорирования ошибок '-с', iconv вывалится с ошибкой на illegal input sequence at position 215 % guessconv -l chinese -i /tmp/in1 -o /tmp/in2 Input file: /tmp/in1 Output file: /tmp/in2 Input encoding: GB2312 Output encoding: UTF-8 % cat /tmp/in1 | iconv -f GB2312 -t utf8 -c Setting pipeline to PAUSED ... Pipeline is PREROLLING ... FOUND TAG : found by element "id3demux0". album artist: すこっぷ album: ヒロイニシティ title: 雪に瞍い track number: 2 image: buffer of 103492 bytes, type: image/jpeg, width=(int)500, height=(int)500, sof-marker=(int)0, image-type=(GstTagImageType)GST_TAG_IMAGE_TYPE_UNDEFINED ID3v2 frame: buffer of 13 bytes, type: application/x-gst-id3v2-tcmp-frame, version=(int)3 container format: ID3 tag Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 48213465 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
Причиной того, что этого не происходит, скорее всего, являются как раз те самые проигнорированные ошибки рекодирования.
Ибо, если рекодировать напрямую, то корректным результатом должно стать:
% id3info "/tmp/ヒロイニシティ/02 雪に願いを.mp3" | grep '===' | rcc-recode -l zh === TPE2 (Band/orchestra/accompaniment): すこっぷ === TALB (Album/Movie/Show title): ヒロイニシティ === TIT2 (Title/songname/content description): 雪にいを === TRCK (Track number/Position in set): 2 === APIC (Attached picture): ()[, 0]: image/jpeg, 103492 bytes === TCMP (): frame
Здесь следует обратить внимание на различие:
title: 雪に瞍い === TIT2 (Title/songname/content description): 雪にいを
Выводы.
1. Ожидать хорошего функционирования перекодировки тегов, при работе с ними через gstreamer, было бы ошибкой. Gstreamer следуя спецификациям стандарта, занимается рекодингом опираясь на соответствующие заголовки ID3 читая теги и переменные среды окружения — их выдавая.
2. Несмотря на продвинутость libguess, эта билиотека часто путает схожие кодировки, что может привести к ошибкам рекодирования. проект librcc, также используя libguess делает более правильные предположени, основываясь на своих правилах.
Что можно попробовать сделать:
1. Допускать игнорирование ошибок рекодинга // Очень сомнительная затея
2. Добавить в настройку возможность указания конкретной кодировки. их соответствие языкам можно взять
из приложенного файла (в дальнейшем его будет не сложно дополнить).
Files