使用 FFMPEG 复制 mp4 中字幕的 bash 进程

使用 FFMPEG 复制 mp4 中字幕的 bash 进程

我有许多视频文件(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

一些文件:

  1. 01-01-简介.mp4
  2. 01-01-简介.srt
  3. 01-02-课程概述.mp4
  4. 01-02-课程概述.srt
  5. 等等

有什么建议吗?提前致谢

答案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 文件及其字幕放在一个空目录中,然后在那里尝试。如果成功,那么您可以继续。

相关内容