概述:
我正在尝试将我的 MKV 库重新转换为 MP4。我有一个脚本,可以处理并从视频文件中提取字幕。
我有另一个脚本可以重新合并给定文件夹中的所有 .mkv 文件。我需要的是让脚本仅有的remux 文件夹,它检测到有 .srt 文件。
所有 .srt 文件都以 ***.eng.srt 结尾
这是我当前的 remux 脚本:
#!/bin/bash
IFS=$'\n'
clear
for filename in *.mkv
do
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename
done
谢谢!任何帮助都将不胜感激。
答案1
我认为你正在寻找这个:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
我删除了它,IFS='\n'
因为它在那里没有做任何有用的事情,for
只要你引用你的变量,即使名称包含空格,你的循环也是非常安全的。
测试[ -e foo ]
是否存在foo
。相反,[ ! -e foo ]
如果不存在,则为真foo
。在这种情况下,foo
是一个 glob ( *.srt
),因此如果找到任何匹配的文件,测试将为假。在上面的脚本中,这&&
意味着如果没有srt
找到文件,则会打印错误消息并退出脚本。