2016-09-14 7 views
0

Я пытаюсь получить пример от here, работая над записью веб-страницы с phantomjs и передам stdout, которые являются изображениями, в команду ffmpeg для создания видео. Команда заявила, что вам нужно запустить,:Выполнение команды с трубкой в ​​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 

Если я запускаю подобную версию этой команды непосредственно в терминале, я могу получить его работу просто отлично. Проблема в том, что мне нужно запустить вышеуказанную команду через пакет Golang os/exec. С помощью:

cmd := exec.Command(parts[0], parts[1:]...) 

метод, первый параметр - базовый исполняемый файл исполняемой команды, и он не выполняет проверку трубы. Я хотел бы, чтобы это работало в одной команде, поэтому мне не нужно записывать все изображения в файлы, а затем запускать вторую команду ffmpeg для чтения со всех этих изображений. Какие-либо предложения?

+1

труба - это оболочка, а не аргумент команды, см. Http://stackoverflow.com/a/10953142/32880 – JimB

ответ

2

Я думаю, это поможет вам.

 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))