我是初学者。 我有一个Bash脚本,如果目录中存在字幕,则将字幕嵌入到mkv文件中。
@Component
public class MyBean implements CommandLineRunner {
public void run(String... args) {
// Do something...
}
}
它查找所有具有关联的.srt文件的.mkv文件,并为其执行一些ffmpeg魔术。如果找不到关联的.srt文件,则说明.mkv文件“没有srt文件。”
我怎样才能这样做,以便在for循环结束时打印出所有.skv文件,这些文件确实有.srt文件并成功完成所有其他操作?
谢谢。
答案 0 :(得分:1)
让我们使用Bash array来存储已完成或已跳过的MKV:
SUCCESSMKVS=()
SKIPMKVS=()
for i in *.mkv; do
if [ -f "${i%mkv}"*"srt" ]; then
ffmpeg -i "$i" -f srt -i "${i%mkv}"*"srt" -map 0:0 -map 0:1 \
-map 1:0 -c:v copy -c:a copy -c:s srt "${i}.output.mkv"
mv "${i%mkv}"*"srt" "${i%mkv}srt".old
mv "$i" "${i}.old"
mv "${i}.output.mkv" "$i"
SUCCESSMKVS+=("$i")
else
echo $i "does not have srt file"
SKIPMKVS+=("$i")
fi
done
echo "The following MKVs succeeded:"
for mkv in "${SUCCESSMKVS[@]}"; do
echo -e "\t${mkv}"
done
echo
echo "The following MKVs were skipped:"
for mkv in "${SKIPMKVS[@]}"; do
echo -e "\t${mkv}"
done
echo