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

使用FFmpeg合并视频异常:YouTube下载视频播放变慢问题求助

FFmpeg合并视频异常:YouTube下载视频播放变慢问题求助

嗨,我之前也碰到过一模一样的问题!看起来你已经检查了编码格式和分辨率,但FFmpeg的视频拼接对底层参数的一致性要求特别高,只匹配codec和分辨率还不够,大概率是两个视频的帧率、时基或者关键帧设置不匹配导致的,给你几个排查和解决的方向:

第一步:先确认两个视频的详细参数差异

先别着急拼接,先用ffprobe命令把两个视频的核心参数拉出来对比,命令如下:

# 检查你生成的截图视频参数
ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,time_base,codec_type screenshot.mp4
# 检查YouTube下载的视频参数
ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,time_base,codec_type input2.mp4

重点看这几个参数:

  • r_frame_rate:帧率,YouTube视频经常是29.97fps而不是标准30fps,肉眼看差一点,但拼接后会导致播放速度异常
  • time_base:时基,这个是视频时间戳的基准,两个视频必须一致
  • 如果有音频,还要看音频的采样率、声道数,比如一个是44100Hz一个是48000Hz也会出问题

第二步:两种解决方法任选其一

方法1:统一参数后再用流复制拼接

如果查到参数不一致,先把你的截图视频重新生成,对齐YouTube视频的参数。比如假设YouTube视频是29.97fps、时基1/1000,那调整生成命令:

ffmpeg -y -loop 1 -i screenshot.png -filter_complex "[0:v]scale=1920x1080,subtitles=subs.srt" -c:v libx264 -c:a aac -r 29.97 -time_base 1/1000 -g 30 -shortest -t 5 screenshot_aligned.mp4

这里-r指定帧率,-time_base对齐时基,-g 30设置关键帧间隔(和YouTube视频保持一致),之后再用你原来的concat命令就可以了:

ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4

方法2:转成拼接友好的中间格式(更省心)

如果不想纠结参数,直接把两个视频转成mpegts格式(这种格式天生适合拼接,对参数兼容性高),再合并:

# 把截图视频转成ts格式
ffmpeg -i screenshot.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts
# 把YouTube视频转成ts格式
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts
# 合并两个ts文件
ffmpeg -i "concat:temp1.ts|temp2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

这种方法几乎能解决90%以上的FFmpeg拼接参数不兼容问题,亲测有效!

为什么之前的命令不行?

你之前用的-c copy是流复制模式,它不会重新编码视频,只是把原视频的流直接拼起来,这要求两个视频的所有编码参数、时基、帧率完全一致,否则播放器会用第一个视频的参数去解码第二个,就会出现播放变慢/变快的情况;而concat:协议同样有这个限制,所以必须先统一参数或者转成兼容的中间格式。

备注:内容来源于stack exchange,提问作者Sulli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:15:30