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

FFmpeg批量压缩视频时的文件名动态修改及递归处理子文件夹问题

FFmpeg批量压缩视频时的文件名动态修改及递归处理子文件夹问题

嗨,我来帮你搞定这两个头疼的问题!咱们一步步拆解解决:

一、解决文件名冲突与动态命名问题

你现在碰到的“无法写入同一文件”和覆盖提示,核心问题出在输出文件名格式错误,还有环境变量命名不规范:

  1. 首先,环境变量不能以数字开头(你用了set 0=compressed),这会导致变量无法正常解析,改成更合理的命名比如suffix=_compressed就好。
  2. 之前用%%i.mp4的话,原文件如果是test.mkv,输出会变成test.mkv.mp4(带双扩展名);而%%~ni是取不带扩展名的原文件名,这才是你真正需要的。

修正后的单文件夹处理代码如下:

@echo off
set suffix=_compressed
:: 遍历当前文件夹下的指定格式视频
for %%i in (*.mkv, *.mp4, *.mov) do (
    :: 输出格式:原文件名+suffix+.mp4,比如test.mkv → test_compressed.mp4
    ffmpeg -i "%%i" -vcodec libx265 -crf 24 "%%~ni%suffix%.mp4"
)

这样输出文件名和原文件完全不重复,FFmpeg就能正常写入,不会再弹出覆盖提示或者报错了。

二、递归处理所有子文件夹

要让脚本自动遍历当前文件夹及所有子文件夹,只需要把普通的for命令换成for /r(/r参数表示递归遍历子目录),同时要保证压缩后的文件和原文件在同一子目录下,所以输出路径要用%%~dpni(d代表驱动器,p代表路径,n代表文件名):

完整的递归处理脚本:

@echo off
set suffix=_compressed
:: 递归遍历当前目录及所有子目录下的视频文件
for /r %%i in (*.mkv, *.mp4, *.mov) do (
    :: 输出文件和原文件同目录,文件名带_compressed后缀
    ffmpeg -i "%%i" -vcodec libx265 -crf 24 "%%~dpni%suffix%.mp4"
)

额外补充几个参数含义:

  • %%~dpni:提取原文件的驱动器+路径+不带扩展名的文件名,比如D:\videos\sub\test.mkv会被解析成D:\videos\sub\test,加上后缀和mp4扩展名后,最终输出D:\videos\sub\test_compressed.mp4。
  • 如果你之后要删除原文件,可以在ffmpeg命令执行成功后加一句del "%%i",但建议先测试几批压缩效果,确认没问题再添加删除命令哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:24:35