我是初学者。
如果 mkv 文件存在于目录中,我有一个 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 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
关于bash - 在 bash 'for loop' 结束时打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625845/