要强制ffmpeg只读取,解码和缩放一次以降低CPU使用率,我将这些步骤放在一个ffmpeg进程中,并将结果传送到执行编码的另一个ffmpeg进程。
这使整体处理时间缩短了15-20%。
INPUT_STREAM="ffmpeg -i $INPUT_FILE -vf scale=720:-1,crop=720:400 -threads auto -f yuv4mpegpipe -"
$INPUT_STREAM | ffmpeg -y -f yuv4mpegpipe -i - \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 250k -threads auto out-250.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 500k -threads auto out-500.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 700k -threads auto out-700.mp4
然后我尝试了下面的语法:
ffmpeg -i c:\sample.mp4 -threads auto -f yuv4mpegpipe - | ffmpeg -y -f yuv4mpegpipe -i -vcodec libx264 -b:v 250k -threads auto c:\out-250.mp4 -vcodec libx264 -b:v 260k -threads auto c:\out-260.mp4
...但出现此错误:
必须至少指定一个输出文件
但是我已经指定了输出文件:C:\out-260.mp4
。它仍然不起作用
怎么了?
答案 0 :(得分:1)
ffmpeg -y -f yuv4mpegpipe -i -vcodec …
您没有指定任何输入文件。要从标准输入读取,请使用-
:
ffmpeg -y -f yuv4mpegpipe -i - -vcodec …