使用 Windows 批处理脚本通过 FFMPEG 从子目录多路复用视频和音频

使用 Windows 批处理脚本通过 FFMPEG 从子目录多路复用视频和音频

我正在尝试找出一个批处理脚本(基于 Windows),该脚本将允许我多路复用存在于大量子目录中(在一个主目录中)的一些 .m2v 和 .wav 文件。它们也需要重新条带化和转码,输出文件需要为 MXF 并最终位于另一个文件夹中。我对批处理脚本还不熟悉,但对 FFMPEG 命令并不陌生。到目前为止,我还没有找到任何允许使用多个文件的批处理脚本,只有那些可以转换单个文件的脚本。

经过多次搜索,我找到的最接近的方法是这个,但我试过没有成功。奇怪的是,有一次它确实生成了一个 .mxf 文件,尽管是 0KB,但每次我都什么也没得到。

for %%a in (".m2v") do ffmpeg -i "%%~na.wav" -i "%%~na.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf". 

我不确定括号中的(“.m2v”)是什么意思。

这代表什么?

答案1

我不确定括号里的内容是什么意思(".m2v")

这代表什么?

for %%a in (".m2v") do ffmpeg -i "%%~na.wav" -i "%%~na.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf"

该值(".m2v")代表要处理的一组文件。

在您的命令中没有要处理的文件,因为:

  • .m2v只是一个扩展,我们可以假设它应该是这样的filename.m2v
  • 这里您确实需要一个通配符表达式(请参阅下文了解如何执行此操作)。
  • 您的文件位于子目录中。

使用以下批处理文件(在单个主目录中):

@echo off
setlocal
for /f "usebackq" %%a in (`dir /b /s *.m2v`) do (
  echo ffmpeg -i "%%~dpna.wav" -i "%%~dpna.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf
  )
endlocal

笔记:

  • 当您对批处理文件要执行的操作感到满意时,请echo从命令中删除。ffmpeg

  • dir /b /s *.m2v用于生成要处理的文件列表。

    /b选项仅提供文件名(我们不需要标题、摘要或其他详细信息)

    /s选项允许dir处理子目录。

  • for /f用于处理文件列表。

  • %%~dpna用于获取不带扩展名的完整文件名。


进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 目录- 显示文件和子文件夹的列表。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。

相关内容