تجريد التحويل بين علامات id3 وعلامات m4a وعلامات flac

StackOverflow https://stackoverflow.com/questions/697776

  •  22-08-2019
  •  | 
  •  

سؤال

أنا أبحث عن مورد في لغة python أو bash يجعل من السهل أخذ ملف mp3 X وملف m4a Y، على سبيل المثال، وقول "انسخ علامات X إلى Y".

تعد وحدة "المطفر" في بايثون رائعة لمعالجة العلامات بشكل عام، ولكن لا يوجد مفهوم مجرد لـ "مجال الفنان" يشمل أنواعًا مختلفة من العلامات؛أريد مكتبة تتعامل مع جميع الأجزاء المزعجة وتعرف معادلات أسماء الحقول.بالنسبة للأشياء التي لا تستطيع جميع أنظمة العلامات التعبير عنها، فأنا أوافق على فقدان المعلومات أو تخمينها بشكل أفضل.

(حالة الاستخدام:أقوم بتشفير الملفات غير المفقودة إلى mp3، ثم استخدم ملفات mp3 للاستماع.كل شهر أو نحو ذلك، أريد أن أكون قادرًا على تحديث الملفات "الرئيسية" غير المفقودة بأي تغييرات أجريتها على ملفات mp3.لقد سئمت من إزعاج أصابع قدمي بشأن اختلافات التنفيذ بين التنسيقات.)

هل كانت مفيدة؟

المحلول

كنت بحاجة إلى هذا الشيء بالتحديد، وأنا أيضًا أدركت بسرعة أن المغير ليس فكرة بعيدة بما يكفي للقيام بهذا النوع من الأشياء.لحسن الحظ، كان مؤلفو المطفرة في حاجة إليها لمشغل الوسائط الخاص بهم QuodLibet.

اضطررت إلى البحث في مصدر QuodLibet لمعرفة كيفية استخدامه، ولكن بمجرد أن فهمته، كتبت أداة مساعدة تسمى تسلسل والذي يُقصد به أن يكون سطر أوامر مكافئًا لـ ExFalso (مكون وضع العلامات في QuodLibet).يستخدم آلية التجريد هذه ويوفر بعض التجريد والوظائف الإضافية.

إذا أردت التأكد من المصدر وهنا رابط لأحدث tarball.الحزمة هي في الواقع مجموعة من ثلاثة نصوص برمجية لسطر الأوامر ووحدة للتواصل مع QL.إذا كنت ترغب في تثبيت كل شيء، يمكنك استخدام:

easy_install QLCLI

هناك شيء واحد يجب أخذه في الاعتبار بشأن exfalso/quodlibet (وبالتالي sequitur) وهو أنهم يقومون بالفعل بتنفيذ البيانات الوصفية الصوتية بشكل صحيح، مما يعني أن جميع العلامات تدعم قيمًا متعددة (ما لم يمنع نوع الملف ذلك، وهو ما لا يوجد الكثير مما يفعله).لذلك، القيام بشيء مثل:

print qllib.AudioFile('foo.mp3')['artist']

لن يتم إخراج سلسلة واحدة، ولكن سيتم إخراج قائمة من السلاسل مثل:

[u'The First Artist', u'The Second Artist']

ستكون الطريقة التي قد تستخدمها لنسخ العلامات شيئًا مثل:

import os.path
import qllib  # this is the module that comes with QLCLI

def update_tags(mp3_fn, flac_fn):
    mp3 = qllib.AudioFile(mp3_fn)
    flac = qllib.AudioFile(flac_fn)
    # you can iterate over the tag names
    # they will be the same for all file types
    for tag_name in mp3:
        flac[tag_name] = mp3[tag_name]
    flac.write()

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']

for mp3_fn in mp3_filenames:
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
        update_tags(mp3_fn, flac_fn)

نصائح أخرى

ولدي النصي باش أن تفعل ذلك تماما، atwat-بلغة . وهو يدعم فلك، MP3، OGG و MP4 الملفات.

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

وأنا أعلم الانتهاء مشروعك بالفعل، ولكن شخص الذي يجد هذه الصفحة من خلال محرك البحث قد تجد أنه من المفيد.

وإليك بعض رمز المثال، السيناريو الذي كتبته لنسخ علامات بين الملفات باستخدام الطبقات السجن Libet في شكل الموسيقى (وليس في المغير!). يهرب ذلك، لا مجرد copytags.py src1 dest1 src2 dest2 src3 dest3، وذلك سيتم نسخ العلامات في sec1 إلى dest1 (بعد حذف أية علامات القائمة على dest1!)، وهلم جرا. ملاحظة القائمة السوداء، التي يجب أن يعدل ل تفضيل الخاص بك. سوف القائمة السوداء ليس فقط منع بعض علامات عملية نسخ، فإنه سيتم منعهم أيضا من أن مضروب في الملف الوجهة.

لتكون واضحة، علامات الشكل الملحد السجن Libet ليست سمة من سمات المغير. ويتم تنفيذ ذلك في أعلى المغير. حتى إذا كنت تريد وضع علامات الشكل الملحد، تحتاج إلى استخدام quodlibet.formats.MusicFile لفتح الملفات بدلا من mutagen.File.

ويمكن الآن العثور كود هنا: https://github.com/DarwinAwardWinner/copytags

إذا كنت تريد أيضا أن تفعل الترميز في نفس الوقت، استخدم هذا: https://github.com/ DarwinAwardWinner / transfercoder

وكان واحد من التفصيل حاسما بالنسبة لي أن الطبقات الموسيقى شكل السجن Libet ل نتوقع التكوين QL ليتم تحميلها، وبالتالي فإن خط config.init في بلدي النصي. دون ذلك، والحصول على جميع أنواع الأخطاء عند تحميل أو حفظ الملفات.

ولقد جربت هذا البرنامج النصي للنسخ بين فلك، سطين، وملفات MP3، مع به "القياسية"، فضلا عن علامات التعسفي. وقد عملت تماما حتى الآن.

وأما السبب <م> أنني لم تستخدم QLLib، إلا أنها لا تعمل بالنسبة لي. وأظن أنه كان الحصول على نفس الأخطاء المتعلقة التكوين كما كنت، ولكن تم تجاهل بصمت لهم وعدم إرسال علامات ببساطة.

ويمكنك مجرد كتابة التطبيق بسيطة مع تعيين كل اسم العلامة في كل شكل إلى نوع "علامة مجردة"، ومن ثم من السهل لتحويل من واحدة إلى أخرى. لم يكن لديك حتى لمعرفة كل الأنواع المتاحة - فقط تلك التي كنت مهتما في

ويبدو لي وكأنه نوع المشروع نهاية الأسبوع من استثمار الوقت، وربما أقل من ذلك. المتعة، وأنا لن تمانع في اتخاذ نظرة خاطفة على تنفيذ وحتى استخدامه - إذا كنت لن تمانع إطلاقه بالطبع :-)

وهناك أيضا tagpy، والذي يبدو للعمل بشكل جيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top