মূল সমস্যাটি সমাধান করতে আমি দ্রুত একসাথে হ্যাক করেছি এখানে একটি পাইথন স্ক্রিপ্ট রয়েছে: একটি সংগীত গ্রন্থাগারের একটি সংকুচিত অনুলিপি রাখুন। স্ক্রিপ্টটি .m4a ফাইলগুলিকে (এএলএসি হিসাবে ধরে নেওয়া হয়) এএসি ফরম্যাটে রূপান্তর করবে, যদি না এএসি ফাইল ইতিমধ্যে উপস্থিত থাকে এবং এটি এএলএসি ফাইলের চেয়ে নতুন না হয়। গ্রন্থাগারের এমপি 3 ফাইলগুলি লিঙ্কযুক্ত হবে, যেহেতু তারা ইতিমধ্যে সংকুচিত হয়েছে।
কেবল সাবধান থাকুন যে স্ক্রিপ্টটি বাতিল করা ( ctrl-c) আধা-রূপান্তরিত ফাইলের পিছনে ফেলে দেবে।
আমি মূলত এটি হ্যান্ডেল করার জন্য একটি মেকফিলও লিখতে চেয়েছিলাম তবে যেহেতু এটি ফাইলের নামগুলিতে ফাঁকা স্থানগুলি পরিচালনা করতে পারে না (স্বীকৃত উত্তর দেখুন) এবং যেহেতু ব্যাশ স্ক্রিপ্টটি লিখতে আমার ব্যথার জগতে রাখার গ্যারান্টিযুক্ত তাই পাইথন এটি। এটি মোটামুটি সোজা এবং সংক্ষিপ্ত এবং এর ফলে আপনার প্রয়োজনগুলিতে টুইঙ্ক করা সহজ হওয়া উচিত।
from __future__ import print_function
import glob
import os
import subprocess
UNCOMPRESSED_DIR = 'Music'
COMPRESSED = 'compressed_'
UNCOMPRESSED_EXTS = ('m4a', ) # files to convert to lossy format
LINK_EXTS = ('mp3', ) # files to link instead of convert
for root, dirs, files in os.walk(UNCOMPRESSED_DIR):
out_root = COMPRESSED + root
if not os.path.exists(out_root):
os.mkdir(out_root)
for file in files:
file_path = os.path.join(root, file)
file_root, ext = os.path.splitext(file_path)
if ext[1:] in LINK_EXTS:
if not os.path.exists(COMPRESSED + file_path):
print('Linking {}'.format(file_path))
link_source = os.path.relpath(file_path, out_root)
os.symlink(link_source, COMPRESSED + file_path)
continue
if ext[1:] not in UNCOMPRESSED_EXTS:
print('Skipping {}'.format(file_path))
continue
out_file_path = COMPRESSED + file_path
if (os.path.exists(out_file_path)
and os.path.getctime(out_file_path) > os.path.getctime(file_path)):
print('Up to date: {}'.format(file_path))
continue
print('Converting {}'.format(file_path))
subprocess.call(['ffmpeg', '-y', '-i', file_path,
'-c:a', 'libfdk_aac', '-vbr', '4',
out_file_path])
অবশ্যই, সমান্তরালভাবে এনকোডিং সম্পাদন করতে এটি বাড়ানো যেতে পারে। এটি পাঠকের অনুশীলন হিসাবে ছেড়ে গেছে ;-)