2013-05-03 3 views
1

Как я могу получить выходной файл этого кода FFMPEG, сохраненный в переменной?сохранить выходной файл скриншота FFMPEG в переменную

def take_screenshot 
    logger.debug "Trying to grab a screenshot from #{self.file}" 
    system "ffmpeg -i #{self.file} -ss 00:00:02 -vframes 1 #{Rails.root}/public/uploads/tmp/screenshots/#{File.basename(self.file)}.jpg" 
    self.save! 
    end 

Я попытался: self.screenshot = system "ffmpeg -i #{self.file} -ss 00:00:02 -vframes 1 #{Rails.root}/public/uploads/tmp/screenshots/#{File.basename(self.file)}.jpg"

, но это ничего не спасает.

благодарит заранее!

+1

Что вы подразумеваете под этим? Вы хотите, чтобы содержимое jpeg в переменной? Вы можете записать stdout процесса в этом случае, ffmpeg в переменную. Файл, который записывает ffmpeg, не находится в режиме stdout. – av501

+0

Привет, av501, я бы сохранил содержимое jpeg, которое ffmpeg производит для переменной, поэтому я могу использовать это с несущей для загрузки на s3. Будет ли это делать? – dodgerogers747

+1

См. Ниже ответ @ slhck. Верно. Установите его для сброса на стандартный вывод, а затем используйте его. – av501

ответ

3

ffmpeg обычно не выводит ничего на stdout и все его сообщения отладки на stderr. Вы можете сделать вывод видео (или изображения) на stdout, когда вы передаете - в качестве выходного файла. Тогда вам также нужно будет подавить stderr.

system "ffmpeg -i #{self.file} -ss 00:00:02 -c:v mjpeg -f mjpeg -vframes 1 - 2>/dev/null" 

Это приведет к выходу необработанных данных изображения с кодировкой JPEG в стандартный вывод. Оттуда вы можете сохранить данные в переменной и, например, перенести ее в другое место.

Чтобы получить стандартный вывод от system звонков, см. Здесь: Getting output of system() calls in ruby - особенно popen3 должен помочь вам в этом случае, когда вы можете отбросить stderr из Ruby.

Смежные вопросы