FFMPEG制作的视频上传YouTube后HD版本时长显示异常问题求助
- 该问题核心是FFmpeg默认合并视频时的时间基精度不足,输出文件容器头部记录的时长元数据被截断为整数秒,YouTube HD转码时优先读取该元数据导致进度条时长显示错误,实际视频帧完整所以拖到末尾仍能播放剩余内容。
- 解决操作步骤:
- 合并时优先使用concat滤镜而非concat demuxer做流拷贝,合并命令中强制指定视频轨道时间基为毫秒级,统一音频参数避免时长漂移,参考命令如下:
ffmpeg -f concat -safe 0 -i 你的分片列表文件.txt -c:v libx264 -crf 23 -c:a aac -b:a 192k -video_track_timescale 1000 -ar 48000 -ac 2 输出视频.mp4
其中-video_track_timescale 1000参数会将视频轨道的时间刻度设置为1000,每个时间单位对应1毫秒,完整保留所有分片的非整数时长,不会产生累计误差。 - 合并完成后验证输出文件时长准确性,执行以下命令读取实际时长:
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 输出视频.mp4
若返回时长与预期一致可直接上传,若存在元数据偏差可执行以下命令重写时长元数据:ffmpeg -i 输出视频.mp4 -c copy -duration 255 修正后输出视频.mp4
- 合并时优先使用concat滤镜而非concat demuxer做流拷贝,合并命令中强制指定视频轨道时间基为毫秒级,统一音频参数避免时长漂移,参考命令如下:
- 注意事项:如果所有分片编码参数完全一致需要做流拷贝合并,需提前将所有分片的时间基统一为1/1000后再执行合并操作,避免累计精度损失。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

