PowerShell中FFmpeg命令的ASS文件路径转义方法求助
PowerShell中FFmpeg加载ASS字幕路径转义问题解决
问题现象
在PowerShell环境下使用FFmpeg为MP4文件添加ASS字幕时,出现路径解析错误,FFmpeg报错无法将路径解析为图像尺寸,核心错误日志如下:
[Parsed_ass_0 @ 0000018dbe6300c0] Unable to parse option value "/Users/X/AppData/Local/Temp/subtitles.ass" as image size [fc#-1 @ 0000018dbe430700] Error applying option 'original_size' to filter 'ass': Invalid argument
错误代码段
问题出在路径处理与FFmpeg参数构造部分:
$assPathFixed = $assPath -replace '\\', '/' $ffmpegArgs = @( "-i", $videoPath, "-vf", "ass='$assPathFixed'", "-c:a", "copy", "-y", $outputPath )
原因分析
FFmpeg的ass滤镜参数格式为ass=filename[:options],当用单引号包裹路径时,PowerShell传递参数后,FFmpeg会将单引号视为路径的一部分,导致路径被错误分割:'C:/Users/...'会被解析为'C作为文件名,后续的/Users/...'被当成original_size选项的值,从而触发尺寸解析错误。
解决方案
以下几种写法均可正确处理路径:
方案1:直接使用原始Windows路径(无空格时优先)
不需要替换斜杠,直接将原始路径传入ass参数:
$ffmpegArgs = @( "-i", $videoPath, "-vf", "ass=$assPath", "-c:a", "copy", "-y", $outputPath )
方案2:路径含空格时,用转义双引号包裹
如果路径包含空格,在PowerShell中用反斜杠转义双引号,确保FFmpeg识别完整路径:
$ffmpegArgs = @( "-i", $videoPath, "-vf", "ass=`"$assPath`"", "-c:a", "copy", "-y", $outputPath )
方案3:保留斜杠替换,但去掉单引号
若习惯用正斜杠路径,只需去掉单引号即可:
$assPathFixed = $assPath -replace '\\', '/' $ffmpegArgs = @( "-i", $videoPath, "-vf", "ass=$assPathFixed", "-c:a", "copy", "-y", $outputPath )
验证
修改参数构造后,FFmpeg会正确识别ASS文件路径,不再触发路径解析错误,字幕可正常嵌入视频。
内容的提问来源于stack exchange,提问作者Niek Jonkman
相关产品推荐
相关产品推荐

