使用FFMPEG对含MISB 0604 KLV流的TS文件下采样并关联帧的技术咨询
问题结论
可以实现,但是FFmpeg没有内置针对KLV数据流的下采样滤波器,filter:d参数对KLV流无对应处理逻辑因此不会生效,需要通过时间戳关联的方式完成帧与KLV包的匹配,具体操作如下:
操作步骤
第一步:导出全部KLV原始数据
执行以下命令导出完整的KLV数据流:
ffmpeg -i 2205Z.ts -map 0:2 -c copy -f data klv_raw.bin
第二步:抽帧同时导出对应帧的精确时间戳
在原有抽帧命令基础上加入showinfo滤镜,输出每帧的PTS时间戳并保存到文件:
ffmpeg -y -i 2205Z.ts -map 0:0 -vf "select='not(mod(n,100))',fps=30000/1001/100,showinfo" -compression_algo raw -pix_fmt rgb24 %05d.tif 2>&1 | grep "pts_time:" > frame_timestamps.txt
生成的frame_timestamps.txt中每行按顺序对应导出的00001.tif、00002.tif...的时间戳信息。
第三步:匹配KLV包与对应帧
使用支持MISB 0604标准的解析工具(如基于libmisb开发的解析脚本)读取klv_raw.bin中每个KLV包的PTS时间戳,将其与frame_timestamps.txt中的帧时间戳做最近邻匹配,即可得到每帧对应的KLV元数据。
补充说明
- 若KLV包输出频率与视频帧率为整倍数关系,匹配时间差可控制在1/30s以内,符合绝大多数业务场景的精度要求。
- 如需将KLV元数据直接写入TIFF文件,可在匹配完成后通过
exiftool工具将对应字段写入TIFF的EXIF或XMP元数据区域。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

