提取HEVC视频至.h265/.hevc格式时帧率异常升高导致视频时长缩短的问题求助
提取HEVC视频至.h265/.hevc格式时帧率异常升高导致视频时长缩短的问题求助
最近我在从MP4文件里提取HEVC视频轨道时碰到了个头疼的问题,想请大家帮忙看看怎么解决。
先给大家看下原MP4文件里视频轨道的元数据:
Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(pc, progressive), 3832x1600 [SAR 1:1 DAR 479:200], 29891 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] Side data: DOVI configuration record: version: 1.0, profile: 5, level: 6, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 0
我用这条ffmpeg命令提取视频轨道:
ffmpeg -i myfile.mp4 -c copy onlyvideo.h265
结果提取后的.h265文件元数据变成了这样:
Stream #0:0: Video: hevc (Main 10), yuv420p10le(pc), 3832x1600 [SAR 1:1 DAR 479:200], 25 fps, 25 tbr, 1200k tbn
帧率从23.98变成了25,直接导致提取后的视频时长比原文件短了一截。
这个问题只有在我把视频存为.h265或者.hevc格式时才会出现,如果存成.mp4或者.mov就完全正常。但我现在必须用.h265/.hevc格式,因为后续要配合杜比视界的MP4封装工具做重封装操作。我还试过用杜比官方的解封装工具,结果也是一样的问题,怀疑它背后也是调用了ffmpeg来处理。
我已经尝试过手动指定帧率、设置视频时基这些方法,但都没起作用。
为了排查问题,我还用ffprobe查了原文件和提取后文件的数据包时长、时基信息,结果如下:
原文件myfile.mp4的数据包时长(取前10个包)
执行命令:
ffprobe -select_streams v:0 -of default=noprint_wrappers=1 -show_entries packet=pts_time,duration -read_intervals "%+#10" myfile.mp4
输出:
pts_time=0.000000 duration=1001 pts_time=0.166833 duration=1001 pts_time=0.083417 duration=1001 pts_time=0.041708 duration=1001 pts_time=0.125125 duration=1001 pts_time=0.333667 duration=1001 pts_time=0.250250 duration=1001 pts_time=0.208542 duration=1001 pts_time=0.291958 duration=1001 pts_time=0.458792 duration=1001
原文件myfile.mp4的时基
执行命令:
ffprobe -v 0 -of compact=p=0:nk=1 -show_entries stream=time_base -select_streams v:0 myfile.mp4
输出:
1/24000|
提取后文件onlyvideo.h265的数据包时长(取前10个包)
执行命令:
ffprobe -select_streams v:0 -of default=noprint_wrappers=1 -show_entries packet=pts_time,duration -read_intervals "%+#10" onlyvideo.h265
输出:
pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000 pts_time=N/A duration=48000
提取后文件onlyvideo.h265的时基
执行命令:
ffprobe -v 0 -of compact=p=0:nk=1 -show_entries stream=time_base -select_streams v:0 onlyvideo.h265
输出:
1/1200000
有没有大佬能帮我分析下这是怎么回事,该怎么解决这个帧率异常的问题呀?
备注:内容来源于stack exchange,提问作者pop_shswt
相关产品推荐
相关产品推荐

