Не могу запустить ffmpeg как подпроцесс в Ruby - PullRequest
5 голосов
/ 16 апреля 2009

Я пытаюсь использовать следующий код для определения разрешения видео, запустив утилиту ffmpeg в качестве подпроцесса и получая ее вывод и анализируя ее:

IO.popen 'ffmpeg -i ' + path_to_file do |ffmpegIO|
    # my parse goes here
end

... но вывод ffmpeg по-прежнему подключен к stdout, а ffmepgIO.readlines пуст. Есть ли какая-то специальная обработка, необходимая для утилиты ffmpeg? Или есть другой способ получить вывод ffmpeg? Я тестировал этот код под WinXP и Fedora Linux - результаты совпадают.

Ответы [ 3 ]

7 голосов
/ 17 апреля 2009

Чтобы прокомментировать комментарий mouviciel, вам нужно использовать что-то вроде popen3 :

require 'open3'

Open3.popen3("ffmpeg", "-i", path_to_file) { |stdin, stdout, stderr|
  # do stuff
}

(кстати, обратите внимание, что использование массива в качестве параметра для popen будет более безопасным, особенно если имя файла может содержать пробелы или любой другой символ, который в противном случае должен был бы быть заключен в кавычки)

3 голосов
/ 16 апреля 2009

FFmpeg stdout для вывода медиа. Для регистрации информации (такой как разрешение) вы должны проанализировать ffmpeg stderr.

0 голосов
/ 16 апреля 2009

В зависимости от того, что вы пытаетесь сделать, может быть проще использовать rvideo gem .

Например:

video = RVideo::Inspector.new(:file => path_to_file)
video.resolution # => "480x272"
video.width # => 480
video.height # => 272
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...