我想对编码段运行 PSNR 检查,但避免首先在无损编解码器中提取段进行比较。我只是想修剪输入,但看起来这已被禁用。
我的命令:
ffmpeg -i original.mp4 -i segment.mp4 -filter_complex "[0:v]trim=10:20,setpts=PTS-STARTPTS[0v];[1:v]setpts=PTS-STARTPTS[1v];[0v][1v]psnr" -f null -
这将遍历整个原始输入文件,而不是修剪过滤器中的视频。
如果我尝试使用
-ss
修剪输入和 -t
, 只有输入 -ss
标志正在工作。它将设置输入正确但忽略 -t
时间戳。ffmpeg -ss 10 -i original.mp4 -t 10 -i segment.mp4 -filter_complex [0:v][1:v]psnr -f null -
-t
的不同位置不会有任何影响。我还尝试设置
duration
在保持 -ss
的同时保持修剪输入有效。ffmpeg -ss 10 -i original.mp4 -i segment.mp4 -filter_complex "[0:v]trim=duration=10,setpts=PTS-STARTPTS[0v];[1:v]setpts=PTS-STARTPTS[1v];[0v][1v]psnr" -f null -
我确实尝试过
end
和 end_frame
但没有一个工作。如果我使用
-lavfi
,这同样适用而不是 -filter_complex
.我确实简要查看了 PSNR 过滤器的源代码,但找不到对
trim
的任何引用。或 -t
.此功能是否被阻止或我做错了什么?
是否有另一种方法可以在不编码同一段的无损版本进行比较的情况下执行此操作?
最佳答案
原始命令几乎没问题。但是,应该交换输入的顺序,如果有任何音频,应该禁用它。
ffmpeg -i original.mp4 -i segment.mp4 -filter_complex "[0:v]trim=10:20,setpts=PTS-STARTPTS[0v];[1:v]setpts=PTS-STARTPTS[1v];[1v][0v]psnr" -an -f null -
此外,在下面的片段中
ffmpeg -ss 10 -i original.mp4 -t 10 -i segment.mp4
如果你想限制 original.mp4 的持续时间,那么
-t 10
应放在 -i original.mp4
之前.
关于对于 PSNR 过滤器,FFMPEG 是修剪和 -t 被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53303433/