两个FFmpeg视频分段命令的性能差异及使用疑问
FFmpeg安卓分段命令性能差异说明
命令整理
你用到的两条分段命令修正后如下(第一条的b:v2 097152为输入笔误,修正为-b:v 2097152):
- 第一条:
-ss *startTime* -i *inputVideo* -f segment -segment_time *segmentDuration* -reset_timestamps 1 -vcodec copy -b:v 2097152 -b:a 48000 -ac 2 -ar 22050 *outputPath* - 第二条:
-ss *startTime* -i *inputVideo* -f segment -segment_time *segmentDuration* -reset_timestamps 1 *outputPath*
性能差异原因
第一条速度更快的核心原因是-vcodec copy参数:
- 该参数启用流复制模式,FFmpeg不会对原视频的视频流做解码、重新编码操作,只是直接把原视频已编码的帧数据按分段规则拆分后封装到输出文件,运算量极低,速度接近本地文件拷贝速度。
- 第二条命令没有指定编码器参数,FFmpeg会默认触发重新编码逻辑,需要逐帧解码原视频、再按默认编码参数重新压缩,CPU占用极高,速度自然远慢于流复制模式。
另外补充:第一条命令里的-b:v(视频码率)、-b:a(音频码率)、-ac(音频声道数)、-ar(音频采样率)参数,在流复制模式下全部不生效,只有重新编码时才会生效。
后续使用风险说明
大部分场景下第一条命令可以正常使用,但存在以下少数异常情况:
- 若原视频的关键帧间隔大于你设置的分段时长,分段后的视频可能出现前几秒黑屏、进度条拖动异常的问题。流复制只能从关键帧位置切分,无法在非关键帧位置截断视频。
- 若你指定的输出容器不支持原视频的编码格式,会直接报错无法生成文件,此时需要去掉
-vcodec copy参数改用重新编码模式。 - 如果你有调整音视频码率、声道、采样率的需求,流复制模式无法满足,必须走重新编码逻辑。
内容的提问来源于stack exchange,提问作者Anas Ansari
相关产品推荐
相关产品推荐

