2009-04-16 20 views
5

Estoy tratando siguiente código para determinar la resolución de vídeo mediante la ejecución de utilidad ffmpeg como subproceso y ganar su producción y analizarlo:no se puede ejecutar ffmpeg como subproceso en Ruby

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

... pero la producción sigue siendo ffmpeg conectado a stdout y ffmepgIO.readlines está vacío. ¿Se necesita algún tratamiento especial para la utilidad de ffmpeg? ¿O hay otra forma de obtener la producción de ffmpeg? Probé este código bajo WinXP y Fedora Linux - los resultados son los mismos.

Respuesta

7

Para el seguimiento en el comentario de mouviciel, que tendría que utilizar algo como popen3:

require 'open3' 

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

(por cierto, tenga en cuenta que el uso de una matriz como parámetro para Popen Sería un poco más seguro, especialmente si el nombre del archivo puede incluir espacios o cualquier tipo de carácter que de otra manera tendría que ser citado)

3

FFmpeg stdout es para salida de medios. Para la información de registro (como la resolución), debe analizar ffmpeg stderr.

0

Dependiendo de lo que esté tratando de hacer, podría ser más fácil usar el rvideo gem.

Por ejemplo:

video = RVideo::Inspector.new(:file => path_to_file) 
video.resolution # => "480x272" 
video.width # => 480 
video.height # => 272 
+0

Ya estoy decepcionado con RVideo gem becaus e no funciona con ffmpeg. Inspecciono el código fuente de esta gema y fundo que pruebe ejecutar ffmpeg tal como lo describí y, por lo tanto, falla. – Eskat0n

Cuestiones relacionadas