对于 PSNR 过滤器,FFMPEG 是修剪和 -t 被忽略?

标签 ffmpeg

我想对编码段运行 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 - 

我确实尝试过 endend_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/

相关文章:

OpenCV 无法读取 ffmpeg 视频

c++ - 从 C++ 中的 AVFrame (FFMPEG) 中提取 RGB 值

python - 验证 RTSP 流 URL [python] 的最佳方法是什么

node.js - 如何使用 Node.js 通过 ffmpeg 流式传输 MP4 文件?

bash - 检查视频文件的完整性

c++ - 将 AVPackets 混合到 mp4 文件中

ffmpeg - 使用 -hls_time > 10 制作 hls 文件

node.js - ffmpeg 如何获取 node.js 上的持续时间?

file - 使用 ffmpeg 连接文件并没有像我预期的那样工作。为什么?

c++ - ffmpeg - avcodec_receive_frame 返回-11,为什么以及如何解决它?