FFmpeg 批处理脚本大全 🎬

FFmpeg 下载地址:https://github.com/BtbN/FFmpeg-Builds/releases

🔧 使用前请将 ffmpeg.exe 放在目标文件同一目录下


✨ 核心功能特点

  • 🔄 格式转换:支持多种音视频格式互转,包括 MP4、TS、MKV 等常见格式
  • ✂️ 剪辑处理:精确去除片头片尾,添加淡入淡出效果
  • 📸 画面捕获:灵活的视频截图功能,支持时间点截图和封面提取
  • 🔍 元数据管理:查看和清理视频元数据信息
  • 🚫 水印去除:精准定位并去除视频中的水印
  • 🖼️ 封面添加:为视频文件添加自定义封面图片
  • 📦 视频压缩:使用 H264/H265 编码高效压缩视频体积

📋 目录导航


📦 一、音视频格式转换

1. 🔄 双击-视频格式转换为MP4

1
2
3
4
5
6
7
8
9
10
11
12
@echo off & setlocal enabledelayedexpansion

for %%a in (*.ts *.mkv *.mov *.avi *.flv *.mpg *.rmvb *.wmv) do (
set "filename=%%~na"
ffmpeg -i "%%a" -c copy -y "!filename!.mp4"
)

rem pause
exit

rem 双击运行,目录下的视频文件转换成MP4
rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:此脚本可将多种视频格式(TS、MKV、MOV、AVI、FLV、MPG、RMVB、WMV)转换为MP4格式,保持原视频质量和编码,仅转换容器格式。

2. 🔄 双击-视频格式转换为TS

1
2
3
4
5
6
7
8
9
10
11
12
@echo off & setlocal enabledelayedexpansion

for %%a in (*.mp4 *.mkv *.mov *.avi *.flv *.mpg *.rmvb *.wmv) do (
set "filename=%%~na"
ffmpeg -i "%%a" -c copy -y "!filename!.ts"
)

rem pause
exit

rem 双击运行,目录下的视频文件转换成ts
rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:将多种视频格式转换为TS流格式,适合流媒体传输和播放。

3. 🖼️ 拖入-视频格式转换为JPG

1
2
3
4
5
6
7
8
9
10
@echo off
cd /d "%~dp0"
for %%F in (%*) do call :main %%F
rem pause
exit

:main
ffmpeg -i "%~1" -c copy "%~n1".jpg -y

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:将视频文件拖放到此脚本上,会自动提取视频第一帧保存为JPG图片。适用于快速获取视频封面。


✂️ 二、去片头片尾

1. 📁 双击+新建文件夹,去片头片尾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off & setlocal enabledelayedexpansion

rem 设定片头片尾长度,格式为 HH:mm:ss.fff
set "s1=00:00:05.0" :: 需去除的片头时间
set "s2=00:00:00.0" :: 需去除的片尾时间

for /f "tokens=1-4delims=:." %%a in ("%s2%") do (
set /a "t2=(1%%a %% 100 *3600 + 1%%b %% 100 * 60 + 1%%c %% 100) * 1000 + 1%%d %% 1000"
)

md 去片头+尾 2>nul
for %%i in (*.avi *.mkv *.mp4 *.flv) do (
for /f "tokens=2-5delims=:., " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
set /a "t=(1%%a%%100*3600+1%%b%%100*60+1%%c%%100)*1000+1%%d0%%1000,t-=t2,ms=t%%1000,t/=1000"
set /a h=t/3600,m=t%%3600/60,s=t%%60,h+=100,m+=100,s+=100,ms+=1000
set "t=!h:~1!:!m:~1!:!s:~1!.!ms:~1!"
ffmpeg -ss !s1! -to !t! -accurate_seek -i "%%i" -c copy -avoid_negative_ts 1 "去片头+尾\%%i" -y
)
)

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:批量去除视频文件的片头和片尾,处理后的视频保存在新建的”去片头+尾”文件夹中。

2. 🔖 双击+加后缀,去片头片尾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off & setlocal enabledelayedexpansion

rem 设定片头片尾长度,格式为 HH:mm:ss.fff
set "s1=00:00:10.0" :: 需去除的片头时间
set "s2=00:00:00.0" :: 需去除的片尾时间

for /f "tokens=1-4delims=:." %%a in ("%s2%") do (
set /a "t2=(1%%a %% 100 *3600 + 1%%b %% 100 * 60 + 1%%c %% 100) * 1000 + 1%%d %% 1000"
)

for %%i in (*.avi *.mkv *.mp4 *.flv) do (
for /f "tokens=2-5delims=:., " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
set /a "t=(1%%a%%100*3600+1%%b%%100*60+1%%c%%100)*1000+1%%d0%%1000,t-=t2,ms=t%%1000,t/=1000"
set /a h=t/3600,m=t%%3600/60,s=t%%60,h+=100,m+=100,s+=100,ms+=1000
set "t=!h:~1!:!m:~1!:!s:~1!.!ms:~1!"
set "filename=%%~na"
ffmpeg -ss !s1! -to !t! -accurate_seek -i "%%i" -c copy -avoid_negative_ts 1 -y "!%%~dpi!%%~ni-ok.mp4"
)
)

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:去除视频片头片尾后,在原文件名后添加”-ok”后缀,保留在原目录。


🎞️ 三、淡入淡出

1. 📁 双击-新建文件夹-淡入淡出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@echo off & setlocal enabledelayedexpansion

rem ======================================
set "s1=0" :: 淡入开始时间
set "s2=5" :: 淡入持续时间
set "s3=5" :: 淡出开始时间
set "s4=5" :: 淡出持续时间
rem ======================================

for /f "tokens=1-4delims=:." %%a in ("%s3%") do (
set /a "t2=("%s3%") * 1000 + 1%%d %% 1000"
)

md 淡入淡出 2>nul
for %%i in (*.avi *.mkv *.mp4 *.flv) do (
for /f "tokens=2-5delims=:., " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
set /a "t=(1%%a%%100*3600+1%%b%%100*60+1%%c%%100)*1000+1%%d0%%1000,t-=t2,ms=t%%1000,t/=1000
ffmpeg -i "%%i" -vf "fade=t=in:st=!s1!:d=!s2!,fade=t=out:st=!t!:d=!s4!" -c:a copy -c:v libx264 -preset 6 -crf 17 "淡入淡出\%%i" -y
)
)

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

rem ============fade=t=in:st=%s1%:d=%s2%,================
rem st=!s1!开始淡入时间:set "s1=0"第0秒开始淡入
rem d=!s2!持续淡入时间:set "s2=5"持续5秒
rem ============fade=t=out:st=!t!:d=%s4%================
rem st=!t!开始淡出时间:t=视频总秒数-减去s3设定的值
rem d=!s4!持续淡出时间:set "s4=5"持续5秒

rem CRF参数:取值范围通常在 0 到 51 之间,其中 0 表示无损编码,51 表示最差质量编码。(通常17-20)

rem Preset参数:指定编码速度和质量的平衡。数字越小,速度越慢,质量越高,体积越大-preset ultrafast等于-preset (通常6-8)

功能说明:为视频添加淡入淡出效果,处理后的视频保存在”淡入淡出”文件夹中。

2. 📁 拖入-新建文件夹-淡入淡出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@echo off & setlocal enabledelayedexpansion

rem ======================================
set "s1=0" :: 淡入开始时间
set "s2=5" :: 淡入持续时间
set "s3=5" :: 淡出开始时间
set "s4=5" :: 淡出持续时间
rem ======================================

for /f "tokens=1-4delims=:." %%a in ("%s3%") do (
set /a "t2=("%s3%") * 1000 + 1%%d %% 1000"
)

md 淡入淡出 2>nul
for %%i in ("%~1") do (
for /f "tokens=2-5delims=:., " %%a in ('ffmpeg -i "%%i" 2^>^&1 ^| find "Duration:"') do (
set /a "t=(1%%a%%100*3600+1%%b%%100*60+1%%c%%100)*1000+1%%d0%%1000,t-=t2,ms=t%%1000,t/=1000
ffmpeg -i "%%i" -vf "fade=t=in:st=!s1!:d=!s2!,fade=t=out:st=!t!:d=!s4!" -c:a copy -c:v libx264 -preset 6 -crf 17 "淡入淡出\%~n1".mp4 -y
)
)

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

rem ============fade=t=in:st=%s1%:d=%s2%,================
rem st=!s1!开始淡入时间:set "s1=0"第0秒开始淡入
rem d=!s2!持续淡入时间:set "s2=5"持续5秒
rem ============fade=t=out:st=!t!:d=%s4%================
rem st=!t!开始淡出时间:t=视频总秒数-减去s3设定的值
rem d=!s4!持续淡出时间:set "s4=5"持续5秒

rem CRF参数:取值范围通常在 0 到 51 之间,其中 0 表示无损编码,51 表示最差质量编码。(通常17-20)
rem Preset参数:指定编码速度和质量的平衡。数字越小,速度越慢,质量越高,体积越大-preset ultrafast等于-preset (通常6-8)

功能说明:将视频文件拖放到此脚本上,会为其添加淡入淡出效果并保存到”淡入淡出”文件夹。


📸 四、视频截图

1. 🖼️ 拖入-视频封面截图

1
2
3
4
5
6
7
8
9
10
11
12
@echo off
:softshare
if "%~1"=="" goto :eof

ffmpeg -i "%~1" -start_at_zero -vframes 1 "%~dpn1.jpg" -y
shift&goto :softshare

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。
rem 文件名添加后缀(截图)输出到同一目录下

功能说明:提取视频第一帧作为封面图片,保存为JPG格式。

2. ⏱️ 拖入-时间线视频截图

1
2
3
4
5
6
7
8
9
10
11
@echo off
:softshare
if "%~1"=="" goto :eof
ffmpeg -i "%~1" -ss 00:01:00 -qscale:v 1 -frames:v 1 "%~dpn1_ok.jpg"
shift&goto :softshare

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。
rem 文件名添加后缀(截图)输出到同一目录下

功能说明:在视频的指定时间点(此处为1分钟处)截图,保存为JPG格式。


🔍 五、视频元数据

1. 📊 拖入-获取视频元数据

1
2
3
@echo off
ffmpeg -i "%~1" -y
pause

功能说明:显示视频文件的详细元数据信息,包括编码格式、时长、比特率等。

2. 🗑️ 双击-新建文件夹-视频元数据-清空

1
2
3
4
5
6
7
8
9
@echo off & setlocal

md 已清空元数据 2>nul
for %%i in (*.avi *.mkv *.mp4 *.flv) do (ffmpeg -i "%%i" -map_metadata -1 -c:v copy -c:a copy "已清空元数据\%%i" -y
)
rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:清除视频文件中的所有元数据信息,处理后的视频保存在”已清空元数据”文件夹中。


🚫 六、去水印

1. 🚫 拖入-去单水印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
:softshare
if "%~1"=="" goto :eof

ffmpeg -i "%~1" -vf "delogo=x=79:y=36:w=95:h=88:show=0" -c:a copy "%~dpn1-ok.mp4" -y

shift&goto :softshare

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。
rem 1.截取的图片用IrfanView 64软件打开,会在左上方出现(Selection:79,36;95x88)
rem 2.其中的"delogo=x=79:y=36:w=95:h=88:show=0"
rem show=0表示关闭跑码

功能说明:去除视频中的单个水印,需要预先确定水印的位置和尺寸。

2. 🚫 拖入-去双水印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
:softshare
if "%~1"=="" goto :eof

ffmpeg -i "%~1" -vf "delogo=x=79:y=36:w=95:h=88,delogo=x=1280:y=77:w=557:h=78:show=0" -c:a copy "%~dpn1-ok.mp4" -y

shift&goto :softshare

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。
rem 1.截取的图片用IrfanView 64软件打开,会在左上方出现(Selection:79,36;95x88)
rem 2.其中的"delogo=x=79:y=36:w=95:h=88:show=0"
rem show=0表示关闭跑码

功能说明:同时去除视频中的两个水印,需要预先确定每个水印的位置和尺寸。


🖼️ 七、添加封面

1. 📁 同时拖入mp4和jpg-新建文件夹-添加封面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
setlocal enabledelayedexpansion

set "video_file="
set "image_file="

for %%f in (%*) do (
if /i "%%~xf"==".mp4" set "video_file=%%~f"
if /i "%%~xf"==".jpg" set "image_file=%%~f"
)

if not defined video_file (
echo No MP4 file provided. Please drag and drop an MP4 file onto the script.
pause
exit /b
)

if not defined image_file (
echo No JPG file provided. Please drag and drop a JPG file onto the script.
pause
exit /b
)

set "output_folder=%~dp0Output"
if not exist "!output_folder!" mkdir "!output_folder!"

set "output_file=%~dp0Output\%~n1.mp4"
if /i "%~x1" neq ".mp4" (
set "output_file=%~dp0Output\%~n2.mp4"
)

ffmpeg -i "!video_file!" -i "!image_file!" -map 0 -map 1 -c copy -disposition:v:1 attached_pic -metadata:s:v comment="Cover (Front)" "!output_file!" -y

echo Cover added successfully.

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:将MP4视频文件和JPG图片同时拖放到此脚本上,会将图片添加为视频封面,处理后的视频保存在”Output”文件夹中。

2. 🔖 同时拖入mp4和jpg-加后缀-添加封面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@echo off
setlocal enabledelayedexpansion

set "video_file="
set "image_file="

for %%f in (%*) do (
if /i "%%~xf"==".mp4" set "video_file=%%~f"
if /i "%%~xf"==".jpg" set "image_file=%%~f"
)

if not defined video_file (
echo No MP4 file provided. Please drag and drop an MP4 file onto the script.
pause
exit /b
)

if not defined image_file (
echo No JPG file provided. Please drag and drop a JPG file onto the script.
pause
exit /b
)

set "output_file=!video_file:.mp4=-ok.mp4!"

ffmpeg -i "!video_file!" -i "!image_file!" -map 0 -map 1 -c copy -disposition:v:1 attached_pic -metadata:s:v comment="Cover (Front)" "!output_file!" -y

echo Cover added successfully.

rem pause
exit

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:将MP4视频文件和JPG图片同时拖放到此脚本上,会将图片添加为视频封面,并在原文件名后添加”-ok”后缀。


📦 八、视频压缩

1. 🔄 拖入-H264(crf 18 preset 7)

1
2
3
4
5
6
7
8
9
10
11
@echo off
cd /d "%~dp0"
for %%F in (%*) do call :main %%F
rem pause
exit

:main
md h264 2>nul
ffmpeg -i "%~1" -threads 3 -y -c:v libx264 -crf 18 -preset 7 -c:a copy "h264\%~n1".mp4

rem 上面的rem pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:使用H264编码压缩视频,平衡文件大小和质量,处理后的视频保存在”h264”文件夹中。

2. 🔄 拖入-H265(crf=17 preset=8)

1
2
3
4
5
6
7
8
9
10
11
@echo off
cd /d "%~dp0"
for %%F in (%*) do call :main %%F
rem pause
exit

:main
md h265 2>nul
ffmpeg -i "%~1" -threads 3 -y -c:v libx265 -x265-params crf=17:preset=8 -c:a copy "h265\%~n1".mp4

rem 上面的pause为暂停命令,去掉rem者为启用(有错误的时候可开启-查看错误)。

功能说明:使用更高效的H265编码压缩视频,在相同质量下文件更小,处理后的视频保存在”h265”文件夹中。

3. 📊 crf和preset 参数说明

CRF参数说明
取值范围通常在 0 到 51 之间,其中 0 表示无损编码,51 表示最差质量编码。(17-20都可以获得较好质量)

Preset参数说明

  • -preset ultrafast 等于 -preset 0
  • -preset superfast 等于 -preset 1
  • -preset veryfast 等于 -preset 2
  • -preset faster 等于 -preset 3
  • -preset fast 等于 -preset 4
  • -preset medium 等于 -preset 5
  • -preset slow 等于 -preset 6
  • -preset slower 等于 -preset 7
  • -preset veryslow 等于 -preset 8
  • -preset placebo 等于 -preset 9

数字越小,编码速度越快,但压缩效率越低,文件体积越大。通常推荐使用5-8之间的预设值。


💡 使用技巧与注意事项

  1. 📂 文件备份:在处理重要视频前,建议先备份原文件
  2. ⚙️ 参数调整:根据实际需求调整CRF和Preset参数,平衡质量和文件大小
  3. 🖥️ 硬件要求:视频处理对CPU要求较高,处理大文件时请耐心等待
  4. 🔍 水印定位:使用IrfanView等工具精确定位水印坐标和尺寸
  5. 📝 日志查看:遇到问题时,取消pause注释查看详细错误信息

🎯 适用场景

  • 个人视频编辑:快速处理家庭视频、旅行记录
  • 内容创作者:为社交媒体平台准备视频内容
  • 教育培训:制作教学视频材料
  • 企业宣传:准备产品演示和宣传视频

通过以上FFmpeg批处理脚本,您可以高效地完成各种视频处理任务,无需复杂的手动操作!🎥