You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FFmpeg计算MPTS文件相同PID流的PSNR报错如何解决?

两个MPTS文件同PID流PSNR计算方案

可行性结论

完全可以实现,你遇到的报错属于参数使用错误导致的问题,并非FFmpeg不支持该场景。

错误原因分析

你收到的报错:

[Parsed_psnr_0 @ 000002161e3c6a40] Width and height of input videos must be same.

核心诱因是误用了-streamid参数:

  • -streamid是为输出流设置PID值的参数,没有筛选输入流PID的功能
  • 你的原命令并未选中两个输入里PID为3511的视频流,FFmpeg默认调用两个输入的第一个视频流做对比,恰好这两个流分辨率不一致,触发报错

正确操作方法

核心逻辑

用-map 输入序号:i:PID的语法筛选指定PID的输入流,再送入PSNR滤镜计算即可。

基础命令(确认两个目标流参数完全一致时使用)

.\ffmpeg.exe -i origin.ts -i ref.ts -map 0:i:3511 -map 1:i:3511 -lavfi "[0:v][1:v]psnr=stats_file=psnr_logfile.txt" -f null -

兼容命令(两个目标流参数存在差异时使用)

如果两个PID3511的流分辨率、帧率、时间基存在差异,可以先做参数对齐再计算:

.\ffmpeg.exe -i origin.ts -i ref.ts -map 0:i:3511 -map 1:i:3511 -lavfi "[0:v]settb=AVTB,fps=原始流实际帧率[base];[1:v]settb=AVTB,fps=原始流实际帧率,scale=w=base_w:h=base_h:flags=bicubic[ref];[base][ref]psnr=stats_file=psnr_logfile.txt" -f null -

参数说明

  • -map 0:i:3511:选中第一个输入文件中PID为3511的流
  • settb=AVTB:统一两个流的时间基,避免时间戳错位导致帧匹配失败
  • scale=w=base_w:h=base_h:将转码输出流的分辨率自动对齐到原始基准流的分辨率
  • flags=bicubic:使用双三次缩放算法,降低缩放环节对PSNR计算结果的干扰

前置校验建议

可以先用ffprobe确认两个PID3511流的基础参数,避免无效计算:

ffprobe.exe -i 文件名.ts -show_entries stream=codec_type,width,height,r_frame_rate,pid -select_streams v -of compact=p=0

确认PID3511对应的流均为视频流即可。

内容的提问来源于stack exchange,提问作者Deim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:03