Class: FFMPEG::Movie
- Inherits:
-
Object
- Object
- FFMPEG::Movie
- Defined in:
- lib/ffmpeg/movie.rb
Instance Attribute Summary collapse
-
#audio_bitrate ⇒ Object
readonly
Returns the value of attribute audio_bitrate.
-
#audio_codec ⇒ Object
readonly
Returns the value of attribute audio_codec.
-
#audio_sample_rate ⇒ Object
readonly
Returns the value of attribute audio_sample_rate.
-
#audio_stream ⇒ Object
readonly
Returns the value of attribute audio_stream.
-
#bitrate ⇒ Object
readonly
Returns the value of attribute bitrate.
-
#colorspace ⇒ Object
readonly
Returns the value of attribute colorspace.
-
#dar ⇒ Object
readonly
Returns the value of attribute dar.
-
#duration ⇒ Object
readonly
Returns the value of attribute duration.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#resolution ⇒ Object
readonly
Returns the value of attribute resolution.
-
#time ⇒ Object
readonly
Returns the value of attribute time.
-
#video_bitrate ⇒ Object
readonly
Returns the value of attribute video_bitrate.
-
#video_codec ⇒ Object
readonly
Returns the value of attribute video_codec.
-
#video_stream ⇒ Object
readonly
Returns the value of attribute video_stream.
Instance Method Summary collapse
- #audio_channels ⇒ Object
- #calculated_aspect_ratio ⇒ Object
- #frame_rate ⇒ Object
- #height ⇒ Object
-
#initialize(path) ⇒ Movie
constructor
A new instance of Movie.
- #size ⇒ Object
- #transcode(output_file, options = EncodingOptions.new, transcoder_options = {}, &block) ⇒ Object
- #uncertain_duration? ⇒ Boolean
- #valid? ⇒ Boolean
- #width ⇒ Object
Constructor Details
#initialize(path) ⇒ Movie
Returns a new instance of Movie.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/ffmpeg/movie.rb', line 7 def initialize(path) raise Errno::ENOENT, "the file '#{path}' does not exist" unless File.exists?(path) @path = path stdin, stdout, stderr = Open3.popen3("#{FFMPEG.ffmpeg_binary} -i '#{path}'") # Output will land in stderr output = stderr.read fix_encoding(output) output[/Duration: (\d{2}):(\d{2}):(\d{2}\.\d{2})/] @duration = ($1.to_i*60*60) + ($2.to_i*60) + $3.to_f output[/start: (\d*\.\d*)/] @time = $1 ? $1.to_f : 0.0 output[/bitrate: (\d*)/] @bitrate = $1 ? $1.to_i : nil output[/Video: (.*)/] @video_stream = $1 output[/Audio: (.*)/] @audio_stream = $1 @uncertain_duration = true #output.include?("Estimating duration from bitrate, this may be inaccurate") || @time > 0 if video_stream @video_codec, @colorspace, resolution, video_bitrate = video_stream.split(/\s?,\s?/) @video_bitrate = video_bitrate =~ %r(\A(\d+) kb/s\Z) ? $1.to_i : nil @resolution = resolution.split(" ").first rescue nil # get rid of [PAR 1:1 DAR 16:9] @dar = $1 if video_stream[/DAR (\d+:\d+)/] end if audio_stream @audio_codec, audio_sample_rate, @audio_channels, unused, audio_bitrate = audio_stream.split(/\s?,\s?/) @audio_bitrate = audio_bitrate =~ %r(\A(\d+) kb/s\Z) ? $1.to_i : nil @audio_sample_rate = audio_sample_rate[/\d*/].to_i end @invalid = true if @video_stream.to_s.empty? && @audio_stream.to_s.empty? @invalid = true if output.include?("is not supported") end |
Instance Attribute Details
#audio_bitrate ⇒ Object (readonly)
Returns the value of attribute audio_bitrate.
5 6 7 |
# File 'lib/ffmpeg/movie.rb', line 5 def audio_bitrate @audio_bitrate end |
#audio_codec ⇒ Object (readonly)
Returns the value of attribute audio_codec.
5 6 7 |
# File 'lib/ffmpeg/movie.rb', line 5 def audio_codec @audio_codec end |
#audio_sample_rate ⇒ Object (readonly)
Returns the value of attribute audio_sample_rate.
5 6 7 |
# File 'lib/ffmpeg/movie.rb', line 5 def audio_sample_rate @audio_sample_rate end |
#audio_stream ⇒ Object (readonly)
Returns the value of attribute audio_stream.
5 6 7 |
# File 'lib/ffmpeg/movie.rb', line 5 def audio_stream @audio_stream end |
#bitrate ⇒ Object (readonly)
Returns the value of attribute bitrate.
3 4 5 |
# File 'lib/ffmpeg/movie.rb', line 3 def bitrate @bitrate end |
#colorspace ⇒ Object (readonly)
Returns the value of attribute colorspace.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def colorspace @colorspace end |
#dar ⇒ Object (readonly)
Returns the value of attribute dar.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def dar @dar end |
#duration ⇒ Object (readonly)
Returns the value of attribute duration.
3 4 5 |
# File 'lib/ffmpeg/movie.rb', line 3 def duration @duration end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
3 4 5 |
# File 'lib/ffmpeg/movie.rb', line 3 def path @path end |
#resolution ⇒ Object (readonly)
Returns the value of attribute resolution.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def resolution @resolution end |
#time ⇒ Object (readonly)
Returns the value of attribute time.
3 4 5 |
# File 'lib/ffmpeg/movie.rb', line 3 def time @time end |
#video_bitrate ⇒ Object (readonly)
Returns the value of attribute video_bitrate.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def video_bitrate @video_bitrate end |
#video_codec ⇒ Object (readonly)
Returns the value of attribute video_codec.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def video_codec @video_codec end |
#video_stream ⇒ Object (readonly)
Returns the value of attribute video_stream.
4 5 6 |
# File 'lib/ffmpeg/movie.rb', line 4 def video_stream @video_stream end |
Instance Method Details
#audio_channels ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/ffmpeg/movie.rb', line 75 def audio_channels return nil unless @audio_channels return @audio_channels[/\d*/].to_i if @audio_channels["channels"] return 1 if @audio_channels["mono"] return 2 if @audio_channels["stereo"] return 6 if @audio_channels["5.1"] end |
#calculated_aspect_ratio ⇒ Object
67 68 69 |
# File 'lib/ffmpeg/movie.rb', line 67 def calculated_aspect_ratio aspect_from_dar || aspect_from_dimensions end |
#frame_rate ⇒ Object
83 84 85 |
# File 'lib/ffmpeg/movie.rb', line 83 def frame_rate video_stream[/(\d*\.?\d*)\s?fps/] ? $1.to_f : nil end |
#height ⇒ Object
63 64 65 |
# File 'lib/ffmpeg/movie.rb', line 63 def height resolution.split("x")[1].to_i rescue nil end |
#size ⇒ Object
71 72 73 |
# File 'lib/ffmpeg/movie.rb', line 71 def size File.size(@path) end |
#transcode(output_file, options = EncodingOptions.new, transcoder_options = {}, &block) ⇒ Object
87 88 89 |
# File 'lib/ffmpeg/movie.rb', line 87 def transcode(output_file, = EncodingOptions.new, = {}, &block) Transcoder.new(self, output_file, , ).run &block end |
#uncertain_duration? ⇒ Boolean
55 56 57 |
# File 'lib/ffmpeg/movie.rb', line 55 def uncertain_duration? @uncertain_duration end |
#valid? ⇒ Boolean
51 52 53 |
# File 'lib/ffmpeg/movie.rb', line 51 def valid? not @invalid end |
#width ⇒ Object
59 60 61 |
# File 'lib/ffmpeg/movie.rb', line 59 def width resolution.split("x")[0].to_i rescue nil end |