ساخت اسکریپت برای تبدیل فایلهای صوتی با پایتون
در دنیای امروز، فایلهای صوتی در فرمتهای مختلفی وجود دارند و گاهی نیاز به تبدیل آنها از یک فرمت به فرمت دیگر پیش میآید. این تبدیل میتواند به دلایل مختلفی مانند سازگاری با دستگاههای مختلف، کاهش حجم فایل، یا استفاده در نرمافزارهای خاص انجام شود. پایتون، با کتابخانههای قدرتمند خود، ابزاری عالی برای اتوماسیون این فرآیند است. این مقاله به آموزش ساخت یک اسکریپت پایتون برای تبدیل فایلهای صوتی میپردازد و در دسته بندی ‘اتوماسیون و اسکریپتنویسی’ قرار میگیرد.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:
- پایتون نصب شده باشد (نسخه 3.6 یا بالاتر توصیه میشود).
- کتابخانه
pydubنصب شده باشد. برای نصب آن از دستورpip install pydubدر خط فرمان استفاده کنید. ffmpegیاlibavنصب شده باشد. این برنامهها برای پردازش فایلهای صوتی توسطpydubضروری هستند. نحوه نصب آنها بسته به سیستم عامل شما متفاوت است.
مقدمهای بر کتابخانه Pydub
pydub یک کتابخانه پایتون است که امکان دستکاری فایلهای صوتی را به سادگی فراهم میکند. این کتابخانه به شما اجازه میدهد تا فایلهای صوتی را بارگیری کنید، آنها را ویرایش کنید (مانند برش، ترکیب، تغییر حجم صدا)، و آنها را به فرمتهای مختلف تبدیل کنید. pydub به طور مستقیم فایلهای صوتی را پردازش نمیکند، بلکه از برنامههای خارجی مانند ffmpeg یا libav برای این کار استفاده میکند.
ساخت اسکریپت پایه تبدیل فایل صوتی
در این بخش، یک اسکریپت پایه برای تبدیل یک فایل صوتی از فرمت MP3 به فرمت WAV ایجاد میکنیم.
from pydub import AudioSegment
def convert_audio(input_file, output_file):
"""
فایل صوتی را از یک فرمت به فرمت دیگر تبدیل میکند.
"""
try:
audio = AudioSegment.from_mp3(input_file)
audio.export(output_file, format="wav")
print(f"فایل {input_file} با موفقیت به {output_file} تبدیل شد.")
except Exception as e:
print(f"خطا در تبدیل فایل: {e}")
if __name__ == "__main__":
input_file = "input.mp3" # نام فایل ورودی
output_file = "output.wav" # نام فایل خروجی
convert_audio(input_file, output_file)
در این کد:
AudioSegment.from_mp3(input_file)فایل MP3 را بارگیری میکند.audio.export(output_file, format="wav")فایل صوتی را به فرمت WAV تبدیل کرده و در فایل خروجی ذخیره میکند.- بخش
try...exceptبرای مدیریت خطاها استفاده شده است. - بخش
if __name__ == "__main__":تضمین میکند که کد فقط زمانی اجرا شود که اسکریپت به طور مستقیم اجرا شود، نه زمانی که به عنوان یک ماژول وارد شود.
تعمیم اسکریپت برای پشتیبانی از فرمتهای مختلف
اسکریپت بالا فقط از تبدیل MP3 به WAV پشتیبانی میکند. برای پشتیبانی از فرمتهای مختلف، میتوانیم کد را به صورت زیر تعمیم دهیم:
from pydub import AudioSegment
def convert_audio(input_file, output_file, output_format):
"""
فایل صوتی را از یک فرمت به فرمت دیگر تبدیل میکند.
"""
try:
if input_file.endswith(".mp3"):
audio = AudioSegment.from_mp3(input_file)
elif input_file.endswith(".wav"):
audio = AudioSegment.from_wav(input_file)
elif input_file.endswith(".ogg"):
audio = AudioSegment.from_ogg(input_file)
else:
print("فرمت فایل ورودی پشتیبانی نمیشود.")
return
audio.export(output_file, format=output_format)
print(f"فایل {input_file} با موفقیت به {output_file} تبدیل شد.")
except Exception as e:
print(f"خطا در تبدیل فایل: {e}")
if __name__ == "__main__":
input_file = "input.mp3" # نام فایل ورودی
output_file = "output.wav" # نام فایل خروجی
output_format = "wav" # فرمت فایل خروجی
convert_audio(input_file, output_file, output_format)
در این نسخه:
- از
input_file.endswith(".mp3")و سایر توابع مشابه برای تشخیص فرمت فایل ورودی استفاده میکنیم. - بر اساس فرمت فایل ورودی، از تابع مناسب برای بارگیری فایل استفاده میکنیم (
from_mp3،from_wav،from_ogg). - فرمت فایل خروجی را به عنوان یک آرگومان به تابع
convert_audioارسال میکنیم.
اضافه کردن قابلیت پردازش دستهای (Batch Processing)
برای تبدیل چندین فایل صوتی به طور همزمان، میتوانیم قابلیت پردازش دستهای را به اسکریپت اضافه کنیم.
from pydub import AudioSegment
import os
def convert_audio(input_file, output_file, output_format):
"""
فایل صوتی را از یک فرمت به فرمت دیگر تبدیل میکند.
"""
try:
if input_file.endswith(".mp3"):
audio = AudioSegment.from_mp3(input_file)
elif input_file.endswith(".wav"):
audio = AudioSegment.from_wav(input_file)
elif input_file.endswith(".ogg"):
audio = AudioSegment.from_ogg(input_file)
else:
print("فرمت فایل ورودی پشتیبانی نمیشود.")
return
audio.export(output_file, format=output_format)
print(f"فایل {input_file} با موفقیت به {output_file} تبدیل شد.")
except Exception as e:
print(f"خطا در تبدیل فایل: {e}")
def batch_convert_audio(input_directory, output_directory, output_format):
"""
تمام فایلهای صوتی در یک دایرکتوری را به فرمت مشخص تبدیل میکند.
"""
for filename in os.listdir(input_directory):
if filename.endswith((".mp3", ".wav", ".ogg")):
input_file = os.path.join(input_directory, filename)
output_file = os.path.join(output_directory, filename.replace(os.path.splitext(filename)[1], "." + output_format))
convert_audio(input_file, output_file, output_format)
if __name__ == "__main__":
input_directory = "input_files" # دایرکتوری فایلهای ورودی
output_directory = "output_files" # دایرکتوری فایلهای خروجی
output_format = "wav" # فرمت فایل خروجی
# ایجاد دایرکتوری خروجی اگر وجود نداشته باشد
if not os.path.exists(output_directory):
os.makedirs(output_directory)
batch_convert_audio(input_directory, output_directory, output_format)
در این نسخه:
- تابع
batch_convert_audioتمام فایلهای صوتی در یک دایرکتوری را پردازش میکند. - از
os.listdirبرای لیست کردن فایلهای موجود در دایرکتوری ورودی استفاده میکنیم. - از
os.path.joinبرای ساخت مسیر کامل فایل ورودی و خروجی استفاده میکنیم. - از
filename.replaceبرای تغییر پسوند فایل خروجی استفاده میکنیم. - از
os.makedirsبرای ایجاد دایرکتوری خروجی در صورت عدم وجود استفاده میکنیم.
بهبود مدیریت خطاها
مدیریت خطاها در اسکریپتهای اتوماسیون بسیار مهم است. میتوانیم مدیریت خطاها را با ثبت خطاها در یک فایل لاگ بهبود دهیم.
import logging
from pydub import AudioSegment
import os
# تنظیمات لاگ
logging.basicConfig(filename='conversion.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
def convert_audio(input_file, output_file, output_format):
"""
فایل صوتی را از یک فرمت به فرمت دیگر تبدیل میکند.
"""
try:
if input_file.endswith(".mp3"):
audio = AudioSegment.from_mp3(input_file)
elif input_file.endswith(".wav"):
audio = AudioSegment.from_wav(input_file)
elif input_file.endswith(".ogg"):
audio = AudioSegment.from_ogg(input_file)
else:
logging.error(f"فرمت فایل ورودی پشتیبانی نمیشود: {input_file}")
print("فرمت فایل ورودی پشتیبانی نمیشود.")
return
audio.export(output_file, format=output_format)
print(f"فایل {input_file} با موفقیت به {output_file} تبدیل شد.")
except Exception as e:
logging.error(f"خطا در تبدیل فایل {input_file}: {e}")
print(f"خطا در تبدیل فایل: {e}")
def batch_convert_audio(input_directory, output_directory, output_format):
"""
تمام فایلهای صوتی در یک دایرکتوری را به فرمت مشخص تبدیل میکند.
"""
for filename in os.listdir(input_directory):
if filename.endswith((".mp3", ".wav", ".ogg")):
input_file = os.path.join(input_directory, filename)
output_file = os.path.join(output_directory, filename.replace(os.path.splitext(filename)[1], "." + output_format))
convert_audio(input_file, output_file, output_format)
if __name__ == "__main__":
input_directory = "input_files" # دایرکتوری فایلهای ورودی
output_directory = "output_files" # دایرکتوری فایلهای خروجی
output_format = "wav" # فرمت فایل خروجی
# ایجاد دایرکتوری خروجی اگر وجود نداشته باشد
if not os.path.exists(output_directory):
os.makedirs(output_directory)
batch_convert_audio(input_directory, output_directory, output_format)
در این نسخه:
- از ماژول
loggingبرای ثبت خطاها استفاده میکنیم. - خطاها در فایل
conversion.logثبت میشوند. - سطح لاگ را روی
logging.ERRORتنظیم کردهایم تا فقط خطاها ثبت شوند.
نتیجهگیری
در این مقاله، نحوه ساخت یک اسکریپت پایتون برای تبدیل فایلهای صوتی را با استفاده از کتابخانه pydub آموزش دادیم. این اسکریپت را میتوان برای اتوماسیون فرآیند تبدیل فایلهای صوتی در برنامههای مختلف استفاده کرد. با افزودن قابلیتهای بیشتر مانند پشتیبانی از فرمتهای صوتی بیشتر، تنظیمات کیفیت صدا، و رابط کاربری گرافیکی، میتوان این اسکریپت را به یک ابزار قدرتمند برای پردازش فایلهای صوتی تبدیل کرد.

بدون دیدگاه