我正在尝试找出一个批处理脚本(基于 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- 循环命令以执行另一个命令的结果。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。