Project

General

Profile

Bug #1891

Проблемы с автоопределением кодировок тегов локальных файлов.

Added by Mellon over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Low
Assignee:
Category:
Plugins: LMP
Target version:
Start date:
03/01/2015
Due date:
% Done:

100%

Estimated time:
7.00 h
Reported in:
master

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

rcc.xml (10.2 KB) rcc.xml Mellon, 03/02/2015 01:13 AM
song.tar.xz (8.56 MB) song.tar.xz Mellon, 03/02/2015 01:13 AM

Also available in: Atom PDF