Bash脚本将多个字幕自动化为视频mp4容器文件

时间:2012-10-23 13:52:55

标签: bash find

首先 - 我不是程序员或脚本编写者 - 正是我几天来一直玩的。

我有一个包含mp4视频文件和srt字幕文件的文件夹。我已经手动管理使用mencoder和handbrake重新编码,将字幕硬编码到视频文件中。

mencoder -oac pcm -ovc raw -sub NAMEOFVIDEO.sub -utf8 -o NAMEOFVIDEO_SRT NAMEOFVIDEO.mp4

这很好用,我正在寻找。所以我拥有的这个/工作目录有多个.srt和.mp4(每天可能有2或3个新的视频和srt文件)

如果只有1个.srt和1个.mp4文件,我可以管理但是我试图找出如何创建一个可以运行mencoder命令的Bash脚本,如果我有2个或3个不同的srt和mp4文件因为mencoder行必须使用正确的相应srt文件和mp4文件组合运行。

我能想出的就像mp4_file= find \working -type f -name "*.mp4" | head -1找到第一个结果.mp4

srt_file = find \working -type f -name "*.srt" | head -1找到第一个结果.srt(幸运的是它是相同的基本名称文件)

然后通过mencoder命令mencoder -oac pcm -ovc raw -sub $srt_file -utf8 -o $mp4_file-SRT $mp4_file运行变量,但正如我所表达的,如果有超过1个文件组合(可能是一个循环),那么我必须通过HandBrakeCLI --preset "High Profile" -i $mp4_file-SRT -o $mp4_file坚持输出

太可怕了,我错过了一些更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

如果它始终是相同的基本名称,您可以使用find和循环执行此操作:

find /working -type f -name '*.mp4' | while read mp4; do
    b=`basename $mp4 .mp4`
    d=`dirname $mp4`
    mencoder -oac pcm -ovc raw -sub $d/$b.sub -utf8 -o $mp4-SRT $mp4
done

如果mp4和子文件具有不同的名称或位于不同的目录中,当然这不起作用。