我正在尝试使用ffmpeg -f concat
。当我使用临时文件时,它可以工作。为了整洁,最好使用管道列表。我在较早的网络帖子中看到过这样的例子。它不再起作用了,还是我遗漏了一些显而易见的东西?这里有一个脚本说明了这个问题——如果你运行test.sh x
它,它会通过创建一个临时文件来工作。如果你运行,test.sh
那么 ffmpeg 就会失败。正如脚本注释中所述,我已经尝试过使用-safe 0
和-protocol_whiteflag "file,pipe,fd"
。
#!/bin/zsh
o=test.mp4
tmp=test.tmp
if [[ "$1" == "x" ]] ; then
echo Temp file $tmp...
ls GX01000?.mp4 | perl -ne 'print "file $_"' > $tmp
ffmpeg -hide_banner -y -f concat -i $tmp -c copy $o
else
echo Pipe
ls GX01000?.mp4 | perl -ne 'print "file $_"' | \
ffmpeg -hide_banner -y -f concat -i - -c copy $o
# this command line with -safe 0 and -protocol_whitelist doesn't work either
# ffmpeg -hide_banner -y -safe 0 -protocol_whitelist "file,pipe,fd" -f concat -i - -c copy $o
fi
以下是失败案例的输出:
% ./test.sh
Pipe
[fd @ 0x6000015f0620] Protocol 'fd' not on whitelist 'crypto,data'!
[concat @ 0x12e7055f0] Impossible to open 'fd:GX010005.mp4'
[in#0 @ 0x6000002f0100] Error opening input: Invalid argument
Error opening input file -.
Error opening input files: Invalid argument
谢谢!