av 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75444062e1b869f7ee104f74d2f4db4e3896ef92
4
- data.tar.gz: dd8fad78bb0571d02cb27fbf95827909a3f0f577
3
+ metadata.gz: 4eb96469037b44a476417432ba11e3487c8e5d48
4
+ data.tar.gz: 1beaccbfdc03404ab940ec6f0a9dac36e2cfcd0c
5
5
  SHA512:
6
- metadata.gz: f55ff0bb7bec672f7643183db7e1de02367af251677e3f8bc75884b6f95112b87eee1c99ea7815d54facfac7b01111de0b83873b97a663a0ffb540015405895f
7
- data.tar.gz: 24448d70ddabe3af39e21cbaebbbe3483475bda29ff8cd39018e2cab3f8948046ad8b060b9dff9a92ceb49c658abfa091fd9bce41e5a8178ea48315140dd2d0f
6
+ metadata.gz: 378c8cf269006953df35555e2c36438b2cd82a565fe5c1bf72a46aed469cbb92097519dbddbe26a9f728b8df98ac32bd915f5dea53c7818dc2d0dfb69ef5329b
7
+ data.tar.gz: bff6b5805a553aa1a62d2abf3e6ae365f124b0e75f12ecd476fe9f4fe8cc7f8fdf67d89f85c2326f0e31bca41bf4a6f9161d1b76d1a7f873f90553af2311f53b
data/lib/av.rb CHANGED
@@ -18,10 +18,10 @@ module Av
18
18
  true
19
19
  end
20
20
 
21
- def run line
21
+ def run line, codes = [0]
22
22
  Av.log("Running command: #{line}")
23
23
  begin
24
- Cocaine::CommandLine.new(line).run
24
+ Cocaine::CommandLine.new(line, "", expected_outcodes: codes).run
25
25
  rescue Cocaine::ExitStatusError => e
26
26
  raise Av::CommandError, "error while running command #{line}: #{e}"
27
27
  end
@@ -10,10 +10,14 @@ module Av
10
10
  @default_params = %Q(-loglevel "quiet") if Av.quiet
11
11
  end
12
12
 
13
- def input_concat list
13
+ def filter_concat list
14
14
  @input_params << %Q(-i concat:#{list.join('\|')} -c copy)
15
15
  self
16
16
  end
17
+
18
+ def filter_volume vol
19
+ @input_params << "-af volume=volume=#{vol}"
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -46,6 +46,37 @@ module Av
46
46
  def run
47
47
  Av.run(command_line)
48
48
  end
49
+
50
+ def identify path
51
+ meta = {}
52
+ command = %Q(#{@command_name} -i "#{File.expand_path(path)}" 2>&1)
53
+ out = Av.run(command, [0,1])
54
+ # rescue Av::CommandError
55
+ # # Do nothing, we know ffmpeg/avconv will complain with:
56
+ # # "At least one output file must be specified"
57
+ # end
58
+ out.split("\n").each do |line|
59
+ if line =~ /(([\d\.]*)\s.?)fps,/
60
+ meta[:fps] = $1.to_i
61
+ end
62
+ # Matching lines like:
63
+ # Video: h264, yuvj420p, 640x480 [PAR 72:72 DAR 4:3], 10301 kb/s, 30 fps, 30 tbr, 600 tbn, 600 tbc
64
+ if line =~ /Video:(.*)/
65
+ v = $1.to_s
66
+ size = v.match(/\d{3,5}x\d{3,5}/).to_s
67
+ meta[:size] = size
68
+ meta[:aspect] = size.split('x').first.to_f / size.split('x').last.to_f
69
+ end
70
+ # Matching Duration: 00:01:31.66, start: 0.000000, bitrate: 10404 kb/s
71
+ if line =~ /Duration:(\s.?(\d*):(\d*):(\d*\.\d*))/
72
+ meta[:length] = $2.to_s + ":" + $3.to_s + ":" + $4.to_s
73
+ end
74
+ if line =~ /rotate\s*:\s(\d*)/
75
+ meta[:rotate] = $1.to_i
76
+ end
77
+ end
78
+ meta
79
+ end
49
80
  end
50
81
  end
51
82
  end
@@ -10,7 +10,7 @@ module Av
10
10
  @command_name = "ffmpeg"
11
11
  end
12
12
 
13
- def input_concat list
13
+ def filter_concat list
14
14
  index_file = Tempfile.new('ffmpeg-concat')
15
15
  File.open(index_file, 'w') do |file|
16
16
  list.each do |item|
@@ -20,6 +20,10 @@ module Av
20
20
  @input_params << "concat -i #{index_file.path}"
21
21
  self
22
22
  end
23
+
24
+ def filter_volume vol
25
+ @input_params << "-af volume=#{vol}"
26
+ end
23
27
  end
24
28
  end
25
29
  end
@@ -1,3 +1,3 @@
1
1
  module Av
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -4,12 +4,20 @@ describe Av::Commands::Avconv do
4
4
  let(:subject) { Av::Commands::Avconv.new }
5
5
  let(:list) { ['one', 'two'] }
6
6
 
7
- describe '.input_concat' do
7
+ describe '.filter_concat' do
8
8
  before do
9
- subject.input_concat(list)
9
+ subject.filter_concat(list)
10
10
  end
11
11
 
12
12
  it { expect(subject.input_params.first).to include %Q(concat:one\\|two) }
13
13
  end
14
+
15
+ describe '.filter_volume' do
16
+ before do
17
+ subject.filter_volume('0.5')
18
+ end
19
+
20
+ it { expect(subject.input_params.first).to eq "-af volume=volume=0.5" }
21
+ end
14
22
  end
15
23
 
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Av::Commands::Base do
4
+ let(:subject) { Av.cli }
5
+ let(:source) { File.new(Dir.pwd + '/spec/support/assets/sample.mp4').path }
6
+
7
+ describe '.identify' do
8
+ let(:meta) { subject.identify source }
9
+
10
+ it { expect(meta).to be_a Hash }
11
+ it { expect(meta.keys).to include :size, :fps, :length, :aspect }
12
+ end
13
+ end
14
+
@@ -4,11 +4,19 @@ describe Av::Commands::Ffmpeg do
4
4
  let(:subject) { Av::Commands::Ffmpeg.new }
5
5
  let(:list) { ['one', 'two'] }
6
6
 
7
- describe '.input_concat' do
7
+ describe '.filter_concat' do
8
8
  before do
9
- subject.input_concat(list)
9
+ subject.filter_concat(list)
10
10
  end
11
11
 
12
12
  it { expect(subject.input_params.first).to include %Q(concat -i) }
13
13
  end
14
+
15
+ describe '.filter_volume' do
16
+ before do
17
+ subject.filter_volume('0.5')
18
+ end
19
+
20
+ it { expect(subject.input_params.first).to eq "-af volume=0.5" }
21
+ end
14
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: av
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Omar Abdel-Wahab
@@ -87,6 +87,7 @@ files:
87
87
  - lib/av/version.rb
88
88
  - spec/av/av_spec.rb
89
89
  - spec/av/avconv_spec.rb
90
+ - spec/av/base_spec.rb
90
91
  - spec/av/ffmpeg_spec.rb
91
92
  - spec/spec_helper.rb
92
93
  - spec/support/assets/sample.mp4
@@ -117,6 +118,7 @@ summary: Programmable Ruby interface for FFMPEG/Libav
117
118
  test_files:
118
119
  - spec/av/av_spec.rb
119
120
  - spec/av/avconv_spec.rb
121
+ - spec/av/base_spec.rb
120
122
  - spec/av/ffmpeg_spec.rb
121
123
  - spec/spec_helper.rb
122
124
  - spec/support/assets/sample.mp4