Windows CMD批处理脚本FFmpeg
我创建了一个批处理文件(.bat),它使用FFmpeg将各种视频(具有*.mov或*.mp4文件扩展名)作为批处理(Windows 10环境)从输入文件夹转换到输出文件夹(具有扩展名*.mkv)。 输入文件夹中的文件名(不带扩展名)应复制到新创建的输出文件名(具有新的文件扩展名*.mkv) 但此脚本没有按预期工作,即什么也没有发生。 你有没有办法解决这个问题?Windows CMD批处理脚本FFmpeg,windows,batch-file,cmd,ffmpeg,batch-processing,Windows,Batch File,Cmd,Ffmpeg,Batch Processing,我创建了一个批处理文件(.bat),它使用FFmpeg将各种视频(具有*.mov或*.mp4文件扩展名)作为批处理(Windows 10环境)从输入文件夹转换到输出文件夹(具有扩展名*.mkv)。 输入文件夹中的文件名(不带扩展名)应复制到新创建的输出文件名(具有新的文件扩展名*.mkv) 但此脚本没有按预期工作,即什么也没有发生。 你有没有办法解决这个问题? 提前谢谢 下面是一个示例,显示了我在评论中的建议,并根据评论中的要求添加了文件删除。这假设ffmpeg在成功时返回的错误级别为0(如果处
提前谢谢 下面是一个示例,显示了我在评论中的建议,并根据评论中的要求添加了文件删除。这假设ffmpeg在成功时返回的错误级别为
0
(如果处理失败,您不想删除它们),并且当前工作目录中存在一个名为output\u folder
的现有目录
@Echo关闭
setLocalEnableExtensions
设置“CMD=ffmpeg.exe-c:vffv1-level3-g1-coder1-context 1-pix_fmt+”
设置“CMD=%CMD%-slices 24-slicecrc 1-report-c:a pcm_s24le”
对于(*.mov*.mp4)中的/R“输入文件夹”%%G(
回声%%G
%CMD%-y“输出文件夹\%%~nG.mkv”-i“%%G”
如果没有错误,则级别1删除/A/F“%%G”
)
确实发生了一些事情。基本上,您的脚本将确定当前工作目录树中是否有任何文件要处理,然后在关闭之前处理它们。在这种特殊情况下,如果没有文件,那么几乎不会发生什么,因为脚本的DO
部分将不会运行。如果存在与*.mov
或*.mp4
全局匹配的文件,则每个文件都将echo
快速发送到屏幕上,脚本关闭前您编写的ffmpeg
命令也会如此。您需要做的第一件事是确保未关闭echo
ing,并直接从命令提示符窗口运行脚本(目标父路径/树根作为当前工作目录)。然后,您应该查看所有输出,以确定实际发生的情况。如果您确实希望ffmpeg
处理匹配文件,我建议您将echo%CMD%
更改为%CMD%
。顺便说一句,您的调用集
两行都是多余的,您应该删除它们并将echo%CMD%-y output\u folder/%outputfile%-i%inputfile%
更改为%CMD%-y“output\u folder\%%~nG.mkv”-i“%%G”
。非常感谢!它起作用了!最后一个问题:作业后脚本如何自动删除输入文件夹中的文件?我知道您刚刚从问题中复制了提供的ffmpeg命令,但为了防止意外行为,一般语法应为ffmpeg[input options]-I input[output options]output
。照目前的情况,它似乎试图将一些输出选项应用于输入,可能会失败。另外,+
是-pix\u fmt
的有效选项,但它似乎在答案中放错了位置。@llogan,你是对的,我原样复制了它,没有检查它,这只是因为OP已经说明了这一点。我不确定你所说的“错位”是什么意思,除非你只是指我把这行一分为二的那一点,如果我把+
放在上面那一行的话,我会读得更清楚。我假设这就是你的意思,因此我对其进行了相应的调整,以提高可读性/理解性。
@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%
)