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

如何通过.sh脚本调用ffmpeg提取视频帧并设置每秒抽帧数

修改方法

要实现每秒提取2帧的需求,只需要给ffmpeg增加帧率控制滤镜即可,同时你原脚本里存在一处多余分号的语法错误,一并修正即可。

核心修改点

  • 删除video_frames_folder_path赋值行末尾多余的;;,否则shell运行时会报语法错误
  • 在ffmpeg命令中添加-vf fps=2参数,该参数会控制ffmpeg均匀采样,每秒输出2帧图像
  • (可选优化)给jpg输出增加-q:v 2参数,控制导出帧的画质,数值范围2-31,数值越小画质越高、文件体积越大
  • (可选优化)将原脚本的mkdir改为mkdir -p,目标文件夹已存在时不会报错,重复运行脚本更稳定

修改后的完整脚本

#!/bin/bash
frames_folder_path=./data
videos_folder_path=./videos
ext=mp4

mkdir -p "${frames_folder_path}"

for video_file_path in "${videos_folder_path}"/*."${ext}"; do
    slash_and_video_file_name="${video_file_path:${#videos_folder_path}}"
    slash_and_video_file_name_without_extension="${slash_and_video_file_name%.${ext}}"
    video_frames_folder_path="${frames_folder_path}${slash_and_video_file_name_without_extension}"
    mkdir -p "${video_frames_folder_path}"
    ffmpeg -i "${video_file_path}" -vf fps=2 -q:v 2 "${video_frames_folder_path}/%d.jpg"
done

参数说明

  • 后续如果需要调整抽帧密度,只需要修改fps=后面的数值即可:比如需要每秒抽1帧就写fps=1,每秒抽10帧就写fps=10
  • 你之前遇到的"默认按30fps抽帧"本质是原视频本身帧率为30fps,不加帧率控制参数时ffmpeg会导出视频的全部帧,并不是默认固定30fps输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:24:33