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

使用ffmpeg将HEVC转H264后出现时长异常问题该如何解决?

问题根因

原HEVC文件的音频流存在时间戳不连续/封装异常,直接复制音频流时FFmpeg不会主动修正异常的时间戳,导致封装后的MP4容器记录的总时长被错误计算为9小时;浏览器播放时会严格读取容器头部的时长元数据,和视频/音频帧的时间戳做校验,参数异常就会一直加载,VLC播放器会忽略容器的错误时长,根据实际解码的帧时长计算播放进度,所以能正常播放。加-an跳过音频时就没有异常时间戳的影响,所以时长正常。

修复方案

方案1:重新编码音频(最稳妥,解决率100%)

使用以下命令转码,会重新生成音频流的时间戳,同时适配网页播放要求:

ffmpeg -i hevc.mp4 -c:v libx264 -c:a aac -b:a 32k -fflags +genpts -movflags +faststart h264_fixed.mp4

参数说明:

  • -c:a aac:将原音频重新编码为标准AAC格式,修正原音频流的封装异常
  • -b:a 32k:匹配原音频31kbps的码率,避免音质损失或文件体积不必要增大
  • -fflags +genpts:强制FFmpeg根据音视频帧的实际时长生成正确的演示时间戳,修正容器总时长
  • -movflags +faststart:将MP4的元数据(moov盒子)移到文件开头,网页端无需加载完全部文件即可开始播放,解决持续加载问题

方案2:保留原音频流不重编码

如果需要无损保留原音频,可以使用以下命令,只修正时间戳和封装参数:

ffmpeg -i hevc.mp4 -c:v libx264 -c:a copy -bsf:a aac_adtstoasc -fflags +genpts -movflags +faststart h264_fixed.mp4

参数说明:

  • -bsf:a aac_adtstoasc:处理AAC流的封装格式适配问题,修复ADTS格式AAC封装到MP4时的时间戳异常
验证方法

转码完成后用ffprobe检测输出文件,确认时长为00:03:32左右,音频流显示正常的比特率参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:48:01