ffmpeg实现视频高斯模糊拓边效果
2023-11-29 本文已影响0人
码农私房菜
ECHO OFF
chcp 65001
echo === start ===
cls
title 终极多功能修复
:menu
cls
:start
set NowTime=%time%
::读取起始时间,时间格式为:13:01:05.95
echo 程序开始时间:%NowTime%
color 0A
echo.
echo ==============================
echo 请选择要进行的操作,然后按回车
echo ==============================
echo.
echo 1. .mp4
echo.
echo 2. .mp3
echo.
echo 3. .avi
echo.
echo 4. 去水印
echo.
echo 5. 播放文件
echo.
echo 6. 操作视频
echo.
echo Q .退出
echo.
echo.
:cho
set choice=
set varVideo="D:\video\video.m4s"
set varAudio="D:\video\audio.m4s"
set varOutput="creOutput"
set /p choice= 请选择:
IF NOT "%choice%"=="" SET choice=%choice:~0,1%
@REM if /i "%choice%"=="1" goto ip
@REM if /i "%choice%"=="2" goto setsave
@REM if /i "%choice%"=="3" goto kaiji
@REM if /i "%choice%"=="4" goto clean
@REM if /i "%choice%"=="Q" goto endd
if /i "%choice%"=="1" set choice=mp4 & set setSuffix=mp4 & goto goOk
if /i "%choice%"=="2" set choice=mp3 & set setSuffix=mp3 & goto goOk
if /i "%choice%"=="3" set choice=avi & set setSuffix=avi & goto goOk
if /i "%choice%"=="4" set choice=mp4 & set setSuffix=mp4 & goto GoToTheWatermark
if /i "%choice%"=="5" set choice=mp4 & set setSuffix=mp4 & goto GoToPlayer
if /i "%choice%"=="6" set choice=mp4 & set setSuffix=mp4 & goto GoOk1
if /i "%choice%"=="Q" goto endd
:goCho
echo 选择无效,请重新输入
echo.
goto cho
:goOk
set /p varVideo=请输入video文件绝对路径值:
echo video文件绝对路径: %varVideo%
set /p varAudio=请输入audio文件绝对路径值:
echo audio文件绝对路径: %varAudio%
set /p varOutput=请输入output文件名:
echo 输出文件路径: D:\video\output\%varOutput%.%setSuffix%
set /p varIsGo=是否数据准备就绪(Y/N):
if /i "%varIsGo%"=="Y" (
echo 。。。
goto goOk1
) else ( goto exit )
echo.
echo 程序正在初始化. . .
echo.
:goOk1
echo video文件绝对路径: %varVideo%
set /p varIsGo1=是否数据准备就绪(Y/N):
if /i "%varIsGo1%"=="Y" (
echo 。。。
) else (
set /p varVideo=请输入video文件绝对路径值:
echo video文件绝对路径: %varVideo%
)
if "%varVideo%"=="" (
echo 文件绝对路径不能为空!请重新输入
goto goOk1
)
echo ==============================
echo 请选择要进行的操作,然后按回车
echo ==============================
echo.
echo 1. 原始比例
echo.
echo 2. 分辨率为480P(480*800)及以上
echo.
echo 3. 裁剪黑边
echo.
echo 4. 高斯模糊拓边效果 横转竖 480:800
echo.
echo 5. 高斯模糊拓边效果 竖转横 640:360
echo.
echo 6. 等比缩放 640:360
echo.
echo 7. 视频剪切
echo.
echo Q .退出
echo.
echo.
:choChecked
set checked=
set checkedmax="ih"
set /p checked= 请选择:
IF NOT "%checked%"=="" SET checked=%checked:~0,1%
@REM pad='w=max(iw,trunc((ih/sar*16/9)/2+0.5)*2):h=max(ih,trunc((iw*sar*9/16)/2+0.5)*2):x=(ow-iw)/2:y=(oh-ih)/2'
if /i "%checked%"=="1" ffmpeg -i %varVideo% -i %varAudio% -vcodec h264 -acodec aac D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
if /i "%checked%"=="2" ffmpeg -i %varVideo% -i %varAudio% -s 480x800 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
if /i "%checked%"=="6" ffmpeg -i %varVideo% -i %varAudio% -vf scale=640:360 D:\video\output\%varOutput%.%setSuffix% -hide_banner & goto choCheckOk
if /i "%checked%"=="7" echo 初始化。。。 & goto gvideoCut
if /i "%checked%"=="3" echo 初始化。。。 & goto corpVideo
@REM if /i "%checked%"=="4" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=iw:800,boxblur=10:5[1];[b]scale=iw:ih*iw/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
@REM if /i "%checked%"=="4" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=iw:1920,boxblur=10:5[1];[b]scale=iw:ih*iw/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
if /i "%checked%"=="4" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=1080:1920,boxblur=10:5[1];[b]scale=1080:ih*1080/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
@REM if /i "%checked%"=="4" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=480:800,boxblur=10:5[1];[b]scale=480:ih*480/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
@REM if /i "%checked%"=="5" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=640:%checkedmax%,boxblur=10:5[1];[b]scale=iw*%checkedmax%/ih:%checkedmax%[2];[1][2]overlay=(W-w)/2:0" -c:v libx264 -crf 18 -preset veryfast -aspect 16:9 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
if /i "%checked%"=="5" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=1280:720,boxblur=10:5[1];[b]scale=iw*720/ih:720[2];[1][2]overlay=(W-w)/2:0" -c:v libx264 -crf 18 -preset veryfast -aspect 16:9 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
@REM if /i "%checked%"=="5" ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=640:360,boxblur=10:5[1];[b]scale=iw*360/ih:360[2];[1][2]overlay=(W-w)/2:0" -c:v libx264 -crf 18 -preset veryfast -aspect 16:9 -f mp4 D:\video\output\%varOutput%.%setSuffix% & goto choCheckOk
if /i "%checked%"=="Q" goto endd
echo 选择无效,请重新输入
echo.
goto choChecked
@REM 分辨率为640X360
@REM ffmpeg -i %varVideo% -i %varAudio% -vcodec h264 -acodec aac D:\video\output\%varOutput%.%choice%
@REM 分辨率为480P(480*800)及以上
@REM ffmpeg -i %varVideo% -i %varAudio% -s 480x800 D:\video\output\%varOutput%.%choice%
@REM 裁剪黑边
@REM ffmpeg -i %varVideo% -vf crop=640:360:(iw-ow)/2:0 D:\video\output\%varOutput%.%choice%
@REM ffmpeg实现视频高斯模糊拓边效果 转移动端
@REM ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=1080:1920,boxblur=10:5[1];[b]scale=1080:ih*1080/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%choice% -y
@REM ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=480:800,boxblur=10:5[1];[b]scale=480:ih*480/iw[2];[1][2]overlay=0:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -aspect 9:16 -f mp4 D:\video\output\%varOutput%.%choice% -y
@REM ffmpeg实现视频高斯模糊拓边效果 竖转横
@REM ffmpeg -i %varVideo% -vf "split[a][b];[a]scale=640:360,boxblur=10:5[1];[b]scale=iw*360/ih:360[2];[1][2]overlay=(W-w)/2:0" -c:v libx264 -crf 18 -preset veryfast -aspect 16:9 -f mp4 D:\video\output\%varOutput%.%choice% -y
echo %errorlevel%
if "%errorlevel%"=="1" goto goErr
:choCheckOk
set /p MakePreview=预览生成文件?(Y/N):
if /i "%MakePreview%"=="Y" ( ffplay -loop 1 D:\video\output\%varOutput%.%setSuffix% & goto GoToTheWatermark ) else ( goto GoToTheWatermark )
:gvideoCut
set /p varCropIsGo1=是否开始截取视频?(Y/N):
if /i "%varCropIsGo1%"=="Y" ( echo 进行截取打包 ) else ( goto exit )
set varStarTime=0:0:0
set varDurativeTime=
set varEndTime=
echo 输入截取开始时间: 例如:%varStarTime%
echo.
set /p varStarTime= 输入截取开始时间 :
echo 视频宽: %varStarTime%
echo.
set /p varDurativeTime= 输入截取持续时间 :
echo 视频宽: %varDurativeTime%
echo.
set /p varEndTime= 输入截取结束时间 :
echo 起始位置X : %varEndTime%
echo.
set cutParams= "cutTime=开始:%varStarTime%持续:%varDurativeTime% 结束:%varEndTime%"
echo 输入结果: %cutParams%
echo.
set /p varCropIsGo=是否生成文件?(Y/N):
if /i "%varCropIsGo%"=="Y" ( echo 进行打包 ) else ( goto exit )
echo.
if NOT "%varDurativeTime%"=="" ffmpeg -ss %varStarTime% -t %varDurativeTime% -i %varVideo% -i %varAudio% -vcodec copy -acodec copy D:\video\output\%varOutput%.%setSuffix%
if NOT "%varEndTime%"=="" ffmpeg -ss %varStarTime% -i %varVideo% -i %varAudio% -to %varEndTime% -vcodec copy -acodec copy D:\video\output\%varOutput%.%setSuffix%
goto choCheckOk
:corpVideo
set /p varCropIsGo1=是否开始裁剪视频?(Y/N):
if /i "%varCropIsGo1%"=="Y" ( echo 进行裁剪打包 ) else ( goto exit )
set varWCrop=640
set varHCrop=360
set varXCrop=2
set varYCrop=2
echo 输入裁剪尺寸: 输出宽:输出高:裁剪起始位置X:裁剪起始位置Y 例如:%varWCrop%:%varHCrop%:%varXCrop%:%varYCrop%
echo.
set /p varWCrop= 输入导出视频宽 :
echo 视频宽: %varWCrop%
echo.
set /p varHCrop= 输入导出视频高 :
echo 视频宽: %varHCrop%
echo.
set /p varXCrop= 裁剪起始位置X :
echo 起始位置X : %varXCrop%
echo.
set /p varYCrop= 裁剪起始位置Y :
echo 起始位置Y : %varYCrop%
echo.
set cropParams= "crop=%varWCrop%:%varHCrop%:%varXCrop%:%varYCrop%"
echo 输入结果: %cropParams%
echo.
set /p varCropIsGo=是否生成文件?(Y/N):
if /i "%varCropIsGo%"=="Y" ( echo 进行打包 ) else ( goto exit )
echo.
ffmpeg -i %varVideo% -vf %cropParams% D:\video\output\%varOutput%.%setSuffix%
goto choCheckOk
:GoToTheWatermark
set /p varGoToTheWatermark=是否需要去除水印(Y/N):
if /i "%varGoToTheWatermark%"=="Y" ( echo 进行去水印) else ( goto exit )
set varX=510
set varY=10
set varW=120
set varH=40
echo ==============================
echo 请按照步骤进行的操作,然后按回车
echo ==============================
if NOT "%varWatermark%"=="" goto argumentsRetype
echo.
set /p varWatermark=请输入需要去水印文件绝对路径值:
echo 去水印文件绝对路径: %varWatermark%
echo.
if "%varWatermark%"=="" (
echo 文件绝对路径不能为空!请重新输入
goto GoToTheWatermark
)
:argumentsRetype
echo 水印位置值: "x=%varX%:y=%varY%:w=%varW%:h=%varH%"
set /p varX=请输入水印起始位置X值:
echo 水印起始位置X值: %varX%
set /p varY=请输入水印起始位置Y值:
echo 水印起始位置Y值: %varY%
set /p varW=请输入水印宽度:
echo 水印宽度: %varW%
set /p varH=请输入水印高度:
echo 水印高度: %varH%
set varVideoWatermark="delogo=x=%varX%:y=%varY%:w=%varW%:h=%varH%"
echo 水印位置参数: %varVideoWatermark%
ffplay -i %varWatermark% -loop 1 -vf %varVideoWatermark%:show=1
set /p varGoToTheWatermarkOk=是否生成去除水印后视频(Y/N):
if /i "%varGoToTheWatermarkOk%"=="Y" ( echo 导出去水印后的文件 ) else ( goto GoToTheWatermark )
set /p setGoToTheWatermarkOk=是否手动设置多个水印位置(Y/N):
if /i "%setGoToTheWatermarkOk%"=="Y" (
echo 设置格式例如: "delogo=x=49:y=50:w=221:h=75,delogo=x=1014:y=678:w=234:h=35"
echo.
set /p handleInput=输入多个位置参数:
if NOT "%handleInput%" == "" set varVideoWatermark=%handleInput%
) else ( echo 正在导出去文件。。。 )
@REM ffmpeg -i "原视频" -vf "delogo=x=数字:y=数字:w=数字:h=数字" -c:a copy "新视频"
ffmpeg -i %varWatermark% -vf %varVideoWatermark% -c:a copy D:\video\output\去水印%varOutput%.mp4
echo ┌──────────────────────────────────────┐
@REM set /p = ■<nul
@REM for /L %%i in (1 1 10) do set /p a=■<nul&ping /n 1 127.0.0.1>nul
echo 100%%
echo └──────────────────────────────────────┘
set /p varGoToPlay=是否预览文件(Y/N):
if /i "%varGoToPlay%"=="Y" ( goto GoToPlayer ) else ( goto exit)
:GoToPlayer
set /p varGoToPlayer=输入预览文件路径:
if NOT "%varGoToPlayer%"=="" ( ffplay -loop 1 %varGoToPlayer% )
echo %errorlevel%
if "%errorlevel%"=="1" goto goErr
GOTO exit
:goErr
echo 生成视频文件失败!!!
:exit
PAUSE
@REM echo === end ===