2016-09-14 4 views
0

Ich versuche, das Beispiel von here arbeiten, um eine Webseite mit phantomjs aufzunehmen und pipe die stdout, die Bilder sind, an den Befehl ffmpeg, um das Video zu erstellen. Der Befehl gab an, dass Sie ausführen müssen, ist:Laufender Befehl mit Pipe in Golang exec

phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10 -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4 

Wenn ich eine ähnliche Version dieses Befehls direkt im Terminal laufen, kann ich es bekommen funktioniert ganz gut. Das Problem ist, dass ich den obigen Befehl über das Golang os/exec Paket ausführen muss. Mit der folgenden Methode ist der erste Parameter das Basis-Executable des Befehls, der ausgeführt wird und die Pipe nicht honoriert. Ich möchte, dass dies in einem Befehl funktioniert, damit ich nicht alle Bilder in Dateien schreiben muss und dann einen zweiten ffmpeg-Befehl ausführen muss, um von all diesen Bildern zu lesen. Irgendwelche Vorschläge?

+1

Eine Pipe ist ein Shell-Konstrukt, kein Befehlsargument, siehe http://stackoverflow.com/a/10953142/32880 – JimB

Antwort

2

Ich denke, das wird Ihnen helfen.

 cmd := "phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10 -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4" 
    output, err := exec.Command("bash","-c",cmd).Output() 
    if err != nil { 
      return fmt.Sprintf("Failed to execute command: %s", cmd) 
    } 
    fmt.Println(string(output))