在bash'for loop'结束时打印结果

马修·施瓦兹(Matthew Schwarz)

我是初学者。我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章