ffmpeg批量处理(图片文字水印批量处理)

批量处理图片文字水印及其他批量处理写法

  • ffmpeg 批量处理写法总结
    • 视频批量图片水印
    • 批量字幕(批量滚动字幕)处理
    • 批量合并ts导出mp4
    • 批量合成总结
    • 批量脚本分享

ffmpeg 批量处理写法总结

找了好多个博客的文章作为参考,写出了自己想要的批量bat,在写批量之前,要先测试ffmpeg代码在cmd终端成功运行。

视频批量图片水印

cmd命令

ffmpeg -i birds.mp4 -i logo.png -filter_complex  "overlay=main_w-overlay_w:10" output.mp4

批量代码

for %%a in ("input*.mp4") do ffmpeg -i "%%a" -i logo.png -filter_complex "overlay=main_w-overlay_w:10" output\%%~na.mp4

示例

@ehco off
for %%a in ("D:\mp4\*.mp4") do ffmpeg -i "%%a" -i D:\mp4\logo12.png -filter_complex "overlay=main_w-overlay_w:10" D:\output\%%~na.mp4
pause

D:\mp4为输入路径,即:要处理的视频文件夹路径,
D:\mp4\logo12.png 为图片水印的存放路径
D:\output为输出路径
套用此批量记得修改正确的路径
overlay=main_w-overlay_w:10 右上角水印
左上角、左下角等自行查阅overlay参数设置,参考文献比较多,不再举例

批量字幕(批量滚动字幕)处理

终端命令

ffmpeg -i input.mp4 -vf "drawtext=text=测试字幕 :expansion=normal:fontfile=SimSun-ExtB 常规.ttf: y=h-line_h-80:x=w-(t-4.5)*w/10: [email protected]: fontsize=36" output.mp4 

批量代码

for %%a in ("input*.mp4") do ffmpeg -i "%%a" -vf "drawtext=text=测试字幕 :expansion=normal:fontfile=SimSun-ExtB 常规.ttf: y=h-line_h-80:x=w-(t-4.5)*w/10: [email protected]: fontsize=36" "output\%%~na.mp4"

示例

@ehco off
for %%a in ("D:\output\*.mp4") do ffmpeg -i "%%a" -vf "drawtext=text=测试字幕 :expansion=normal:fontfile=SimSun-ExtB 常规.ttf: y=h-line_h-80:x=w-(t-4.5)*w/10: [email protected]: fontsize=36" "D:\success\%%~na.mp4"
pause

##D:\output 为输入路径,即要处理的视频文件夹路径
测试字幕是要显示的字
fontfile=调用的字体,可以选择路径,即写法为 fontifle=C:\windows\fonts\XXXXX.ttf,一般字体会默认调用系统字体,如果字幕显示方块,解决方法:系统设置》时间和语音》语言》管理语言设置》更改系统区域设置》勾选强制使用utf8重启解决
y=h-line_h-80,80为可变参数,即显示的字幕高度,以底部为标准线,常规可能教小,建议20左右。
x=w-(t-4.5)*w/10,参数4.5是字幕出现的时间,10为速度,即每秒10字符,这个字符算法参考其他文献,感觉10还可以吧,其他速度自测。
[email protected]: fontsize=36,white字体颜色,@0.5,理解为几分之一的颜色,1为正常颜色,1以下教浅,如果字幕对视频有所遮挡,建议使用1以下,例如0.5,fontsize字体大小自测

批量合并ts导出mp4

cmd终端命令

ffmpeg -i concat:"ts1.ts|ts2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

批量

for %%a in ("input\*.ts") do ffmpeg -i "concat:%%a|片尾.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output\%%~na.mp4

示例

@ehco off
for %%a in ("D:\ts\*.ts") do ffmpeg -i "concat:%%a|D:\cs\mp4\endts\su.ts" -acodec copy -vcodec copy -absf aac_adtstoasc D:\output\%%~na.mp4
pause

一般用来合成片尾

批量合成总结

批量的写法相对于单个命令行就多了一个for循环。

批量脚本分享

@echo off
set /p folder=请设置文件所在的文件夹路径,如:D:\mp4:
echo %folder%
md "%folder%\ts"
md "%folder%\success"
md "D:\output"
echo 3s后将进入下一步加图片水印
@ping -n 3 127.1 >nul 2>nul
::注意logo的路径
for %%a in ("%folder%\*.mp4") do ffmpeg -i "%%a" -i D:\logo12.png -filter_complex "overlay=main_w-overlay_w:10" D:\output\%%~na.mp4
echo 加图片水印执行成功,5s后将进入下一步滚动字幕
@ping -n 5 127.1 >nul 2>nul
for %%a in ("D:\output\*.mp4") do ffmpeg -i "%%a" -vf "drawtext=text=测试字幕 :expansion=normal:fontfile=SimSun-ExtB 常规.ttf: y=h-line_h-80:x=w-(t-4.5)*w/10: [email protected]: fontsize=36,drawtext=text=测试字幕: fontfile=SimSun-ExtB 常规.ttf: y=h-line_h-80:x=w-(t-105)*w/10: [email protected]: fontsize=36" "%folder%\success\%%~na.mp4"
echo 滚动字幕执行成功,5s后将进入下一步合成片尾
@ping -n 5 127.1 >nul 2>nul
for %%a in ("%folder%\success\*.mp4") do ffmpeg -i %%a -vcodec copy -acodec copy -vbsf h264_mp4toannexb %folder%\ts\%%~na.ts
del /f /q %%a in "D:\output\*.mp4"
for %%a in ("%folder%\ts\*.ts") do ffmpeg -i "concat:%%a|D:\cs\mp4\endts\su.ts" -acodec copy -vcodec copy -absf aac_adtstoasc D:\output\%%~na.mp4
echo 等待合成结束 5s后将删除换成缓存文件
del /f /q %%a in "%folder%\success\*.mp4"
del /f /q %%a in "%folder%\*.mp4"
del /f /q %%a in "%folder%\ts\*.ts"
del /f /q %%a in "%folder%\success\*.txt"
rd /s /q %folder%\ts
rd /s /q %folder%\success
echo 全部执行完毕 
pause

/手动输入需要处理的视频文件夹
/手动修改logo和片尾ts的位置
/手动添加字幕
/自动创建D:\output
/自动在视频目录下创建ts、success文件夹
/运行完毕后自动删除临时文件夹及临时文件
其他修改自测,
本文来自初学者,大神莫笑。

你可能感兴趣的:(ffmpeg)