Windows CMD 批处理脚本 FFmpeg

Posted

技术标签:

【中文标题】Windows CMD 批处理脚本 FFmpeg【英文标题】:Windows CMD Batch Script FFmpeg 【发布时间】:2021-05-30 19:44:03 【问题描述】:

我创建了一个批处理文件 (.bat),它使用 FFmpeg 将各种视频(带有 *.mov 或 *.mp4 文件扩展名)从输入文件夹转码到输出文件夹(带有扩展名 *.mkv)作为批处理进程(Windows 10 环境)。 输入文件夹中的文件名(无扩展名)应复制到新创建的输出文件名(具有新文件扩展名 *.mkv)。

@echo off

set CMD=ffmpeg -c:v ffv1 -level 3 -g 1 -coder 1 -context 1 -pix_fmt + -slices 24 -slicecrc 1 -report -c:a pcm_s24le

FOR /R input_folder %%G IN (*.mov,*.mp4) DO (
   echo %%G
   call set outputfile=%%~nG%.mkv
   call set inputfile=%%~nG%%~xG
   echo %CMD% -y output_folder/%outputfile% -i %inputfile%
)

但是这个脚本没有按预期工作,即没有任何反应。 你可能知道如何解决这个问题吗? 提前致谢!

【问题讨论】:

确实发生了一些事情。本质上,您的脚本将确定当前工作目录的树中是否有任何文件要处理,然后在关闭之前处理它们。在这种特殊情况下,如果没有文件,则几乎不会发生任何事情,因为脚本的 DO 部分将不会运行。如果有与*.mov*.mp4 全局匹配的文件,那么每个文件都会被echoed 快速显示到屏幕上,您在脚本关闭前编写的ffmpeg 命令也将如此。 您需要做的第一件事是确保您没有关闭echoing,并直接从命令提示符窗口运行您的脚本,(使用您的目标父路径/tree root 作为当前工作目录)。然后,您应该看到所有输出以确定实际发生的情况。如果您真的希望ffmpeg 处理匹配文件,我建议您将echo %CMD% 更改为%CMD%。顺便说一句,您的两条call set 行都是多余的,您应该删除它们并将echo %CMD% -y output_folder/%outputfile% -i %inputfile% 更改为%CMD% -y "output_folder\%%~nG.mkv" -i "%%G" 非常感谢!有用!最后一个问题:脚本如何在作业后自动删除输入文件夹中的文件? 【参考方案1】:

这是一个示例,显示了我对 cme​​ts 的建议,并添加了 cmets 中要求的文件删除。 这假设 ffmpeg 在成功时返回错误级别0(如果处理失败,您不想删除它们),并且在当前工作目录中有一个名为output_folder 的现有目录。

@Echo Off
SetLocal EnableExtensions
Set "CMD=ffmpeg.exe -c:v ffv1 -level 3 -g 1 -coder 1 -context 1 -pix_fmt +"
Set "CMD=%CMD% -slices 24 -slicecrc 1 -report -c:a pcm_s24le"

For /R "input_folder" %%G In (*.mov *.mp4) Do (
    Echo %%G
    %CMD% -y "output_folder\%%~nG.mkv" -i "%%G"
    If Not ErrorLevel 1 Del /A /F "%%G"
)

【讨论】:

我知道您刚刚从问题中复制了提供的 ffmpeg 命令,但为防止出现意外行为,一般语法应为 ffmpeg [input options] -i input [output options] output。照原样,它似乎试图将一些输出选项应用于输入,并且可能会失败。此外,+-pix_fmt 的有效选项,但它似乎在答案中放错了位置。 @llogan,你说得对,我照原样复制了它,没有检查它,那只是因为 OP 已经声明了It works!。我不确定你所说的放错位置是什么意思,除非你只是指我将线分成两部分的那一点,如果我在上面的行中包含+ 会更具可读性。我假设这就是您的意思,因此我对其进行了相应调整,以提高可读性/理解性。

以上是关于Windows CMD 批处理脚本 FFmpeg的主要内容,如果未能解决你的问题,请参考以下文章

运行 CMD 和 ffmpeg Windows 窗体

Windows批处理(cmd/bat)常用命令小结

Windows批处理脚本陷入死循环问题

windows 批处理脚本怎么执行

求助ffmpeg.exe在windows自带的cmd下运行不了。显示无法定位程序输入点strncpy_s于动态链接库msvcrt.dll

Windows 批处理脚本指南: 日志