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

如何使用ffmpeg遍历目录批量将视频转换为帧图像

FFmpeg批量遍历目录视频提取帧方案

你已经掌握单视频提帧逻辑的话,批量操作只需要通过系统Shell循环遍历目录下的视频文件,为每个视频单独创建输出目录避免帧文件重名覆盖,再套入你已经在用的单文件提帧命令即可,不同系统环境下可直接运行的命令如下:

Linux/macOS(Bash/Zsh 环境)

将终端切换到存放待处理视频的目录,执行以下脚本:

for video in *.mp4 *.mkv *.avi *.mov; do
  [ -e "$video" ] || continue
  output_dir="${video%.*}_frames"
  mkdir -p "$output_dir"
  # 下方ffmpeg命令可替换为你已经熟练使用的单视频提帧命令
  ffmpeg -i "$video" -q:v 2 "$output_dir/frame_%04d.jpg"
done

脚本逻辑说明:

  • 匹配当前目录下所有mp4/mkv/avi/mov后缀的视频文件,可根据实际文件格式增删后缀列表
  • 自动为每个视频创建同名加_frames后缀的独立文件夹存放提取的帧,不会出现文件覆盖
  • 示例里的ffmpeg命令为提取高质量jpg帧,如果你需要按固定间隔、关键帧、指定分辨率提取,直接替换成你平时用的单文件命令即可,只需要把输入参数改为"$video",输出路径指向对应$output_dir目录

Windows 环境

CMD命令提示符下使用

进入待处理视频目录后直接执行:

@echo off
for %%v in (*.mp4,*.mkv,*.avi,*.mov) do (
  md "%%~nv_frames" 2>nul
  :: 下方替换为你自己的单视频提帧命令
  ffmpeg -i "%%v" -q:v 2 "%%~nv_frames\frame_%%04d.jpg"
)

PowerShell环境下使用

进入待处理视频目录后执行:

Get-ChildItem -Include *.mp4,*.mkv,*.avi,*.mov -File | ForEach-Object {
  $outputDir = Join-Path $_.DirectoryName ($_.BaseName + "_frames")
  New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
  # 下方替换为你自己的单视频提帧命令
  ffmpeg -i $_.FullName -q:v 2 (Join-Path $outputDir "frame_%04d.jpg")
}

注意事项

  • 不要省略为每个视频创建独立输出目录的步骤,否则所有视频提取的帧会输出到同一路径,后处理的文件会覆盖之前的同名帧
  • 所有脚本里的视频匹配后缀可根据你的实际需求修改,比如增加flv、rmvb等格式
  • 如果需要递归处理子目录下的所有视频,只需要修改循环的文件匹配规则即可,ffmpeg核心提帧逻辑不需要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:57:18