gpt4 book ai didi

for-loop - ffmpeg/for 循环 : How to make ffmpeg or cmd loop stops after it founds an error?

转载 作者:行者123 更新时间:2023-12-04 23:11:15 26 4
gpt4 key购买 nike

我正在尝试创建一个 bat 文件来从视频中创建多个 gif,到目前为止我做得还不错。
我设法创建了这个命令

@echo off

FOR /L %%A IN (0,5,3600) DO (ffmpeg -ss %%A -t 3 -i "%~1" -vf "fps=10,scale=360:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 -fs 1000000 "output %%~nxA.gif")
问题是我对 1h 视频使用命令,这将创建 720 个 gif
问题是当视频持续时间低于 1 小时时,bat 文件继续运行并创建空 gif 文件,直到达到 720 个 gif 文件
我需要知道我应该使用什么命令。
我试过 -abort_on empty_output , -abort_on empty_output_stream , 和 -xerror但这些都不起作用
另外我正在使用 for 循环命令,因此我不知道这是 ffmpeg 问题还是 for 循环问题
帮我!

最佳答案

而不是使用固定的 3600 , 建议你使用ffprobe获取视频的持续时间。
要么通过另一个for循环......

@ECHO off

FOR /F "delims=" %%A IN ('ffprobe -v 0 -show_entries format^=duration -of compact^=p^=0:nk^=1 "%~1"') DO ^
FOR /L %%B IN (0,5,%%A) DO ^
ffmpeg -ss %%B -t 3 -i "%~1" -vf "fps=10,scale=360:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "%~n1_%%B.gif"
...或使用变量...
@ECHO off

FOR /F "delims=" %%A IN ('ffprobe -v 0 -show_entries format^=duration -of compact^=p^=0:nk^=1 "%~1"') DO SET dur=%%A
FOR /L %%A IN (0,5,%dur%) DO ^
ffmpeg -ss %%A -t 3 -i "%~1" -vf "fps=10,scale=360:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "%~n1_%%A.gif"

关于for-loop - ffmpeg/for 循环 : How to make ffmpeg or cmd loop stops after it founds an error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67704393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com