找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 4728|回复: 12

[文件操作] bat调用ffmpeg,怎样改成无论视频分辨率多少,按自适应嵌入图片呢?

[复制链接]
发表于 2025-7-13 17:58:33 | 显示全部楼层 |阅读模式
通过AI写了个,640*480的成功了,但是换个视频分辨率,右上角位置就乱套,怎样通过以下代码基础,实现无论视频分辨率多少,都是同等顶部位置,右上角,图标大小固定呢?
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. :: 名称: AddWatermarkToVideos.bat
  4. :: 版本: 1.4
  5. :: 功能列表:
  6. :: 1. 自动为当前目录下所有 .mkv/.mp4/.m4v 视频添加右上角BMP水印
  7. :: 2. 支持 BMP 格式水印图片(默认 watermark.bmp)
  8. :: 3. 每次运行前会自动清理已有_watermarked文件
  9. :: 4. 水印尺寸、位置由全局变量控制,便于统一修改
  10. :: 参数说明:
  11. :: - WATERMARK_WIDTH/HEIGHT 控制水印大小
  12. :: - WATERMARK_RIGHT_MARGIN/TOP_MARGIN 控制位置偏移
  13. :: - 输出文件名格式:原文件名_watermarked.扩展名
  14. :: 命令参数解释:
  15. :: - -y         覆盖输出文件不提示
  16. :: - -i         输入文件
  17. :: - -filter_complex  使用滤镜调整水印大小并叠加到视频右上角
  18. :: - -c:a copy  直接复制音频流,提高效率
  19. :: 使用示例:
  20. :: 将脚本、watermark.bmp 和视频放在同一目录后双击运行

  21. :: 设置 ffmpeg 路径
  22. set "FFMPEG=F:\Software\sub\alass.batch-bat\ffmpeg\bin\ffmpeg.exe"

  23. :: 设置水印尺寸(像素),便于统一修改
  24. set "WATERMARK_WIDTH=90"
  25. set "WATERMARK_HEIGHT=37"

  26. :: 设置水印位置偏移量(像素),便于统一修改
  27. set "WATERMARK_TOP_MARGIN=49"
  28. set "WATERMARK_RIGHT_MARGIN=52"
  29. :: 删除已有的_watermarked结尾的视频文件
  30. echo 正在清理旧的_watermarked文件...
  31. del /q *_watermarked.mp4 *_watermarked.mkv *_watermarked.m4v 2>nul

  32. :: 检查是否存在水印图片
  33. if not exist "watermark.bmp" (
  34.     echo 错误:未找到水印文件 watermark.bmp!请确认文件存在。
  35.     pause
  36.     exit /b
  37. )

  38. :: 显示开始处理信息
  39. echo 正在为当前目录下的视频添加右上角BMP水印...
  40. echo 支持格式:.mkv .mp4 .m4v .wmv
  41. echo.

  42. :: 初始化计数器用于判断是否有匹配文件
  43. set index=0

  44. :: 遍历当前目录下的所有 .mkv、.mp4、.m4v .wmv文件
  45. for %%f in (*.mkv *.mp4 *.m4v *.wmv) do (
  46.     set /a index+=1
  47.     set "filename=%%f"
  48.    
  49.     echo 正在处理: !filename!
  50.    
  51.     :: 提取文件名和扩展名
  52.     set "basename=!filename:~0,-4!"
  53.     set "ext=!filename:~-4!"
  54.    
  55.     :: 构造输出文件名
  56.     set "output_file=!basename!_watermarked!ext!"
  57.    
  58.     :: 调用 ffmpeg 添加水印,位置为右上角,使用 overlay_w 更准确
  59.     "%FFMPEG%" -y -i "%%f" -i watermark.bmp ^
  60.     -filter_complex "[1:v]scale=!WATERMARK_WIDTH!:!WATERMARK_HEIGHT![wm];[0:v][wm]overlay=main_w-overlay_w-!WATERMARK_RIGHT_MARGIN!:!WATERMARK_TOP_MARGIN!" ^
  61.     -c:a copy ^
  62.     "!output_file!"
  63. )

  64. :: 判断是否处理了任何文件
  65. if %index% equ 0 (
  66.     echo.
  67.     echo 没有找到任何支持的视频文件(.mkv、.mp4、.m4v *.wmv)!
  68.     echo 请将视频文件和水印图片放在同一目录下。
  69.     echo.
  70.     pause
  71.     exit /b
  72. )

  73. :: 显示处理完成信息及生成的文件列表
  74. echo.
  75. echo *********************************************
  76. echo 所有视频已成功添加水印!
  77. echo 带水印的文件列表:
  78. dir /b *_watermarked.*
  79. echo *********************************************
  80. echo.

  81. :: 等待用户按键退出
  82. echo 按任意键退出...
  83. pause >nul

  84. endlocal
  85. exit /b
复制代码
发表于 2025-7-13 23:19:00 | 显示全部楼层
回复 1# 1139054012

用67-70行的核心代码测试了几个分辨率不同的视频均无问题,从本坛第三方下载一个高版本试试(http://bcn.bathome.net/s/tool/index.html?key=ffmpeg)...
 楼主| 发表于 2025-7-13 23:51:45 | 显示全部楼层
回复 2# aloha20200628

嵌入图片本身没问题,问题是现在这个顶部位置,右侧位置,图标长宽都是微调一个个测试几个小时测试出来的,只适配这一个分辨率,如果用其他高于这个分辨率视频,图标就会变小,整个顶部位置,右侧位置,图标长宽全乱套,希望能无论分辨率多高高,播放器的图标位置大小都不变

   
发表于 2025-7-14 00:47:39 | 显示全部楼层
1米的绳子,距离一端0.2米做了标记,标记了位置,现在改为 10米的绳子,再等比做个标记,那么很简单
10x(0.2/1)=2,只需距离一端2米位置标记即可
是这回事不
 楼主| 发表于 2025-7-14 00:57:27 | 显示全部楼层
回复 4# 77七


    对,4个参数动态
发表于 2025-7-14 01:18:46 | 显示全部楼层
除去可能重复处理外 ,不是已经按像素自适应了?? 播放时位置变动只是播放窗口变动看起来变动吧?? 最好截个图出来让大家看看
还是说是要按比例自适应??屏幕比例??分辨率比例??播放窗口比例应该不行吧
 楼主| 发表于 2025-7-14 07:45:48 | 显示全部楼层
回复 6# Five66


    5楼的预览图就是 希望同样的窗口下,无关分辨率,右侧都是能够按左侧相同的X/Y轴,长宽保持一致
发表于 2025-7-14 10:09:49 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-7-14 11:00 编辑

回复 3# 1139054012

这是视频播放器实时等比缩放播放窗口而导致的,水印叠加到视频后已被 ‘焊死’ 在源视频中,不再是两个分离的视频单元,一定会随源视频的等比缩放一起被播放器自动调整其位置和大小... 也许ffmpeg还有其他门道可循,待熟知者出手相助吧
发表于 2025-7-14 13:18:04 | 显示全部楼层
如楼主截图会存在黑色区域,如果遇到2000x1000,和1000x2000的视频,水印只能放在中心了。
发表于 2025-7-14 23:18:40 | 显示全部楼层
回复 7# 1139054012


    啊 ,不是直接用同一个就行了??调好一个后 ,全部都用这个 ,不行的话大概就是视频画面里本身有黑边 ,难搞
还有最好按ctrl+E截图对比 ,播放时画面可能被处理过了
发表于 2025-7-15 01:07:36 | 显示全部楼层
本帖最后由 Five66 于 2025-7-15 01:33 编辑

3楼图是播放时的图 ,不是实际的图
3楼图的左边原图是720x540 ,播放时为1440x1080 ,画面放大了2倍 ,水印也放大了2倍
而右边边原图是1024x768 ,播放时为1440x1080 ,画面放大了1.40625倍 ,水印也放大了1.40625倍
原图水印大小相同情况下 ,播放时会因为放大或缩小倍率不同而不同的
想要统一得找个基准并调整来适配播放时的不同倍率 ,不过这样或许大概是适配不了所有倍率吧(???) ,毕竟水印一旦加上去就不能调整了 ,而播放时的倍率可以调整(例如调整窗口大小)
 楼主| 发表于 2025-7-15 15:28:13 | 显示全部楼层
回复 11# Five66


    所以我现在还在一个个调,只能按相同播放器窗口,X/Y轴和长宽对比,显示一个接近的像素位置,然后就算放大播放器窗口也不影响了
发表于 2025-7-16 00:04:53 | 显示全部楼层
回复 12# 1139054012


    用1楼的改了下 ,以480为基准自动适配播放时的大小(可能有点误差) ,试试看看吧

  1. @set @do_not_save_as_utf8=1;/*&echo off&goto :begin

  2. :: 名称: AddWatermarkToVideos.bat
  3. :: 版本: 1.4
  4. :: 功能列表:
  5. :: 1. 自动为当前目录下所有 .mkv/.mp4/.m4v 视频添加右上角BMP水印
  6. :: 2. 支持 BMP 格式水印图片(默认 watermark.bmp)
  7. :: 3. 每次运行前会自动清理已有_watermarked文件
  8. :: 4. 水印尺寸、位置由全局变量控制,便于统一修改
  9. :: 参数说明:
  10. :: - WATERMARK_WIDTH/HEIGHT 控制水印大小
  11. :: - WATERMARK_RIGHT_MARGIN/TOP_MARGIN 控制位置偏移
  12. :: - 输出文件名格式:原文件名_watermarked.扩展名
  13. :: 命令参数解释:
  14. :: - -y         覆盖输出文件不提示
  15. :: - -i         输入文件
  16. :: - -filter_complex  使用滤镜调整水印大小并叠加到视频右上角
  17. :: - -c:a copy  直接复制音频流,提高效率
  18. :: 使用示例:
  19. :: 将脚本、watermark.bmp 和视频放在同一目录后双击运行

  20. :begin

  21. rem 设置 ffmpeg 路径  
  22. set "FFMPEG=F:\Software\sub\alass.batch-bat\ffmpeg\bin\ffmpeg.exe"

  23. rem 设置水印尺寸(像素),便于统一修改  
  24. set "WATERMARK_WIDTH=90"
  25. set "WATERMARK_HEIGHT=40"

  26. rem 设置水印位置偏移量(像素),便于统一修改  
  27. set "WATERMARK_TOP_MARGIN=20"
  28. set "WATERMARK_RIGHT_MARGIN=20"
  29. rem 删除已有的_watermarked结尾的视频文件  
  30. echo 正在清理旧的_watermarked文件...
  31. del /q *_watermarked.mp4 *_watermarked.mkv *_watermarked.m4v 2>nul

  32. rem 检查是否存在水印图片  
  33. if not exist "watermark.bmp" (
  34.     echo 错误:未找到水印文件 watermark.bmp!请确认文件存在。  
  35.     pause
  36.     exit /b
  37. )

  38. rem 显示开始处理信息  
  39. echo 正在为当前目录下的视频添加右上角BMP水印...  
  40. echo 支持格式:.mkv .mp4 .m4v .wmv
  41. echo.

  42. rem 初始化计数器用于判断是否有匹配文件  
  43. set index=0

  44. set tttttttt=q_we#r$t$y$u#io_p
  45. md "%tttttttt%"

  46. rem 遍历当前目录下的所有 .mkv、.mp4、.m4v .wmv文件  
  47. for %%f in (*.mkv *.mp4 *.m4v *.wmv) do (
  48.     set /a index+=1
  49.     set "filename=%%f"

  50. for /f  %%z in ('^;"%FFMPEG%" -i "%%f" 2^>^&1^|cscript //nologo //e:jscript "%~f0"') do set _=%%z
  51. setlocal enabledelayedexpansion
  52. if !_! neq 0 (
  53. set /a WATERMARK_WIDTH=WATERMARK_WIDTH*!_!/1000
  54. set /a WATERMARK_HEIGHT=WATERMARK_HEIGHT*!_!/1000
  55. set /a WATERMARK_RIGHT_MARGIN=WATERMARK_RIGHT_MARGIN*!_!/1000
  56. set /a WATERMARK_TOP_MARGIN=WATERMARK_TOP_MARGIN*!_!/1000
  57. )

  58.     echo 正在处理: !filename!  
  59.    
  60.     rem 提取文件名和扩展名  
  61.     set "basename=!filename:~0,-4!"
  62.     set "ext=!filename:~-4!"
  63.    
  64.     rem 构造输出文件名  
  65.     set "output_file=!basename!_watermarked!ext!"
  66.    
  67.     rem 调用 ffmpeg 添加水印,位置为右上角,使用 overlay_w 更准确  
  68.     "%FFMPEG%" -y -i "%%f" -i watermark.bmp ^
  69.     -filter_complex "[1:v]scale=!WATERMARK_WIDTH!:!WATERMARK_HEIGHT![wm];[0:v][wm]overlay=main_w-overlay_w-!WATERMARK_RIGHT_MARGIN!:!WATERMARK_TOP_MARGIN!" ^
  70.     -c:a copy ^
  71.     "!tttttttt!\!output_file!"
  72. endlocal
  73. )

  74. rem 判断是否处理了任何文件  
  75. if %index% equ 0 (
  76.     echo.
  77.     echo 没有找到任何支持的视频文件(.mkv、.mp4、.m4v *.wmv)!  
  78.     echo 请将视频文件和水印图片放在同一目录下。  
  79.     echo.
  80.     pause
  81.     exit /b
  82. )

  83. move "%tttttttt%\*" .
  84. timeout /t 1
  85. rmdir "%tttttttt%"

  86. rem 显示处理完成信息及生成的文件列表  
  87. echo.
  88. echo *********************************************
  89. echo 所有视频已成功添加水印!  
  90. echo 带水印的文件列表:  
  91. dir /b *_watermarked.*
  92. echo *********************************************
  93. echo.

  94. rem 等待用户按键退出  
  95. pause&exit /b 0 */

  96. //jscript statement
  97. var x=WScript.StdIn.ReadAll().match(/Stream #0:0.*?Video:.*/);
  98. if(x){
  99. var y=x[0].match(/[1-9]\d+x\d+/g)[0];
  100. WScript.Echo(Math.round(y.split('x').pop()/480*1000));
  101. }else{
  102. WScript.Echo(0);
  103. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:06 , Processed in 0.021892 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表