دستور ffmpeg برای افزودن زیرنویس

نوشته حسین بهنودی در ۲۹ شهریور ۱۳۹۸

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

یکی از فرمت‌های محبوب زیرنویس که بسیار زیاد مورد استفاده قرار می گیرد srt است. این نوع فایل زیر نویس را ابتدا نرم افزار SubRip تولید و معرفی کرد.

نرم افزار SubRip یک نرم افزار اپن سورس و آزاد است که می تواند زیر نویس را از داخل ویدیو استخراج نموده و از حالت گرافیکی به متن تبدیل کرده با پسوند srt ذخیره کند.

اکنون فرمت srt توسط اغلب نرم افزارهای تدوین و پخش ویدیویی پذیرفته شده و نسبت به بقیه فرمت های زیر نویس بیشترین کاربرد را دارد.

جدا بودن فایل ویدیو و زیرنویس هنگام پخش یا کپی و جابجایی فایل سختی های خودش را دارد و ممکن است دوست داشته باشید، آنها را در یک فایل ادغام کنید.

روش اول SoftSub

برای این کار کافیست دستور زیر را در خط فرمان وارد کنید.

ffmpeg -i input.mp4 -i input.srt -c:v copy -c:a copy -c:s mov_text output.mp4

فایل ویدیوی اولیه: input.mp4
فایل زیرنویس: input.srt
فایل ادغام شده نهایی: output.mp4

و برای تبدیل به mkv از دستور زیر استفاده کنید. (در فایل mkv می‌توانید بیش از یک زیرنویس قرار دهید.)

ffmpeg -i input.mp4 -i input.srt -c:v copy -c:a copy -c:s srt output.mkv

روش دوم HardSub

برخی از پخش کننده‌های فایل‌های ویدیویی (اغلب تلویزیون‌ها) اصلا نمی‌توانند زیرنویس را نمایش دهند و برخی با زیرنویس فارسی مشکل دارند. بنابراین گاهی لازم می‌شود زیرنویس را در تصویر فایل ویدیویی حک کنید. برای این کار از دستور زیر استفاده کنید:

ffmpeg -i input.mp4 -vf "subtitles=input.srt" output.mp4

اگر دوست دارید نوع و اندازه فونت را نیز تعیین کنید از دستور زیر استفاده کنید. (در صورت تمایل می‌توانید رنگ متن، رنگ زمینه، خط دور متن و غیره را نیز مشخص کنید.)

ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='FontName=Vazir Black,Fontsize=32'" output.mp4

در این روش فایل ویدیو دوباره encode می‌شود و نسبت به روش اول زمان بیشتری نیاز دارد. در صورتیکه بخواهید کیفیت و سرعت عمل انکدینگ را تعیین کنید. دستور زیر را به کار برید:

ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='FontName=Vazir Black,Fontsize=32'" -c:v libx264 -crf 22 -preset slow -profile:v high -level 4.0 -c:a copy output.mp4