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

如何使用FFmpeg将>300帧的视频分割为10段每段30帧的子视频

使用FFmpeg将长视频分割为固定30帧的子视频

没问题,这事儿用FFmpeg完全能搞定,思路就是精准按帧区间切片。我给你整理了手动单段命令和批量循环脚本两种方案,还有几个容易踩坑的细节要注意:

核心命令逻辑(单段示例)

FFmpeg里用-start_frame指定起始帧索引(注意:FFmpeg的帧是从0开始计数的!),再用-vframes指定要提取的帧数量。比如提取用户说的第1-30帧(对应FFmpeg的0-29帧),命令如下:

ffmpeg -i input.mp4 -start_frame 0 -vframes 30 -c:v copy -an output_01.mp4

参数解释:

  • -i input.mp4:你的源视频文件
  • -start_frame 0:从第1帧(用户视角)开始提取
  • -vframes 30:只保留30帧,刚好对应一段
  • -c:v copy:直接复制视频流,速度极快(如果源视频编码不支持帧级复制,就去掉这个参数,改用重新编码,比如-c:v libx264 -crf 23)
  • -an:忽略音频(如果不需要音频就加,要保留的话去掉这个参数,后面会讲音频处理细节)

批量生成10段子视频(脚本方案)

手动写10条命令太麻烦,用bash循环一键搞定:

for i in {0..9}; do
  # 计算每段的起始帧(0,30,60...270)
  start_frame=$((i * 30))
  # 生成格式化的输出文件名(output_01.mp4到output_10.mp4)
  output_file="output_$(printf "%02d" $((i+1))).mp4"
  # 执行FFmpeg命令
  ffmpeg -i input.mp4 -start_frame $start_frame -vframes 30 -c:v copy -an $output_file
done

把这段代码存成split_video.sh,给它加执行权限(chmod +x split_video.sh),在终端运行就能自动生成10段30帧的子视频。

关键注意事项

  1. 帧索引的坑:FFmpeg的-start_frame是从0开始计数的,别搞混!比如用户说的第31帧,对应FFmpeg的30,所以第二段的起始帧是30,刚好提取31-60帧。
  2. 编码兼容性:如果运行时提示“Invalid frame dimensions”或者复制失败,说明源视频的编码不支持帧级复制,把-c:v copy换成-c:v libx264 -crf 23(H.264编码,兼容性拉满)。
  3. 音频处理:如果需要保留音频,去掉-an,再加-shortest让音频和视频时长对齐,避免音频过长:
    ffmpeg -i input.mp4 -start_frame $start_frame -vframes 30 -c:v libx264 -crf 23 -c:a aac -shortest $output_file
    
  4. 验证帧数量:可以用ffprobe检查输出的子视频是否真的是30帧:
    ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 output_01.mp4
    
    输出数字30就说明没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:19:49