PowerShell调用FFmpeg混流报错:无法识别选项
解决FFmpeg参数识别错误的方案
问题根源
你的PowerShell代码在构建和传递FFmpeg参数时存在两个关键问题:
- 将参数数组错误拼接为单个字符串,导致FFmpeg把整串内容识别成一个无效选项
- 手动添加了多余的
-前缀,破坏了参数的正确结构
修正后的代码
$TEMPDIR = "E:\MediaConversions\BitLadder" $FOLDER = 'White.Boy.Rick.2018.1080p.WEB-DL.H264.AC3-EVO' $OUTPUTDIR = Join-Path -Path $TEMPDIR -ChildPath $FOLDER # 获取所有分段文件的完整路径,避免路径定位问题 $STEPS = Get-ChildItem -Path $OUTPUTDIR -File | Select-Object -ExpandProperty FullName $ffmpegArgs = @() $COUNT = 0 ForEach ($STEP in $STEPS){ # 直接向参数数组添加-i和对应文件路径 $ffmpegArgs += '-i', $STEP # 添加对应的音视频流映射参数 $ffmpegArgs += "-map ${COUNT}:v", "-map ${COUNT}:a" $COUNT++ } # 添加输出格式和目标文件路径 $ffmpegArgs += '-f', 'matroska', "E:\MediaConversions\White.Boy.Rick.2018_MultiStreamTest_AAC.H264.mkv" # 直接传递参数数组给ffmpeg,PowerShell会自动展开为独立参数 D:\Applications\ffmpeg\bin\ffmpeg.exe $ffmpegArgs
关键修改说明
- 用
Join-Path拼接路径:避免手动拼接字符串时出现路径分隔符错误 - 使用文件完整路径:防止FFmpeg因工作目录不符找不到目标文件
- 构建单一参数数组:所有FFmpeg参数(输入、映射、输出)统一放在一个数组中,PowerShell会自动将数组元素作为独立参数传递给外部程序
- 移除错误的字符串拼接逻辑:不再将数组转为字符串,也删除了多余的
-前缀 - 简化参数添加方式:直接通过
+=向数组添加成对参数(如'-i', $STEP),保证参数结构正确
额外提示
- 调用FFmpeg前可以执行
$ffmpegArgs输出参数列表,验证参数结构是否正确 - 处理大量文件时,建议用
[System.Collections.Generic.List[string]]构建参数数组,性能优于原生数组的+=操作
内容的提问来源于stack exchange,提问作者misteralexander
相关产品推荐
相关产品推荐

