美文网首页
ffmpeg 常用转换命令

ffmpeg 常用转换命令

作者: LCSan | 来源:发表于2021-08-25 20:09 被阅读0次

历史使用过的脚本归档记录

bat脚本通用切目录

@echo off
cd %~dp0
%~d0
  1. 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
  1. mp4转gif
ffmpeg -y -i %1 -r 24 -s 1024x576 -b:v 100k %1.gif
  1. 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
  1. mp4截取视频片段
ffmpeg -y -i %1 -vcodec copy -acodec copy -ss 00:00:00 -to 00:05:15 %1.MP4
  1. 压缩码率
ffmpeg -y -i %1 -b:v 1500k -bufsize 1500k -maxrate 2000k %1.MP4
  1. 视频截取某一秒的图片,PS:scale是转换分辨率,这里要注意宽,高转换
ffmpeg -y -i %1 -r 1 -ss 00:00:01 -t 00:00:01 -vf scale=1920:1080 aa.png
  1. 批量修改视频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!

相关文章

网友评论

      本文标题:ffmpeg 常用转换命令

      本文链接:https://www.haomeiwen.com/subject/bcyeiltx.html