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

ffmpeg overwrites input files when called in a forfiles loop

我需要使用 ffmpeg 加入几个 mp4 和 wav 文件对。

当我运行指定文件名的命令时,效果很好:

.\ffmpeg.exe -i file01.mp4 -i file01.wav -c:v copy -c:a aac -b:a 96k file01_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 被覆盖?

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

我建议使用 for rather than forfiles,因为后者速度很慢,并且它会用周围的引号扩展其 @ 变量,这可能会有问题:

rem // Create sub-directory for resulting files, so resulting files cannot become reprocessed:
2> nul md "result"
rem // Loop through `*.mp4` files:
for %%I in ("*.mp4") do (
    rem /* Process current file, together with the related `*.wav` file,
    rem    and write the result into the new sub-directory: */
    ffmpeg.exe -i "%%~I" -i "%%~nI.wav" -c:v copy -c:a aac -b:a 96k "result\%%~I"
)