gpt4 book ai didi

video - ffmpeg 视频到图像序列批处理文件

转载 作者:行者123 更新时间:2023-12-04 23:30:47 25 4
gpt4 key购买 nike

我正在使用 ffmpeg 将 .avi 文件转换为 .png 图像序列。这个工作得很好:

@ ECHO OFF

FOR %%A IN (*.avi) DO CALL :avi2png "%%A"

:avi2png
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%%03d.png"

ECHO.
GOTO :EOF

但我希望脚本从当前正在处理的 .avi 文件中提取不带扩展名的名称。这是图像序列的样子: 当前avi001.png , currentavi002.png 等等我想出的脚本不起作用:
@ ECHO OFF

FOR %%A IN (*.avi) DO CALL :avi2png "%%A"

:avi2png
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%%~nA%%03d.png"

ECHO.
GOTO :EOF

我都试过了 %~nA%%~nA ,但无济于事。脚本返回这个:
Couldn't open file : 
av_interleaved_write_frame(): Input/output error.

我是一个完全的外行,并欢迎每一点帮助。

最佳答案

你不能引用%%A :avi2png 中的变量。尝试这个:

@ ECHO OFF

set count=0
FOR %%A IN (*.avi) DO CALL :avi2png "%%A"
goto :eof

:avi2png
set /a count=count+1
set Ncount=00%count%
set Ncount=%Ncount:~-3%
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%~n1%Ncount%.png"

ECHO.
GOTO :EOF

如果当前目录中有一个名为 my_movie.avi 的文件 ffmpeg将创建 png my_movie001.png .

当你 call来自 for 的标签循环,你不能再使用你原来的 for循环变量(在本例中为 %%A),而不是 :label :label 之后的行被视为单独的批处理文件和所有变量被视为传递给批处理文件的开关。

所以这...
Call :label one two thee

...与此一起使用...
:label
Echo %1, %2, %3.

...产生这样的输出:
one, two, three.

就像它是一个独立的批处理文件一样。

哦,还有 %%A %%A%% 从来没有提到过类似的东西(或 %A% ,一个完全不同的变量)。如果你这样做(和 %%A==Hello )结果将是 Hello% ,并且可能会在代码中的某处吃掉一个字符,从而导致奇怪的错误。

关于video - ffmpeg 视频到图像序列批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12201359/

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