【发布时间】: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"。 -
非常感谢!有用!最后一个问题:脚本如何在作业后自动删除输入文件夹中的文件?
标签: windows batch-file cmd ffmpeg batch-processing