【问题标题】:ffmpeg/for loop: How to make ffmpeg or cmd loop stops after it founds an error?ffmpeg/for 循环:如何使 ffmpeg 或 cmd 循环在发现错误后停止?
【发布时间】:2021-08-14 16:00:12
【问题描述】:

我正在尝试创建一个 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 个 gifs

问题是当视频持续时间低于 1 小时时,bat 文件会继续运行并创建空的 gif 文件,直到达到 720 个 gif 文件

我需要知道我应该使用什么命令。

我试过-abort_on empty_output-abort_on empty_output_stream-xerror

但这些都不起作用

我也是用for循环命令,所以不知道是ffmpeg问题还是for循环问题

帮帮我!

【问题讨论】:

    标签: for-loop batch-file ffmpeg


    【解决方案1】:

    建议您不要使用固定的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"
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多