使用ffmpeg生成DASH manifest:Docker exec可行但Go的os.exec失败
问题解决:Go os.exec执行FFmpeg生成DASH Manifest报错
问题根源
你遇到的问题是参数传递时多余的引号导致FFmpeg解析失败。在shell中用引号包裹含空格的参数,是为了让shell将其识别为单个参数;但Go的exec.Command直接接收参数切片,每个元素本身就是独立参数,不需要额外添加引号。
你当前代码中-adaptation_sets的参数写为"\"id=0,streams=0 id=1,streams=1\"",这会导致FFmpeg实际收到的参数是带双引号的字符串:"id=0,streams=0 id=1,streams=1",而非预期的id=0,streams=0 id=1,streams=1,进而导致适配集解析错误,触发"Operation not permitted"的头部写入失败。
修复方案
直接去掉-adaptation_sets参数值前后的转义引号,修改后的调用代码如下:
runFFmpeg([]string{ "-f", "webm_dash_manifest", "-i", "./480.webm", "-f", "webm_dash_manifest", "-i", "./audio.webm", "-c", "copy", "-map", "0:0", "-map", "1:0", "-y", "-f", "webm_dash_manifest", "-adaptation_sets", "id=0,streams=0 id=1,streams=1", // 移除前后转义引号 "./manifest.mpd" })
验证点
修复后,打印的命令行中-adaptation_sets的参数会变成:
-adaptation_sets id=0,streams=0 id=1,streams=1
和你在bash中直接执行的命令完全一致,FFmpeg就能正确解析适配集参数,生成正常的DASH Manifest。
内容的提问来源于stack exchange,提问作者Inquisitor
相关产品推荐
相关产品推荐

