วันพุธที่ 30 พฤษภาคม พ.ศ. 2550

ปัญหา ID3 tag ภาษาไทย

ปัญหาหนึ่งของการใช้ระบบปฏิบัติการลินุกซ์ที่ใช้เอ็นโค้ดดิ้งแบบยูนิโค้ด เช่นในดิสโตรทั่วไปในปัจจุบันก็คือ การถอดรหัสข้อมูลใน ID3 tag ในแฟ้ม mp3 โดยปัญหาคือ ซอฟต์แวร์ (เช่น totem, banshee ซึ่งล้วนแล้วแต่ใช้ gstreamer) อ่านข้อมูล ID3 tag ออกมาโดยเข้าใจว่าข้อมูลในนั้นเข้ารหัสด้วย ISO-8859-1 แล้วแปลงมาเป็น UTF-8 เพื่อแสดงผล ซึ่งทำให้แสดงเป็นรหัสที่ไม่ใช่ภาษาไทย

ปัญหานี้ไม่พบในแฟ้มประเภท ogg และ mp4 เนื่องจาก tag ในแฟ้ม ogg และ mp4 เป็นยูนิโค้ดอยู่แล้ว เพราะเกิดในยุคใหม่ ในขณะที่แฟ้ม mp3 เกิดนานแล้ว แรกๆ เลยต้องเลี่ยง ไปใช้ซอฟต์แวร์ที่กำหนดให้ระบุเอ็นโค้ดดิ้งได้ เช่น beep media player ไปก่อน

อย่างไรก็ตาม ถ้าจะให้แก้ปัญหาได้สมบูรณ์ น่าจะแก้ให้ gstreamer ถอดรหัส ID3 ภาษาไทยได้ถูกต้องมากกว่า เนื่องจากต่อไปจะมีการใช้ gstreamer ในการพัฒนาซอฟต์แวร์มากขึ้น แต่ไล่ไปมาปัญหากลับไม่ใช่ที่ gstreamer คือ gstreamer อ่านข้อมูลออกมาตามมาตรฐานถูกแล้ว ปัญหาคือข้อมูล ID3 ในแฟ้ม mp3 เองมากกว่า ในการแก้ปัญหาครั้งแรกสุด จึงพยายามแปลงข้อมูลใน ID3 ให้เป็น UTF-8 โดยใช้เครื่องมือคือ id3tool กับ iconv มาเขียนเป็น shell script แต่ก็ยังไม่ได้ผล เพราะซอฟต์แวร์ก็ยังอ่านออกมาเป็น ISO-8859-1 อยู่ดี แต่เมื่อใช้ banshee หรือ totem แก้ข้อมูล ID3 ให้เป็นภาษาไทย กลับใช้ได้ และดูเหมือนจะเป็น UTF-8 ด้วย ซึ่งแปลว่ามีอะไรบางอย่างที่บอก gstreamer ได้ว่า ID3 นั้น ใช้เอ็นโค้ดดิ้งอะไร

ได้ไปค้นข้อมูลดู พบว่าใน ID3 ถ้าไม่ระบุอะไรเลยจะใช้ ISO-8859-1 เสมอ แต่ดูเหมือนจะมีวิธีการระบุเอ็นโค้ดดิ้งได้ด้วย แต่เครื่องมือคือ id3tool ไม่มีวิธีระบุเอ็นโค้ดดิ้ง และจะเขียนโค้ดเอง ก็ท่าจะไปกันใหญ่ ลองค้นดูเลยไปพบบล็อกนี้ http://linuxtip.blogspot.com/2006/08/id3-tag.html ซึ่งเค้าเขียนไว้ตั้งนานแล้ว ถ้าค้นก่อน คงสบายไปตั้งแต่แรก ต้องขอบคุณเจ้าของบล็อกคือคุณสมเจตไว้นะที่นี้ โดยสรุปคือ มีเครื่องมืออีกตัวคือ EasyTAG เป็น GUI ด้วย ทำตามในบล็อกง่ายๆ ไม่กี่ขั้นตอน ก็จบ แถมยังมีลูกเล่นอีกหลายๆ อย่างเช่นการ fill tags อัตโนมัติด้วยชื่อแฟ้ม ซึ่งใช้บ่อยมาก

มีที่ขอเสริมวิธีการในบล็อกดังกล่าวนิดเดียวคือ

  1. ตรงการตั้งค่าเอ็นโค้ดดิ้ง ใน preferences ของคุณสมเจตอ่านเป็น TIS-620 เขียนกลับเป็น UTF-8 แต่ผมใช้การเขียนกลับเป็น TIS-620 เหมือนเดิม ซึ่งทดสอบแล้วพบว่าสามารถอ่านได้ถูกต้องทั้งใน App ใหม่ๆ เช่น totem, banshee และ App รุ่นเก่าๆ เช่น XMMS และน่าจะรวมถึงซอฟต์แวร์บน Windows ด้วย (ไม่ได้ทดสอบ)

  2. การแก้ไขค่าใน ID3 หลังจากเปลี่ยนค่าใน preferences แล้ว ถ้า refresh เฉยๆ จะพบว่า EasyTAG จะแก้เพียงบางแฟ้ม ผมพบว่าสามารถ force ให้บันทึกใหม่ทั้งหมดได้ โดยเลือกทุกแฟ้ม (กด Ctrl-A) แล้วสั่ง force save (กด Ctrl-Shift-S) ซึ่งทำให้ทุกแฟ้มถูกบันทึก ID3 tag แบบที่มีการระบุเอ็นโค้ดดิ้งทั้งหมด


ตอนนี้ก็มีความสุขขึ้นครับ เพราะสามารถใช้ totem เล่นเพลง mp3 และเห็นชื่อเพลงภาษาไทยถูกต้องแล้วครับ

1 ความคิดเห็น :

  1. Winamp นี่มันเล่นภาาไทยได้นี่ ใช้แต่อันนี้อ่ะ

    ตอบกลับลบ