我有许多视频文件(mp4),带有各自的字幕(每个视频和字幕都有相同的名称)。
这个想法是创建一个 bash 来复制视频中的每个字幕,而无需再次重新编码。对于第一个视频,我在终端上尝试了这个命令,效果很好:
$ ffmpeg -i 01-01-Introduction.mp4 -fix_sub_duration -i 01-01-Introduction.srt -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng 01-01-Introduction-sub.mp4
一些文件:
- 01-01-简介.mp4
- 01-01-简介.srt
- 01-02-课程概述.mp4
- 01-02-课程概述.srt
- 等等
有什么建议吗?提前致谢
答案1
这有效。为了避免覆盖输入文件,我修改了 out 变量:"${i%.mp4}-sub.mp4"
#!/usr/local/bin/bash
# GNU bash version 4.3.42
# To avoid overwrite files: "${i%.mp4}-sub.mp4"
for i in *.mp4; do
SUB=${i%.mp4}.srt
ffmpeg -i "$i" -fix_sub_duration -i "$SUB" -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng "${i%.mp4}-sub.mp4";
done
感谢@MariusMatutiae
答案2
你应该试试;
for i in *.mp4; do
SUB={i%%.mp4}.srt
ffmpeg -i "$i" -fix_sub_duration -i "$SUB" -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng "$i"
done
您应该通过复制来测试上述命令一mp4 文件及其字幕放在一个空目录中,然后在那里尝试。如果成功,那么您可以继续。