FFmpeg下载及使用(视频处理)

目录

一、下载

二、配置环境

三、验证

四、预处理

五、处理代码

1,简单代码

2,遍历所有mp4,选序号,合并视频

3,遍历所有mp4,选序号,转换格式

4,遍历所有文件,选格式和序号,合并


一、下载

1,到官网下载

Download FFmpeg

(选择合适自己电脑版本的下载)

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值