yamdi
Yamdi is a ruby wrapper around the command line tool yamdi (github.com/ioppermann/yamdi). You'll need yamdi installed in order for the gem to be of any use. If you are on OSX I recommend using homebrew (brew install yamdi).
The Yamdi command line tool expects to receive a path to an flv file and will return XML file of the extracted metadata that we then wrap in a ruby object and use to expose the metadata.
The current gem version only supports the reading of metadata. The command line tool also supports the writing of the metadata into a new .flv file but this is not yet supported in this gem.
Tested under ruby 1.8.7 and 1.9.2
Usage
@metadata = Yamdi.new('path/to/file.flv')
@metadata.duration #=> 6.02
@metadata.key_frames.each do |key_frame|
key_frame.time #=> 5.87
key_frame.location #=> 13467
end
Paperclip Processor
You can also use Yamdi in a Paperclip processor. I've provided a simple example in lib/paperclip_processors/metadata_extractor.rb
This is useful for adding things like video duration to your db when a user uploads a video.
class Video
has_attached_file :video,
:styles => {:orginal => {}},
:processors => [:metadata_extractor]
end
Be sure you add the styles hash even if it is empty as above or your paperclip processors won't run.
Refreshing Exisitng Videos
Perhaps you're adding yamdi to your current set up, want to refresh the data in your models or add a new column to present to your users.
This is easily accomplished of you are using Paperclip. I've added an example rake task in lib/tasks/metadata_refresh.rake
Supported methods
- duration
float, in seconds
- has_keyframes?
boolean
- has_video?
boolean
- has_audio?
boolean
- has_metadata?
boolean
- has_cue_points?
boolean
- can_seek_to_end?
boolean
- audio_codec_id
integer
- audio_sample_rate
integer
- audio_data_rate
integer
- audio_sample_size
integer
- audio_delay
float, in seconds
- stereo?
boolean
- video_codec_id
integer
- frame_rate
float, in seconds
- video_data_rate
integer
- height
integer
- width
integer
- data_size
integer
- audio_size
integer
- video_size
integer
- file_size
integer
- last_timestamp
float, in seconds
- last_video_frame_timestamp
float, in seconds
- last_key_frame_timestamp
float, in seconds
- last_key_frame_location
integer
- key_frames
Array of key frame data, each item contains the following
- - time
float, in seconds
- - location
integer
Contributing to yamdi
- Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
- Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
- Fork the project
- Start a feature/bugfix branch
- Commit and push until you are happy with your contribution
- Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
- Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
Copyright
Copyright (c) 2011 Bob Burbach. See LICENSE.txt for further details.