استخراج صدا از ویدئو با پایتون

پایتون زبان برنامه نویسی قدرتمند و سطح بالاییه که خیلی کارا میشه باهاش انجام داد. از وب و هوش مصنوعی تا کار با فایل ها و صدا و تصویر. تو پست این هفته ایرانی پای تصمیم گرفتیم برنامه ای بنویسیم که با استفاده از اون میتونیم صدا و تصویر رو از هم جدا کنیم و به صورت فایل های مستقل ذخیره کنیم.

تو این آموزش از کتابخونه قدرتمند moviepy استفاده میکنیم. این کتابخونه سطح بالا که خودش از چندین کتابخونه قدرتمند و سطح پایین دیگه مثل numpy و pillow استفاده میکنه، انجام کاهایی مثل ویرایش صدا و تصویر از طریق پایتون رو برای ما خیلی راحت میکنه.


اسکریپتی که قراره بنویسیم رو میتونین از مخزن اصلی گیت هاب ایرانی پای بردارید.


نصب پیش نیازها

همونطور که بالاتر گفتیم به کتابخونه moviepy احتیاج داریم. از طریق اجرای دستور زیر تو کامندلاین نصبش میکنیم:

pip install moviepy

بعد از اجرای این دستور، علاوه بر این کتابخونه چندین کتابخونه دیگه که پیش نیازهای moviepy هستند هم به صورت خودکار نصب میشن.

ایمپورت وابستگی ها

تو فایل پایتونمون، ماژول مورد نیازمون رو ایمپورت میکنیم:

from moviepy.video.io.VideoFileClip import VideoFileClip

از طریق این ماژول میتونیم رو فایل های ویدئویی با فرمت های مختلف، کارهای مختلفی مثل جدا کردن صدا از ویدئو رو انجام بدیم.

جدا کردن صدا از ویدئو

def video_to_mp3(video_path: str, output_path: str, output_name: str):
    with VideoFileClip(video_path) as video:
        audio = video.audio
        audio.write_audiofile(f&quot{output_path}/{output_name}.mp3&quot)

تو این تابع سه تا پارامتر لازم داریم: اولین پارامتر (video_path)، معادل آدرس اون ویدئویی که میخوایم صداش رو جدا کنیم. اگه فایل ویدئویی و فایل پایتون تو یک دایرکتوری باشن، نوشتن اسم ویدئو به تنهایی کفایت میکنه. دومین پارامتر (output_path)، مسیریه که میخوایم فایل صوتی mp3 اونجا ذخیره شه. سومین پارامتر (output_name)، اسمیه که میخوایم فایل صوتی mp3 به اون اسم ذخیره شه.

ویدئو رو با تابع VideoFileClip باز کردیم و به متغیر video نسبتش دادیم. بعد از اون صدای فایل تصویریمون رو به متغیر audio نسبت دادیم. در قسمت آخر با صدا کردن تابع ()write_audiofile، یک فایل صدای جدید با محتوای صدای ویدئو انتخاب شده درست کردیم و فایل رو تو مسیر داده شده (output_path) و اسم داده شده (output_name) با فرمت mp3 ذخیره کردیم.

ذخیره ویدئو بدون صدا

def mute_video(video_path: str, output_path: str, output_name: str):
    with VideoFileClip(video_path) as video:
        ext = video.filename.split(&quot.&quot)[-1]
        muted = video.without_audio()
        muted.write_videofile(
            f&quot{output_path}/{output_name}.{ext}&quot,
            audio=False, codec=&quotmpeg4&quot
        )

اینجا هم مثل تابع قبل که بالاتر توضیح دادیم، سه تا پارامتر داریم که همون وظایف رو به عهده دارن. مجددا فایل ویدئو رو باز کردیم و به video نسبتش دادیم. فرمت فایل رو از روی اسمش پیدا کردیم و به ext نسبت دادیم. از این متغیر برای ذخیره فایل نهایی استفاده میکنیم. با صدا زدن تابع ()without_audio، صدا رو از ویدئو حذف کردیم و صامتش کردیم و این ویدئو صامت رو به متغیر muted نسبت دادیم. در آخر با اجرای متد ()write_videofile و پاس دادن اسم فایل نهایی و codec به عنوان پارامترهاش، یک فایل ویدئویی بدون صدا ذخیره کردیم. تو این تابع وقتی audio رو مساوی با False میذاریم، یعنی موقع ذخیره فایل جدید صدا رو ذخیره نکن.

کارمون تموم شد. ?

این توابع رو میتونین تو هر پروژه ای استفاده و به راحتی صدا رو از ویدئو جدا کنید.


امیدواریم از این پست استفاده کافی رو برده باشید. اگه شما هم مثل ما از خوندن مطالب پایتونی لذت میبرید، خوشحال میشیم ما رو تو شبکه های اجتماعی دنبال و در صورت داشتن انتقاد و پیشنهاد ما رو ازش مطلع کنید. لایک هم یادتون نره :)


حمایت از ما

با دنبال کردن ما در

یا کمک مالی به مبلغ دلخواه از طریق درگاه آیدی پی میتونید از ما حمایت کنید.

وب سایت (به زودی): iranipy.ir