我是初学者。我有一个Bash脚本,可以将字幕嵌入到mkv文件中(如果它们存在于目录中)。
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
else
echo $i "does not have srt file"
fi
done
它查找具有关联的.srt文件的所有.mkv文件,并对其进行ffmpeg魔术处理。如果找不到关联的.srt文件,则说明该.mkv文件“没有srt文件”。
我该如何做,以便在for循环结束时,我可以打印出所有具有.srt文件并且成功执行了所有其他操作的.mkv文件?
谢谢你。
让我们使用Bash数组存储已完成或已跳过的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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句