ffmpeg 常用转换命令
2021-08-25 本文已影响0人
LCSan
历史使用过的脚本归档记录
bat脚本通用切目录
@echo off
cd %~dp0
%~d0
- m3u8下载并转MP4
set NOW_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
ffmpeg -y -i "http://xxx.m3u8" -vcodec copy -acodec copy -absf aac_adtstoasc output%NOW_TIME%.mp4
- mp4转gif
ffmpeg -y -i %1 -r 24 -s 1024x576 -b:v 100k %1.gif
- mp4转分辨率,再转换成TS格式
ffmpeg -y -i %1 -vf scale=1080:1920 output.mp4
ffmpeg -y -i output.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb bootvideo.ts
- mp4截取视频片段
ffmpeg -y -i %1 -vcodec copy -acodec copy -ss 00:00:00 -to 00:05:15 %1.MP4
- 压缩码率
ffmpeg -y -i %1 -b:v 1500k -bufsize 1500k -maxrate 2000k %1.MP4
- 视频截取某一秒的图片,PS:scale是转换分辨率,这里要注意宽,高转换
ffmpeg -y -i %1 -r 1 -ss 00:00:01 -t 00:00:01 -vf scale=1920:1080 aa.png
- 批量修改视频meta信息
@echo off
echo ┌─────────────────────────────────────────────────────────────────────┐
echo │ │
echo │ 将要处理的MP4所在文件夹,拖放到这个窗口里面,按Enter[回车键]继续 │
echo │ 处理后的视频将放在文件夹\data目录下 │
echo │ │
echo └─────────────────────────────────────────────────────────────────────┘
set /p mulu=文件夹:
rem 去掉前后引号
set "mulu=%mulu:"=%"
echo 开始处理,文件夹为:%mulu%
cd %~dp0
%~d0
rem 新建处理目录
IF NOT EXIST "%mulu%\data" MD "%mulu%\data"
rem 遍历所有MP4视频文件,添加metadata,保存到data目录下
for /f "delims=" %%a in ('dir /b "%mulu%\*.mp4"') do (ffmpeg -y -i "%mulu%\%%~a" -i FFMETADATAFILE.txt -map_metadata 1 -codec copy "%mulu%\data\%%~a")
echo 处理完成
pause
8.随机读取一行内容
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION
dir /b /a-d *.mp4 > test.txt
FOR /F "TOKENS=*" %%i IN (test.txt) DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
ECHO !r%s%!
pause
9.指定目录下多个视频片段目录,按目录命令随机取视频合并
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
cd /d %~dp0
set fn=视频合并.bat
if not "%~nx0"=="%fn%" copy %0 "%fn%" /y >nul&start "" "%fn%"&del %0
set msg=正在处理,请等待。。。
title %fn:~,-4% By 瞌睡蟲子 & color 0C
echo ┌─────────────────────────────────────────────────────────────────────┐
echo │ │
echo │ 将要处理的MP4所在文件夹,拖放到这个窗口里面,按Enter[回车键]继续 │
echo │ 处理后的视频将放在文件夹\data目录下 │
echo │ │
echo └─────────────────────────────────────────────────────────────────────┘
set /p mulu=文件夹:
rem 去掉前后引号
set "mulu=%mulu:"=%"
set /p size=生成视频数:
rem 新建处理目录
IF NOT EXIST .\data MD .\data
color 0A & cls & title %msg% & echo 清理缓存数据… &ping 0 -n "3">nul&cls
echo 开始清理缓存数据,此过程可能耗时间,请耐心等待…
del /f /s /q data.txt
color 0A & cls & title %msg% & echo 检索视频文件… &ping 0 -n "3">nul&cls
echo 开始检索视频文件,此过程可能耗时间,请耐心等待… & echo,
for /f "delims=" %%a in ('dir /ad/s/b "%mulu%"') do (
dir /a-d/s/b "%%~a\*.mp4">"%%~a\data.txt"
echo 视频检索完成:"%%~a\data.txt"
echo %%~a\data.txt>>data.txt
)
color 0A & cls & title %msg% & echo 即将开始合成… &ping 0 -n "3">nul&cls
echo 开始合成,此过程可能耗时间,请耐心等待…
for /l %%j in (1,1,%size%) do (
del /f /s /q filelist.txt
for /f "delims=" %%a in (data.txt) do (
call 随机文件.bat %%~a filelist.txt
)
more filelist.txt
for /f "tokens=*" %%i in (filelist.txt) do (call set b=!b!%%~ni)
echo 命名为:!b!.mp4
ffmpeg -y -f concat -safe 0 -i filelist.txt -b:v 8000k -bufsize 8000k -maxrate 10000 -r 30 -c copy .\data\!b!.mp4
)
echo 处理完成
pause
随机文件.bat
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem 所有文件夹
rem dir /b /ad /S/B . > test1.txt
rem 所有文件
rem dir /b /a-d /S/B *.mp4 > test.txt
FOR /F "TOKENS=*" %%i IN (%1) DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
ECHO file '!r%s%!'>>%2
10.前、背景视频叠加,音频合并
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem 所有文件夹
rem dir /b /ad /S/B . > test1.txt
rem 所有文件
rem dir /b /a-d /S/B *.mp4 > test.txt
FOR /F "TOKENS=*" %%i IN ('dir /a-d/s/b "%2"') DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
ECHO !r%s%!
rem 视频合并
ffmpeg -y -i "%1" -i "!r%s%!" -filter_complex "[0:v][1:v] overlay=0:0" -b:v 8000k -bufsize 8000k -maxrate 10000 -r 30 .\data_1\%~n1.mp4
FOR /F "TOKENS=*" %%i IN ('dir /a-d/s/b "%3"') DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
ECHO !r%s%!
rem 音频合并
ffmpeg -y -i .\data_1\%~n1.mp4 -i "!r%s%!" -b:v 8000k -bufsize 8000k -maxrate 10000 -r 30 -c copy "%1"
11、获取路径信息
echo %~n1
for /f "tokens=*" %%i in (%1) do (
rem 盘符
set a=%%~di
rem 路径
set b=%%~pi
rem 文件名
set c=%%~ni
rem 文件后缀
set d=%%~xi
)
echo %a% %b% %c% %d%
12、音频合成
@ECHO %DBG% OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem 所有文件夹
rem dir /b /ad /S/B . > test1.txt
rem 所有文件
rem dir /b /a-d /S/B *.mp4 > test.txt
FOR /F "TOKENS=*" %%i IN ('dir /a-d/s/b "%1"') DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
SET o=!r%s%!
FOR /F "TOKENS=*" %%i IN ('dir /a-d/s/b "%2"') DO (SET /A h+=1 & SET r!h!=%%i)
SET /A s=%RANDOM%%%%h%+1
SET p=!r%s%!
for /f "tokens=*" %%i in ("!o!") do (
rem 文件名
set c=%%~ni
rem 文件后缀
set d=%%~xi
)
SET NOW_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
ECHO ----------------------------------------
ECHO !o!
ECHO !p!
ECHO .\data\!c!!NOW_TIME!!d!
ffmpeg -y -i "!o!" -i "!p!" -filter_complex "[0:v][1:v] overlay=0:0" -b:v 8000k -bufsize 8000k -maxrate 10000 -r 30 .\data\!c!!NOW_TIME!!d!