这个一行的Bash脚本中有哪个错误?

14 浏览
0 Comments

这个一行的Bash脚本中有哪个错误?

我在一个目录中有两个完全相同的.mp4文件。出于我无法理解的原因,下面的脚本会导致第二个文件的文件名损坏。当我有更多的.mp4文件时,每个其他文件的前两个或三个字符似乎会被删除。这已经在不同的.mp4文件和多个系统上进行了测试。如果我删除-printf '%P\n'或不使用ffmpeg,它将按预期工作。

为什么会出现错误le_two.mp4: No such file or directory

0
0 Comments

在这个一行的Bash脚本中,问题出在ffmpeg命令中。当使用find命令打印文件列表作为标准输入时,循环中的所有命令都可以读取它,因此ffmpeg可能会从标准输入数据中读取错误的字节。为了解决这个问题,可以使用< /dev/null将标准输入重定向到空设备。

修复后的脚本如下:find . -name '*.mp4' -printf '%P\n' | while read -r FILE; do ffmpeg -loglevel error -y -i "./${FILE}" -ss 00:00:01.000 -vframes 1 "junk_${FILE%.*}".png < /dev/null; done

修复后的脚本不仅解决了ffmpeg读取标准输入数据的问题,还修改了输出文件名,使得每次循环都会生成一个新的图片文件,并且使用了-nostdin全局选项。

然而,这个修复方法还没有完整回答问题的原因。问题的原因是ffmpeg命令会从标准输入读取数据,导致输出文件被覆盖。修复方法通过重定向标准输入到空设备来解决了这个问题。

请原谅我回答延迟了,朋友。我一直很忙。

0