= Streamio FFMPEG Simple yet powerful wrapper around the ffmpeg command for reading metadata and transcoding movies. == Installation (sudo) gem install streamio-ffmpeg This version is written against an ffmpeg build from april 2010 (tested against r22811). So no guarantees with earlier (or much later) versions. Output and input standards have inconveniently changed rather a lot between versions of ffmpeg. My goal is to keep this library in sync with new versions of ffmpeg as they come along. == Usage === Reading Metadata movie = FFMPEG::Movie.new("path/to/movie.mov") movie.duration # 7.5 (duration of the movie in seconds) movie.bitrate # 481 (bitrate in kb/s) movie.video_stream # "h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 371 kb/s, 16.75 fps, 15 tbr, 600 tbn, 1200 tbc" (raw video stream info) movie.video_codec # "h264" movie.colorspace # "yuv420p" movie.resolution # "640x480" movie.width # 640 (width of the movie in pixels) movie.height # 480 (height of the movie in pixels) movie.frame_rate # 16.72 (frames per second) movie.audio_stream # "aac, 44100 Hz, stereo, s16, 75 kb/s" (raw audio stream info) movie.audio_codec # "aac" movie.audio_sample_rate # 44100 movie.audio_channels # 2 movie.valid? # true (would be false if ffmpeg fails to read the movie) === Transcoding First argument is the output file path. movie.transcode("tmp/movie.mp4") # Default ffmpeg settings for mp4 format Keep track of progress with an optional block. movie.transcode(movie.mp4") { |progress| puts progress } # 0.2 ... 0.5 ... 1.0 Give custom command line options with a string. movie.transcode("movie.mp4", "-ac aac -vc libx264 -ac 2 ...") Use the EncodingOptions parser for humanly readable transcoding options. Below you'll find all the supported options. Note that the :custom key will be used as is without modification so use it for any tricky business you might need. options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300, :croptop => 60, :cropbottom => 60, :cropleft => 10, :cropright => 10, :aspect => 1.333333, :audio_codec => "libfaac", :audio_bitrate => 32, :audio_sample_rate => 22050, :audio_channels => 1, :custom => "-flags +loop -cmp +chroma -partitions +parti4x4+partp8x8 -flags2 +mixed_refs -me_method umh -subq 6 -refs 6 -rc_eq 'blurCplx^(1-qComp)' -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 21"} movie.transcode("movie.mp4", options) The transcode function returns a Movie object for the encoded file. transcoded_movie = movie.transcode("tmp/movie.flv") transcoded_movie.video_codec # "flv" transcoded_movie.audio_codec # "mp3" Aspect ratio is added to encoding options automatically if none is specified. options = {:resolution => 320x180} # Will add -aspect 1.77777777777778 to ffmpeg Preserve aspect ratio on width or height by using the preserve_aspect_ratio transcoder option. widescreen_movie = FFMPEG::Movie.new("path/to/widescreen_movie.mov") options = {:resolution => 320x240} transcoder_options = {:preserve_aspect_ratio => :width} widescreen_movie.transcode("movie.mp4", options, transcoder_options) # Output resolution will be 320x180 transcoder_options = {:preserve_aspect_ratio => :height} widescreen_movie.transcode("movie.mp4", options, transcoder_options) # Output resolution will be 426x240 == Copyright Copyright (c) 2010 David Backeus. See LICENSE for details.