FFmpeg脚本跳过文件



我编写了一个shell脚本来转换许多视频文件,并在文件名后面附加一些内容来保存它们。这个脚本是有效的,但它似乎是随机跳过文件,还有很多文件。

当我重新运行脚本时,它将转换以前跳过的文件。如何使其停止跳过文件?

workingDir=/home/user/Videos
# get list of files to convert
find /video/folder -iname "*.mp4" > $workingDir/file_list
# convert files
cat $workingDir/file_list | while read LINE; do
    # FFmpeg often cuts off the beginning of this line
    echo "$(dirname "$LINE")/$(basename "$LINE")"
    if /usr/bin/ffmpeg -n -loglevel panic -v quiet -stats -i "$LINE" 
        -c:v libx264 -vf scale="trunc(oh*a/2)*2:320" 
        -pix_fmt yuv420p -preset:v slow -profile:v main -tune:v animation -crf 23 
        "$(dirname "$LINE")/$(basename "$LINE" .mp4)"_reencoded.mp4 2>/dev/null; then
            echo "Success: $(dirname "$LINE")/$(basename "$LINE")" >> $workingDir/results
    else
        echo "Failed:  $(dirname "$LINE")/$(basename "$LINE")" >> $workingDir/results
    fi
done

一个问题似乎是FFmpeg干扰了脚本。FFmpeg输出通常会切断下一个命令的开头,即使输出没有显示。if语句之前的echo行就证明了这一点,它经常被截断。但即使是没有被截断的行,大多数行也会被无故跳过。

ffmpeg从stdin读取,从而消耗用于while read的输入。只需通过添加< /dev/null 来重定向ffmpeg的stdin

最新更新