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

[文件操作] 【已解决】批处理ffmpeg多张图片各使用一种动态效果的问题

[复制链接]
发表于 2024-3-28 10:09:35 | 显示全部楼层 |阅读模式
本帖最后由 877 于 2024-3-28 12:57 编辑

以下代码可以正常运行处理当前目录内的1.jpg和2.jpg合成1个视频,1.jpg和2.jpg分别应用了不同的移动效果~

当前目录内还有很多jpg,我想让其按照数字序号从小到大依次使用移动效果

例如后面应该是3.jpg使用1.jpg的移动效果,4.jpg使用2.jpg的移动效果....以此类推...

求大佬出手~~~提前表示感谢!!
  1. ffmpeg -y -hwaccel_device 0 -i 1.jpg -i 2.jpg -filter_complex "[0:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),(ih-ih/zoom)/2,y+3)':d=175[v0];[1:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-3)':d=175[v1];[v0][v1]concat=n=2:v=1:a=0,format=yuv420p[v]" -map "[v]" -c:v h264_nvenc -gpu 0 out.mp4
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-3-28 11:38:33 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /l %%l in (1,2,10000) do (
  5.         set /a p1=%%l,p2=%%l+1
  6.         if exist "!p2!.jpg" (
  7.                 ffmpeg -y -hwaccel_device 0 -i !p1!.jpg -i !p2!.jpg -filter_complex "[0:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),(ih-ih/zoom)/2,y+3)':d=175[v0];[1:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-3)':d=175[v1];[v0][v1]concat=n=2:v=1:a=0,format=yuv420p[v]" -map "[v]" -c:v h264_nvenc -gpu 0 out_!p1!.mp4
  8.         )
  9. )
  10. endlocal
  11. pause
复制代码
 楼主| 发表于 2024-3-28 12:56:48 | 显示全部楼层
回复 2# 77七


    感谢大佬,你真是太厉害了~
 楼主| 发表于 2024-3-28 13:58:45 | 显示全部楼层
回复 2# 77七


   大佬好,生成的多个视频名称为:out_1.mp4、out_3.mp4、out_5.mp4、这样排序的,
我想把这些视频按照名称从out_1.mp4开始拼接为一个视频~
然后把之前生成的out_!p1!.mp4的视频删除。
我自己弄的合并并没有按照顺序合并,还是您帮我写一下代码吧~
发表于 2024-3-28 14:32:53 | 显示全部楼层
回复 4# 877


  
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /l %%l in (1,2,10000) do (
  5.         set /a p1=%%l,p2=%%l+1
  6.         if exist "!p2!.jpg" (
  7.                 ffmpeg -y -hwaccel_device 0 -i !p1!.jpg -i !p2!.jpg -filter_complex "[0:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),(ih-ih/zoom)/2,y+3)':d=175[v0];[1:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-3)':d=175[v1];[v0][v1]concat=n=2:v=1:a=0,format=yuv420p[v]" -map "[v]" -c:v h264_nvenc -gpu 0 out_!p1!.mp4
  8.         )
  9.         if exist "out_!p1!.mp4" (
  10.                 >>x.txt echo file '%~dp0out_!p1!.mp4'
  11.         )
  12. )
  13. endlocal
  14. ffmpeg -f concat -safe 0 -i x.txt -c copy output.mp4
  15. del out_*.mp4;x.txt
  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2024-3-28 14:33:18 | 显示全部楼层
数字不连续
不包括0开头的数字

  1. @echo off&pause

  2. for /f "delims=" %%i in ('dir /b *.jpg 2^>nul ^|findstr /x "[1-9][0-9]*\.jpg"') do (
  3. set _@var=10000%%~ni
  4. for /f  %%j in ('echo %%_@var:~-5%%') do set _@@%%j=%%i
  5. )

  6. for /f "tokens=2 delims==" %%f in ('set _@@') do (
  7. if not defined _@file1 (
  8. set _@file1=%%~nf) else if not defined _@file2 (
  9. set _@file2=%%~nf) else (
  10. call :aaa
  11. set _@file1=&set _@file2=
  12. )
  13. )

  14. echo,&echo,
  15. if defined _@file1 echo warning : "%_@file1%.jpg" nothing to do
  16. pause&exit/b

  17. :aaa
  18. ffmpeg -y -hwaccel_device 0 -i "%_@file1%.jpg" -i "%_@file2%.jpg" -filter_complex "[0:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,-1),(ih-ih/zoom)/2,y+3)':d=175[v0];[1:v]zoompan='1.5':x='if(lte(on,1),(iw-iw/zoom)/2,x)':y='if(lte(on,1),(ih/zoom)/2,y-3)':d=175[v1];[v0][v1]concat=n=2:v=1:a=0,format=yuv420p[v]" -map "[v]" -c:v h264_nvenc -gpu 0 "out_%_@file1%_%_@file2%.mp4"
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 04:11 , Processed in 0.019528 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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