Windows ffmpeg在forfiles循环中调用时覆盖输入文件

Windows ffmpeg在forfiles循环中调用时覆盖输入文件,windows,batch-file,cmd,ffmpeg,forfiles,Windows,Batch File,Cmd,Ffmpeg,Forfiles,我需要使用ffmpeg连接几个mp4和wav文件对 当我运行指定文件名的命令时,它运行良好: \ffmpeg.exe-i file01.mp4-i file01.wav-c:v copy-c:a aac-b:a 96k file01\u new.mp4 但当我将此调用集成到forfiles循环中时,源mp4文件被覆盖,输出mp4文件仅包含音频: forfiles/M“*.mp4”/C.\ffmpeg.exe-i@FNAME.mp4-i@FNAME.wav-C:v copy-C:a aac-b:a

我需要使用ffmpeg连接几个mp4和wav文件对

当我运行指定文件名的命令时,它运行良好:

\ffmpeg.exe-i file01.mp4-i file01.wav-c:v copy-c:a aac-b:a 96k file01\u new.mp4

但当我将此调用集成到forfiles循环中时,源mp4文件被覆盖,输出mp4文件仅包含音频:

forfiles/M“*.mp4”/C.\ffmpeg.exe-i@FNAME.mp4-i@FNAME.wav-C:v copy-C:a aac-b:a 96k@FNAME_new.mp4”

我真的不明白在MP4和WAV文件连接之前会发生什么。为什么源MP4被覆盖

如何编写此脚本以使其正常工作?感谢您的支持。

让我推荐使用而不是,因为后者速度非常慢,而且它会用引号扩展其
@
-变量,这可能会有问题:

rem//为结果文件创建子目录,因此结果文件无法重新处理:
2> nul md“结果”
rem//通过`*.mp4`文件循环:
对于“*.mp4”中的%%I,请执行以下操作(
rem/*处理当前文件以及相关的“*.wav”文件,
rem并将结果写入新的子目录:*/
ffmpeg.exe-i“%%~i”-i“%%~nI.wav”-c:v copy-c:a aac-b:a 96k“结果\%%~i”
)
我建议使用而不是,因为后者速度非常慢,并且它会用引号扩展其
@
-变量,这可能会有问题:

rem//为结果文件创建子目录,因此结果文件无法重新处理:
2> nul md“结果”
rem//通过`*.mp4`文件循环:
对于“*.mp4”中的%%I,请执行以下操作(
rem/*处理当前文件以及相关的“*.wav”文件,
rem并将结果写入新的子目录:*/
ffmpeg.exe-i“%%~i”-i“%%~nI.wav”-c:v copy-c:a aac-b:a 96k“结果\%%~i”
)

我认为问题在于给定的模式
*.mp4
也包含输出文件
*\u new.mp4
,因此它们也会被处理;如果@isdir==FALSE ffmpeg.exe-i@FNAME.mp4-i@FNAME.wav-C:v copy-C:aac-b:96k结果\@FNAME\u new.mp4“,您可以尝试将输出文件放入一个单独的子目录:
2>nul md“result”&forfiles/M“*.mp4”/C“cmd/C”。我已经尝试为生成的MP4文件使用子目录。这不会改变任何事情。问题发生在遇到的第一个MP4文件时,甚至在调用FFMPEG之前。它也没有解释为什么源文件被用作目标。如果我们遵循此逻辑,我应该使用file01.mp4生成file01\u new.mp4,生成file01\u new\u new.mp4,依此类推。将-报告添加到ffmpeg cmd并共享其中一个ffmpeg执行运行的日志。然后不要对文件使用
而改为使用:
2>nul md“result”&对于(“*.mp4”)中的%%I,请执行ffmpeg.exe-I“%~I”%~nI.wav”-c:v copy-c:aac-b:96k“result\%%~I”
…谢谢@aschipfl。我确认此建议回答了我的问题。我认为问题在于给定的模式
*.mp4
也涵盖了输出文件
*\u new.mp4
,因此它们也会被处理;如果@isdir==FALSE ffmpeg.exe-i@FNAME.mp4-i@FNAME.wav-C:v copy-C:aac-b:96k结果\@FNAME\u new.mp4“
,您可以尝试将输出文件放入一个单独的子目录:
2>nul md“result”&forfiles/M“*.mp4”/C“cmd/C”。我已经尝试为生成的MP4文件使用子目录。这不会改变任何事情。问题发生在遇到的第一个MP4文件时,甚至在调用FFMPEG之前。它也没有解释为什么源文件被用作目标。如果我们遵循此逻辑,我应该使用file01.mp4生成file01\u new.mp4,生成file01\u new\u new.mp4,依此类推。将-报告添加到ffmpeg cmd并共享其中一个ffmpeg执行运行的日志。然后不要对文件使用
而改为使用:
2>nul md“result”&对于(“*.mp4”)中的%%I,请执行ffmpeg.exe-I“%~I”%~nI.wav”-c:v copy-c:aac-b:96k“result\%%~I”
…谢谢@aschipfl。我确认这项建议回答了我的问题。