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

HEVC流Muxing/Demuxing异常:重构视频时长帧率不符问题咨询

HEVC流封装/解封装后重构视频参数不符问题

问题详情

对HEVC流执行分割(Muxing)与合并(Demuxing)操作后,重构视频出现时长缩短约3秒、帧率从24变为24.33的参数偏差问题,具体操作步骤如下:

1. 用segment muxer分割为5秒片段

ffmpeg -y -r 24 -i input.mp4 -map 0:v:0? -c copy \
-f segment -segment_time 5 -reset_timestamps 1 ./segments/%05d.mp4

2. 用concat demuxer合并片段

PWD=`pwd`
ffmpeg -y -f concat -safe 0 -i <( echo file ${PWD}'/segments/00000.mp4';  \
echo file ${PWD}'/segments/00001.mp4';  echo file ${PWD}'/segments/00002.mp4';  \
echo file ${PWD}'/segments/00003.mp4';  echo file ${PWD}'/segments/00004.mp4';  \
echo file ${PWD}'/segments/00005.mp4';  echo file ${PWD}'/segments/00006.mp4';  \
echo file ${PWD}'/segments/00007.mp4';  echo file ${PWD}'/segments/00008.mp4';  \
echo file ${PWD}'/segments/00009.mp4';  echo file ${PWD}'/segments/00010.mp4';  \
echo file ${PWD}'/segments/00011.mp4';  echo file ${PWD}'/segments/00012.mp4';  \
echo file ${PWD}'/segments/00013.mp4';  echo file ${PWD}'/segments/00014.mp4';  \
echo file ${PWD}'/segments/00015.mp4';  echo file ${PWD}'/segments/00016.mp4';  \
echo file ${PWD}'/segments/00017.mp4';  echo file ${PWD}'/segments/00018.mp4';  \
echo file ${PWD}'/segments/00019.mp4';  echo file ${PWD}'/segments/00020.mp4';  \
echo file ${PWD}'/segments/00021.mp4';  echo file ${PWD}'/segments/00022.mp4';  \
echo file ${PWD}'/segments/00023.mp4';  echo file ${PWD}'/segments/00024.mp4';  \
echo file ${PWD}'/segments/00025.mp4';  echo file ${PWD}'/segments/00026.mp4';  \
echo file ${PWD}'/segments/00027.mp4';  echo file ${PWD}'/segments/00028.mp4';  \
echo file ${PWD}'/segments/00029.mp4';  echo file ${PWD}'/segments/00030.mp4';  \
echo file ${PWD}'/segments/00031.mp4';  echo file ${PWD}'/segments/00032.mp4';  \
echo file ${PWD}'/segments/00033.mp4';  echo file ${PWD}'/segments/00034.mp4';  \
echo file ${PWD}'/segments/00035.mp4';  echo file ${PWD}'/segments/00036.mp4';  \
echo file ${PWD}'/segments/00037.mp4'; ) -map 0 -c copy -r 24 -brand mp42 \
-video_track_timescale 600 -tag:v hvc1 output.mp4

问题根源

  1. 强制帧率导致时间戳偏差:分割时指定-r 24,与原视频6秒IDR间隔、原生时间基准不匹配,引发片段时间戳计算错误,丢帧或重复统计时间。
  2. 时间戳衔接异常:分割时-reset_timestamps 1让每个片段时间戳从0开始,合并时未正确处理时间戳衔接,导致总时长计算失真。
  3. 时间基准与帧率强制冲突:合并时手动设置-video_track_timescale 600和-r 24,若原视频时间基准并非600,会导致帧率计算异常(24.33为实际帧总数除以错误时长的结果)。

修复方案

1. 修正分割命令(保留原生时间属性)

移除强制帧率参数-r 24,让FFmpeg自动读取原视频时间基准与帧率,同时添加参数确保片段时间戳合规:

ffmpeg -y -i input.mp4 -map 0:v:0? -c copy \
-f segment -segment_time 5 -reset_timestamps 1 -segment_format_options movflags=+faststart ./segments/%05d.mp4

2. 修正合并命令(自动继承片段属性)

移除强制帧率-r 24与手动时间基准设置,改用循环遍历片段文件,避免手动列举的繁琐与错误:

PWD=$(pwd)
ffmpeg -y -f concat -safe 0 -i <(for file in ./segments/*.mp4; do echo "file '${PWD}/${file}'"; done) \
-map 0 -c copy -brand mp42 -tag:v hvc1 output.mp4

3. 参数验证

用ffprobe对比原视频与输出视频的核心参数:

# 检查原视频参数
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration,time_base -of default=noprint_wrappers=1 input.mp4

# 检查输出视频参数
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration,time_base -of default=noprint_wrappers=1 output.mp4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:36:22