Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go exec ffmpeg标准管道暂停_Go_Ffmpeg - Fatal编程技术网

Go exec ffmpeg标准管道暂停

Go exec ffmpeg标准管道暂停,go,ffmpeg,Go,Ffmpeg,我一直在尝试从ffmpeg获取exec stdoutpipe并将其写入另一个文件。但是,它会暂停并没有完成命令的执行 主程序包 进口( “字节” “io” “io/ioutil” “日志” “操作系统” “os/exec” ) func stdinfill(标准输入输出写关闭器){ fi,err:=ioutil.ReadFile(“music.ogg”) 如果错误!=零{ log.Fatal(错误) } io.Copy(标准输入法,字节数,新读卡器(fi)) } func main(){ run

我一直在尝试从ffmpeg获取exec stdoutpipe并将其写入另一个文件。但是,它会暂停并没有完成命令的执行

主程序包
进口(
“字节”
“io”
“io/ioutil”
“日志”
“操作系统”
“os/exec”
)
func stdinfill(标准输入输出写关闭器){
fi,err:=ioutil.ReadFile(“music.ogg”)
如果错误!=零{
log.Fatal(错误)
}
io.Copy(标准输入法,字节数,新读卡器(fi))
}
func main(){
runcommand()
}
func runcommand(){
cmd:=exec.Command(“ffmpeg”、“-i”、“管道:0”、“-f”、“mp3”、“管道:1”)
stdin,err:=cmd.StdinPipe()
如果错误!=零{
log.Fatal(错误)
}
stdout,err:=cmd.StdoutPipe()
如果错误!=零{
log.Fatal(错误)
}
cmd.Stderr=os.Stderr
err=cmd.Start()
如果错误!=零{
log.Fatal(错误)
}
标准填充(标准填充)
fo,err:=os.Create(“output.mp3”)
如果错误!=零{
log.Fatal(错误)
}
io.副本(fo、stdout)
延迟fo.Close()
err=cmd.Wait()
如果错误!=零{
log.Fatal(错误)
}
}

有人有什么想法吗?它开始运行ffmpeg,但只是暂停。

在goroutine中运行stdinfill修复了该问题。

是否尝试在填充后关闭stdin?否则它将在Wait()之后关闭,因此如果ffmpeg在继续之前等待其stdin关闭,则在读取其stdout时您将被阻止。@mh cbon我已经尝试过了(仍然暂停),幸好现在ffmpeg说它无法输出到管道:1,所以问题必须与stdouttry在cmd.Start之前创建output.mpg有关,并在goroutine中运行
io.Copy(fo,stdout)
。@bserdar在创建文件时更改意味着文件实际已被创建(yippee),并且无论是否在goroutine中运行io.Copy仍会导致暂停。当我退出ffmpeg时,我得到
av_interleaved_write_frame():无效参数错误写入管道的尾部:1:无效参数
,因此我倾向于认为这与FFMPEGID有关。在写入管道输入之前,是否启动读取器goroutine?