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 ===
上一篇下一篇

猜你喜欢

热点阅读