2009-04-16 23 views
5

tôi đang cố gắng mã sau để xác định độ phân giải video bằng cách chạy tiện ích ffmpeg như tiến trình con và đạt sản lượng của nó và phân tích nó:Không thể chạy ffmpeg như tiến trình con trong Ruby

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

... nhưng sản lượng vẫn là ffmpeg được kết nối với stdout và ffmepgIO.readlines trống. Có một số điều trị đặc biệt cần thiết cho tiện ích ffmpeg? Hoặc có cách nào khác để đạt được đầu ra ffmpeg? Tôi đã thử nghiệm mã này dưới WinXP và Fedora Linux - kết quả giống nhau.

Trả lời

7

Để theo dõi trên bình luận mouviciel, bạn sẽ cần phải sử dụng một cái gì đó giống như popen3:

require 'open3' 

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

(btw, lưu ý rằng việc sử dụng một mảng như tham số để popen sẽ an toàn hơn một chút, đặc biệt nếu tên tệp có thể bao gồm dấu cách hoặc bất kỳ loại ký tự nào cần được trích dẫn khác)

3

FFmpeg stdout là cho đầu ra phương tiện. Đối với thông tin đăng nhập (chẳng hạn như độ phân giải), bạn phải phân tích cú pháp ffmpeg stderr.

0

Tùy thuộc vào những gì bạn đang cố gắng làm điều đó có thể dễ dàng hơn khi sử dụng số rvideo gem.

Ví dụ:

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

Tôi đã thất vọng về đá quý RVideo becaus e nó không hoạt động với ffmpeg. Tôi kiểm tra mã nguồn của đá quý này và thành lập rằng nó cố gắng tu chạy ffmpeg giống như tôi đã mô tả và do đó không thành công. – Eskat0n

Các vấn đề liên quan