FFmpeg脚本跳过文件

时间:2014-04-15 13:02:03

标签: bash shell 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线来证明,它经常被切断。但即使对于那些没有被切断的线路,其中大部分也会被忽略。

1 个答案:

答案 0 :(得分:2)

ffmpeg从stdin读取,从而消耗了while read的输入。只需通过添加ffmpeg

重定向< /dev/null的标准输入
相关问题