【问题标题】:ffmpeg video to image sequence batch fileffmpeg 视频到图像序列批处理文件
【发布时间】:2012-08-25 10:42:19
【问题描述】:

我正在使用 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 文件中提取不带扩展名的名称。这就是图像序列的样子:currentavi001.pngcurrentavi002.png 等。脚本 I想出的不起作用:

@ 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.

我是一个完全的门外汉,欢迎任何帮助。

【问题讨论】:

    标签: video batch-file ffmpeg batch-processing


    【解决方案1】:

    我无法得到上述答案来为我工作。我采用 2 文件方法,每个批处理文件中有 1 行代码,每秒创建一个文件名为 ORIGINALFILENAME_#####.png 的图像。根据您的 ffmpeg.exe 文件的位置以及您为文件命名的任何内容更新您的路径以创建拇指。我正在使用 Windows 7,这对我有用。

    包含视频的文件夹中的批处理文件(随意命名)以调用 CreateThumbs.bat 文件:

    for /r %1 %%i in (*.avi) do "c:\Program Files (x86)\ffmpeg\CreateThumbs.bat" %%i

    在ffmpeg文件夹中的CreatThumbs.bat来创建拇指:

    "c:\Program Files (x86)\ffmpeg\bin\ffmpeg.exe" -i %1 -r 1 -f image2 %~n1_%%05d.png

    【讨论】:

      【解决方案2】:

      您不能在 :avi2png 中引用 %%A 变量。试试这个:

      @ 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%,并且可能会在代码中的某个地方吃掉一个字符,从而导致奇怪的错误。

      【讨论】:

      • 感谢詹姆斯的彻底回复。对于像我这样的菜鸟来说,批处理脚本就像是小心翼翼地穿过雷区。当我回到家并可以访问我的计算机而不是我的手机时,我会试试这个代码。
      • @DaleCooper 如果我的答案适合您,请选择它作为答案。 :)
      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 2015-08-22
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2022-01-24
      • 2015-07-23
      • 2019-07-25
      相关资源
      最近更新 更多