python - 使用 ffmpeg-python 为视频添加多个字幕
问题描述
我正在尝试使用 ffmpeg-python 将多个字幕(未刻录)添加到视频文件中。我有这个 ffmpeg 命令:
ffmpeg -i input.mp4 -f srt \
-i "subs/en/en_srt_sub.srt" \
-i "subs/fr/fr_srt_sub" \
-map 0:0 -map 0:1 -map 1:0 -map 2:0 \
-c:v copy -c:a copy \
-c:s srt -c:s srt \
-metadata:s:s:0 language=en -metadata:s:s:0 title=English \
-metadata:s:s:1 language=fr -metadata:s:s:1 title=French \
output.mkv
有没有办法用 ffmpeg-python 模块做到这一点,或者我只需要使用字符串格式和子进程。
解决方案
相同的命令可以翻译成这样的:
#Import library
import ffmpeg
#Define vars
video="input.mp4"
sub1="subs/en/en_srt_sub.srt"
l1="en"
t1="English"
sub2="subs/fr/fr_srt_sub.srt"
l2="fr"
t2="French"
output_file="output.mkv"
#Define input values
input_ffmpeg = ffmpeg.input(video)
input_ffmpeg_sub1 = ffmpeg.input(sub1)
input_ffmpeg_sub2 = ffmpeg.input(sub2)
#Define output file
input_video = input_ffmpeg['v']
input_audio = input_ffmpeg['a']
input_subtitles1 = input_ffmpeg_sub1['s']
input_subtitles2 = input_ffmpeg_sub['s']
output_ffmpeg = ffmpeg.output(
input_video, input_audio, input_subtitles1, input_subtitles2, output_file,
vcodec='copy', acodec='copy',
**{'metadata:s:s:0': "language="+l1, 'metadata:s:s:0': "title="+t1, 'metadata:s:s:1': "language="+l2, 'metadata:s:s:1': "title="+t2 }
)
# If the destination file already exists, overwrite it.
output_ffmpeg = ffmpeg.overwrite_output(output_ffmpeg)
# Print the equivalent ffmpeg command we could run to perform the same action as above.
print(ffmpeg.compile(output_ffmpeg))
# Do it! transcode!
ffmpeg.run(output_ffmpeg)
为了添加其他流元数据,您可以在官方文档中查看自定义过滤器。
推荐阅读
- html - 猫头鹰旋转木马 2.2 带自定义点
- .net - MYSQL 连接器/NET 8.0.25 升级失败
- sql - LEFT JOIN 正在拉入 NULL 值,即使 AND 语句应该将它们过滤掉
- package - APT,基本操作系统
- ruby-on-rails - 很难将 ruby 3.0.2 设置为默认版本(您的 Ruby 版本是 2.6.6,但您的 Gemfile 指定了 3.0.2)
- lifetime - Vulkan delete pipeline after recording command buffer
- python - Trying to install pyramid-arima in a Jupyter Notebook and getting some errors
- react-native - Unable to play videos on react-native-macos
- javascript - Invite tracker bot that finds the inviter
- npm-scripts - Package Jason file issue