Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows CMD批处理脚本FFmpeg_Windows_Batch File_Cmd_Ffmpeg_Batch Processing - Fatal编程技术网

Windows CMD批处理脚本FFmpeg

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(如果处

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

但此脚本没有按预期工作,即什么也没有发生。 你有没有办法解决这个问题?
提前谢谢

下面是一个示例,显示了我在评论中的建议,并根据评论中的要求添加了文件删除。这假设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%
)