方便简洁极致压缩视频

场景:有些视频删掉可惜,不删占用空间,几秒钟的视频有几百到1G的大小,还有一些监控视频,有时候想调用,发现被覆盖了,如果要留着,空间占用太多,所以想有方法把视频极致的压缩,能看清楚但体积尽量的小,所以我吧问题丢给了deepseek,让他利用ffmpeg,写一个bat脚本。

FFmpeg下载FFmpeg备用下载

效果展示:

未压缩大小6.04m.h265.4k
已压缩0.7m.h265.1080p
1.6G压缩到28M

压缩参数:

:: 视频参数
set "RESOLUTION=-2:720"     :: 分辨率设置(保持宽高比),格式为 宽度:高度
                           :: 示例:-2:480(480p),1280:-2(宽度1280保持比例)
                           :: 默认-2:720表示高度压缩到720p,宽度自动计算

set "CRF=28"               :: 压缩质量(0-51,越小质量越高)
                           :: 建议范围:23-28(肉眼无明显质量损失)
                           :: 极致压缩推荐28-35(可感知质量下降)

set "PRESET=slow"          :: 编码器预设(可选:ultrafast, superfast, veryfast, faster, fast, 
                           :: medium, slow, slower, veryslow)
                           :: 越慢压缩率越高,文件越小,但编码时间越长

set "VIDEO_CODEC=libx265"  :: 视频编码器(推荐libx265/HEVC压缩率最高)
                           :: 兼容性考虑可用libx264(但压缩率较低)

:: 音频参数
set "AUDIO_BITRATE=64k"    :: 音频比特率(建议32k-128k)
                           :: 极致压缩可降至32k,正常使用64k-96k

set "AUDIO_CHANNELS=2"     :: 音频声道数(1单声道,2立体声)

脚本代码:

@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

::##############################################################################
:: 用户可修改参数区
::##############################################################################
set "FFMPEG_PATH=C:\FFmpeg\bin" ::ffmpeg所在路径
set "OUTPUT_DIR=CompressedVideos" ::保存文件夹
set "RESOLUTION=-2:720" ::分辨率,默认-2:720表示高度压缩到720p,宽度自动计算
set "CRF=28" ::压缩质量(0-51,越小质量越高)|建议范围:23-28(肉眼无明显质量损失)| 极致压缩推荐28-35(可感知质量下降)
set "PRESET=slow" ::编码器预设(可选:ultrafast, superfast, veryfast, faster, fast,medium, slow, slower, veryslow)| 越慢压缩率越高,文件越小,但编码时间越长
set "VIDEO_CODEC=libx264"
set "AUDIO_BITRATE=64k"
set "AUDIO_CHANNELS=2"
set "FILE_EXTS=*.ts *.mp4 *.mkv *.mov *.avi"

::##############################################################################
:: 脚本核心逻辑修正版
::##############################################################################
if not exist "%FFMPEG_PATH%\ffmpeg.exe" (
    echo [ERROR] FFmpeg路径错误:%FFMPEG_PATH%
    timeout /t 15
    exit /b 1
)

if defined OUTPUT_DIR (
    if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
    set "OUTPUT_FLAG=1"
)

if "%~1"=="" (call :batch_process) else (call :drag_drop_process "%~1")

timeout /t 30
exit /b 0

::──────────────────────────────────────────────────────────────────────────────
:drag_drop_process
set "input=%~1"
set "filename=%~nx1"
call :compress "!input!" "!filename!"
exit /b

::──────────────────────────────────────────────────────────────────────────────
:batch_process
echo 正在扫描当前目录视频文件...
for %%i in (%FILE_EXTS%) do (
    if exist "%%i" (
        set "input=%%i"
        set "filename=%%~nxi"
        call :compress "!input!" "!filename!"
    )
)
exit /b

::──────────────────────────────────────────────────────────────────────────────
:compress
setlocal
set "input=%~1"
set "filename=%~2"

:: 输入文件存在性检查
if not exist "!input!" (
    echo [错误] 输入文件不存在:!input!
    endlocal
    exit /b 1
)

:: 编码格式后缀生成
if /i "!VIDEO_CODEC!"=="libx264" (
    set "codec_suffix=h264"
) else if /i "!VIDEO_CODEC!"=="libx265" (
    set "codec_suffix=h265"
) else (
    set "codec_suffix=!VIDEO_CODEC!"
)

:: 解析分辨率
for /f "tokens=1,2 delims=:" %%a in ("%RESOLUTION%") do (
    set "width=%%a"
    set "height=%%b"
)

:: 构建输出路径(强制UTF-8处理)
set "base_name=!filename:%~x1=!"
if defined OUTPUT_FLAG (
    set "output=!OUTPUT_DIR!\!base_name!_!codec_suffix!_!height!p.mp4"
) else (
    set "output=!input:~0,-4!_!codec_suffix!_!height!p.mp4"
)

echo 正在处理:"!filename!"
echo 输出格式:!codec_suffix!_!height!p

:: FFmpeg执行命令(添加双引号处理空格路径)
"%FFMPEG_PATH%\ffmpeg.exe" -hide_banner -y -i "!input!" ^
-c:v %VIDEO_CODEC% ^
-crf %CRF% ^
-preset %PRESET% ^
-vf "scale=%RESOLUTION%" ^
-c:a aac ^
-b:a %AUDIO_BITRATE% ^
-ac %AUDIO_CHANNELS% ^
-f mp4 ^
"!output!"

endlocal
exit /b

视频片段截取工具

@echo off
setlocal enabledelayedexpansion

:: 配置FFmpeg路径(结尾不要带反斜杠)
set "FFMPEG_PATH=C:\FFmpeg\bin"

:: 检查文件拖放操作
if "%~1"=="" (
    echo 请将视频文件拖拽到此批处理文件上
    pause
    exit /b 1
)

:: 设置输入输出路径
set "input_file=%~f1"
set "output_file=%~dpn1_trimmed%~x1"

:: 验证文件存在性
if not exist "%input_file%" (
    echo 错误:文件不存在
    echo "%input_file%"
    pause
    exit /b 1
)

:: 验证FFmpeg可执行文件
if not exist "%FFMPEG_PATH%\ffmpeg.exe" (
    echo FFmpeg未找到于指定路径:
    echo "%FFMPEG_PATH%"
    pause
    exit /b 1
)

:: 执行快速截取命令
"%FFMPEG_PATH%\ffmpeg" -hide_banner -y -ss 290 -i "%input_file%" -t 3 -c copy "%output_file%"

:: 结果反馈
if errorlevel 1 (
    echo 截取失败,请检查以下可能原因:
    echo 1. 视频长度不足10秒
    echo 2. 文件格式不支持流拷贝
    echo 3. 输入文件损坏
) else (
    echo 成功生成10秒片段:
    echo "%output_file%"
)

pause
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇