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

如何用FFmpeg批量转换指定格式视频并保留原目录结构

如何用FFmpeg批量转换指定格式视频并保留原目录结构

我懂你想要的效果——批量把文件夹(包括所有子文件夹)里的.mpg、.avi、.vob格式视频转成.mp4,还得保留原有的文件夹结构和文件名,只改后缀对吧?你的批处理思路其实没问题,只是有些细节可以优化,我帮你调整一下脚本,再给你拆解下关键部分:

修正后的完整批处理脚本

@echo off
setlocal enabledelayedexpansion

set "source_folder=C:\path\to\source\folder"

:: 递归遍历所有子文件夹中的目标格式视频
for /r "%source_folder%" %%F in (*.avi *.mpg *.vob) do (
    :: 先检查输出文件是否已存在,避免重复转换
    if not exist "%%~dpnF.mp4" (
        echo 正在转换: "%%F"
        :: 调用FFmpeg执行转换,去掉了过时的-strict参数,简化输出信息
        ffmpeg -i "%%F" -c:v libx264 -c:a aac -b:a 192k -hide_banner -loglevel error "%%~dpnF.mp4"
        :: 检查转换是否成功
        if !errorlevel! equ 0 (
            echo 转换完成: "%%~dpnF.mp4"
        ) else (
            echo 转换失败: "%%F"
        )
    ) else (
        echo 文件已存在,跳过: "%%~dpnF.mp4"
    )
)

echo 所有转换任务处理完成!
pause

关键细节说明

  • 路径与递归遍历:for /r "%source_folder%" 这个/r参数会自动遍历源文件夹下的所有子目录,完美匹配你需要处理所有嵌套文件夹的需求。
  • 输出路径与文件名控制:%%~dpnF.mp4 是批处理的特殊变量用法:
    • %%~d:提取原文件的驱动器号(比如C:)
    • %%~p:提取原文件的完整路径(不含文件名)
    • %%~n:提取原文件的文件名(不含后缀)
      组合起来就保证了输出MP4和原视频在同一个文件夹,名字完全一致,只是后缀改成了.mp4。
  • 优化的FFmpeg参数:去掉了-strict experimental——这个参数是旧版FFmpeg用来启用AAC编码的,现在AAC已经是标准支持的编码,不需要额外声明了;加上-hide_banner -loglevel error是为了减少无关输出,只在出错时显示错误信息,让转换过程更清爽。
  • 重复转换防护:新增了if not exist检查,如果目标MP4已经存在就跳过,避免重复消耗资源。
  • 状态提示:添加了转换中的状态信息,你能实时看到哪个文件在处理、是否成功。

注意事项

  1. 确保你的电脑上已经安装了FFmpeg,并且把FFmpeg的bin目录添加到了系统环境变量里;如果没加环境变量,把脚本里的ffmpeg改成FFmpeg的完整路径,比如"C:\Program Files\ffmpeg\bin\ffmpeg.exe"。
  2. 转换过程中不要强行关闭命令窗口,否则可能生成损坏的MP4文件。
  3. 如果原文件的路径或文件名包含空格、特殊字符,脚本里的引号已经帮你处理好了,不用担心报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:44:52