目录
一、下载
1,到官网下载
(选择合适自己电脑版本的下载)
2,解压缩
(看心情建一个文件夹,然后解压到里面,只要你可以找到)
二、配置环境
1,打开设置,搜系统变量
2,点击环境变量
3,找到系统变量的path
4,点击path
三、验证
1,win+r键同时按,输入cmd
2,输入ffmpeg -version
显示和俺的一样就成功了
四、预处理
1,复制视频所在文件夹
2,win+r键同时按,输入cmd
3,输入cd 刚刚复制的路径
五、处理代码
1,简单代码
1. 转格式(mp4转avi)
ffmpeg -i 1.mp4 out.avi
2. 提音频
ffmpeg -i 1.mp4 -q:a 0 -map a out.mp3
3. 剪视频(从第30秒开始,取10秒的视频)
ffmpeg -i 1.mp4 -ss 00:00:30 -t 00:00:10 -c copy out.mp4
4. 合并多个视频
首先,创建一个包含所有要合并文件的列表文件sb.txt:
file '1.mp4'
file '2.mp4'
file '3.mp4'
然后(合并视频1、2、3)
ffmpeg -f concat -safe 0 -i sb.txt -c copy out.mp4
5. 改分辨率(调成720p)
ffmpeg -i 1.mp4 -vf scale=1280:720 out_720p.mp4
6. 加水印(水印图片覆盖到右上角 (10,10)位置)
ffmpeg -i 1.mp4 -i 水印.png -filter_complex "overlay=10:10" out.mp4
7. 改帧率(调成24FPS)
ffmpeg -i 1.mp4 -r 24 out_24fps.mp4
8. 调音量(音量减半)
ffmpeg -i 1.mp4 -af "volume=0.5" out.mp4
9. 截图(截第10秒)
ffmpeg -i 1.mp4 -ss 00:00:10 -vframes 1 out.png
10. 剪画面(剪左上角200x200的区域)
ffmpeg -i 1.mp4 -filter:v "crop=200:200:0:0" out.mp4
11. 调速度(2倍速)
ffmpeg -i 1.mp4 -filter:v "setpts=0.5*PTS" out.mp4
12. 转为GIF
ffmpeg -i 1.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif out.gif
13. 静音
ffmpeg -i 1.mp4 -an out.mp4
14. 调颜色(加亮度)
ffmpeg -i 1.mp4 -vf "eq=brightness=0.06" out.mp4
15. 调比特率(设为1000kbps)
ffmpeg -i 1.mp4 -b:v 1000k out.mp4
16. 转音频格式(MP3转为WAV)
ffmpeg -i 1.mp3 out.wav
17.用m3u8链接下载MP4视频
ffmpeg -i "链接" -c copy output.mp4
2,遍历所有mp4,选序号,合并视频
chcp 65001
@echo off
SETLOCAL enabledelayedexpansion
:: 设置要遍历的文件夹路径
set folder_path=%cd%
:main_loop
cls
:: 遍历文件夹中的视频文件并按字母顺序编号
echo 正在遍历文件夹 %folder_path% 中的视频文件...
set count=1
for /f "tokens=*" %%i in ('dir /b /a-d "%folder_path%\*.mp4" ^| sort') do (
set "file!count!=%%~ni"
echo !count!. %%~ni
set /a count+=1
)
:: 输入要操作的视频文件序号
set /p file_index="请输入要操作的视频文件序号="
if "%file_index%"=="" goto end
set video_file=!file%file_index%!
:: 输入要提取的片段个数
set /p num_segments="提取片段的个数="
set /a count=1
:: 循环获取每个片段的起始和结束时间,并提取
:loop
if %count% leq %num_segments% (
set /p start_time="第!count!个片段的起始时间="
set /p end_time="第!count!个片段的结束时间="
echo 正在提取第!count!个片段,请稍候...
ffmpeg -i "%video_file%.mp4" -ss !start_time! -to !end_time! -c copy "out_!count!.mp4"
if errorlevel 1 (
echo 提取第!count!个片段失败。
) else (
echo 第!count!个片段提取完成。
set /a count+=1
goto loop
)
)
:: 创建concat协议的列表文件
echo 正在创建concat协议的列表文件,请稍候...
(for /l %%i in (1,1,%num_segments%) do (
echo file 'out_%%i.mp4'
)) > concat_list.txt
if errorlevel 1 (
echo 创建列表文件失败。
) else (
echo 列表文件创建成功。
)
:: 合并片段
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy "%video_file%.mp4"
if errorlevel 1 (
echo 合并片段失败。
) else (
echo 片段已合并为 "%video_file%.mp4"。
)
:: 清理临时文件
echo 正在清理临时文件,请稍候...
del out_*.mp4
del concat_list.txt
if errorlevel 1 (
echo 清理文件失败。
)
:: 回到选择界面
goto main_loop
:end
ENDLOCAL
3,遍历所有mp4,选序号,转换格式
chcp 65001
@echo off
SETLOCAL enabledelayedexpansion
:: 设置要遍历的文件夹路径
set folder_path=%cd%
:main_loop
cls
:: 遍历文件夹中的MP4文件并按字母顺序编号
echo 正在遍历文件夹 %folder_path% 中的MP4文件...
set count=1
for /f "tokens=*" %%i in ('dir /b /a-d "%folder_path%\*.mp4" ^| sort') do (
set "file!count!=%%~ni"
echo !count!. %%~ni
set /a count+=1
)
:: 输入要操作的文件序号
set /p file_index="输入文件序号(所有文件,输入all):"
if "%file_index%"=="" goto end
:: 输入目标格式
set /p target_format="输入目标格式(如mkv, avi, mov等):"
if "%target_format%"=="" goto end
:: 转换单个文件
if not "%file_index%"=="all" (
set video_file=!file%file_index%!
echo 正在转换文件 "%video_file%.mp4" 到 %target_format% 格式...
ffmpeg -i "%folder_path%\!video_file!.mp4" "%folder_path%\!video_file!.%target_format%"
if errorlevel 1 (
echo 文件转换失败。
) else (
echo 文件已成功转换为 "%video_file%.%target_format%"。
)
goto end
)
:: 转换所有文件
if "%file_index%"=="all" (
for /f "tokens=*" %%i in ('dir /b /a-d "%folder_path%\*.mp4" ^| sort') do (
echo 正在转换文件 "%%i" 到 %target_format% 格式...
ffmpeg -i "%folder_path%\%%i" "%folder_path%\%%~ni.%target_format%"
if errorlevel 1 (
echo 文件 "%%i" 转换失败。
) else (
echo 文件 "%%i" 已成功转换为 "%%~ni.%target_format%"。
)
)
)
:end
ENDLOCAL
4,遍历所有文件,选格式和序号,合并
chcp 65001
@echo off
SETLOCAL enabledelayedexpansion
:: 设置要遍历的文件夹路径
set folder_path=%cd%
:main_loop
cls
:: 选择要合并的文件格式
echo 请选择要合并的文件格式:
echo 1. mp3
echo 2. mp4
echo 3. mov
set /p format_index="输入格式序号: "
if "%format_index%"=="1" (
set file_extension=.mp3
) else if "%format_index%"=="2" (
set file_extension=.mp4
) else if "%format_index%"=="3" (
set file_extension=.mov
) else (
echo 无效的格式序号
goto end
)
:: 遍历文件夹中的选择格式文件并按字母顺序编号
echo 正在遍历文件夹 %folder_path% 中的 %file_extension% 文件...
set count=1
for %%i in ("%folder_path%\*%file_extension%") do (
set "file!count!=%%~nxi"
echo !count!. %%~nxi
set /a count+=1
)
:: 输入要合并的文件序号
set /p file_index="输入文件序号(合并所有文件输入all): "
set files_to_merge=
if "%file_index%"=="all" (
for /l %%i in (1, 1, %count%-1) do (
echo file '%folder_path%\!file%%i!' >> merge_list.txt
)
) else (
echo 输入要合并的文件的序号,用空格分隔(如: 1 3):
set /p indices="输入文件序号: "
for %%i in (%indices%) do (
echo file '%folder_path%\!file%%i!' >> merge_list.txt
)
)
:: 合并文件
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i merge_list.txt -c copy "%folder_path%\new%file_extension%"
if errorlevel 1 (
echo 合并文件失败。
) else (
echo 文件已合并为 "%folder_path%\new%file_extension%"。
)
:: 清理临时文件
del merge_list.txt
if errorlevel 1 (
echo 清理文件失败。
)
:: 回到选择界面
goto main_loop
:end
ENDLOCAL