You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows 10 PowerShell中正确运行FFmpeg批量处理MKV文件的Linux风格命令

在Windows 10 PowerShell中批量运行FFmpeg转码MKV文件的正确方式

你遇到的问题是直接套用了Bash风格的循环语法,但PowerShell的循环结构和Bash完全不同,所以才会抛出那些解析错误。下面是修正后的命令,以及关键修改点的说明:

正确的PowerShell命令(两种方式可选)

方式1:使用管道+ForEach-Object(更符合PowerShell的管道风格)

Get-ChildItem -Path "D:\input\*.mkv" | ForEach-Object {
    # 如果ffmpeg不在当前工作目录,替换成完整路径,比如 "C:\tools\ffmpeg.exe"
    ./ffmpeg -i "$($_.FullName)" `
        -map 0:v:0 -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 `
        -c:v copy -c:a flac -c:s copy `
        "D:\output\$($_.Name)"
}

方式2:使用foreach语句(更接近传统循环写法)

foreach ($file in Get-ChildItem -Path "D:\input\*.mkv") {
    ./ffmpeg -i "$($file.FullName)" `
        -map 0:v:0 -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 `
        -c:v copy -c:a flac -c:s copy `
        "D:\output\$($file.Name)"
}

关键修改点说明

  • 循环语法适配:PowerShell没有Bash那种for file in ...; do ...; done的写法,而是用foreach ($var in 集合)或者管道结合ForEach-Object来遍历文件。
  • 输出路径补全文件名:你原来的命令里输出路径只写了D:\output,FFmpeg需要明确的输出文件名,这里我们用$($_.Name)(管道方式)或$($file.Name)来保留原MKV文件名,确保每个转码后的文件都能正确保存到输出目录。
  • 文件路径引用:在PowerShell字符串中嵌入对象属性时,需要用$($对象.属性)的格式(比如$($_.FullName)),这样PowerShell才能正确解析变量,避免路径出现语法错误。
  • FFmpeg路径问题:如果ffmpeg.exe不在当前PowerShell的工作目录下,建议替换成完整的可执行文件路径(比如"C:\Program Files\ffmpeg\bin\ffmpeg.exe"),防止出现“找不到命令”的错误。

内容的提问来源于stack exchange,提问作者vivofen578

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:47:30