[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

数字不连续
不包括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

评分人数

TOP

回复 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

评分人数

bat小白,请多指教!谢谢!

TOP

回复 2# 77七


   大佬好,生成的多个视频名称为:out_1.mp4、out_3.mp4、out_5.mp4、这样排序的,
我想把这些视频按照名称从out_1.mp4开始拼接为一个视频~
然后把之前生成的out_!p1!.mp4的视频删除。
我自己弄的合并并没有按照顺序合并,还是您帮我写一下代码吧~

TOP

回复 2# 77七


    感谢大佬,你真是太厉害了~

TOP

  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
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表