FFmpeg - 将编码操作的输出馈送到滤波器

时间:2017-08-17 07:27:23

标签: ffmpeg

我想知道我们是否可以将编码操作的输出提供给" filter_complex"使用如下命令:

ffmpeg -i input.mp4 -c:v libx264 -s:v 1920x1080 -b:v 10000k "[encoder-output-1]" \
-c:v libx264 -s:v 1280x720 -b:v 5000k "[encoder-output-2]" \
-c:v libx264 -s:v 640x360 -b:v 2000k "[encoder-output-3]" \
-filter_complex "[encoder-output-1][0:v]psnr" -f null - \
-filter_complex "[encoder-output-2][0:v]psnr" -f null -\
-filter_complex "[encoder-output-3][0:v]psnr" -f null - 

如果我们可以这样做,应该如何命名编码器的输出垫,以便可以在filter_complex中引用/映射它 如果没有,请让我知道实现这样的最简单方法是什么。

注意:

  1. 我会使用第三方编码器,它们无法在内部计算PSNR分数。因此,我想在FFmpeg过滤器中计算PSNR。

1 个答案:

答案 0 :(得分:0)

过滤器需要解码帧,因此编码输出不能直接使用。你可以将它传递给另一个ffmpeg进程。

ffmpeg -i input.mp4 -map 0:v -map 0:v -map 0:v
       -c:v libx264 -b:v:0 10000k -b:v:1 5000k -b:v:2 2000k -f nut - | 
 ffmpeg -i input.mp4 -f nut -i -
        -filter_complex "[1:v:0][0:v]psnr;[1:v:1][0:v]psnr;[1:v:2][0:v]psnr" -f null -

要避免两次解码视频,请使用

ffmpeg -i input.mp4 -map 0:v -map 0:v -map 0:v -map 0:v
       -c:v libx264 -c:v:3 rawvideo -b:v:0 10000k -b:v:1 5000k -b:v:2 2000k -f nut - | 
 ffmpeg -f nut -i -
        -filter_complex "[1:v:0][1:v:3]psnr;[1:v:1][1:v:3]psnr;[1:v:2][1:v:3]psnr" -f null -