我想对已编码的段进行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
的任何引用。
此功能是否被阻止或我做错了什么? 是否会有另一种方法可以执行此操作,而无需编码要比较的同一段的无损版本?
答案 0 :(得分:1)
原始命令几乎没问题。但是,应该交换输入顺序,并且如果有音频,则应将其禁用。
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
之前。