activevlc 0.0.1

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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +89 -0
  7. data/Rakefile +1 -0
  8. data/TODO.md +12 -0
  9. data/activevlc.gemspec +29 -0
  10. data/bin/activevlc +5 -0
  11. data/examples/design.rb +84 -0
  12. data/lib/activevlc/cli/vlc.rb +45 -0
  13. data/lib/activevlc/cli.rb +73 -0
  14. data/lib/activevlc/dsl/base.rb +35 -0
  15. data/lib/activevlc/dsl/duplicate.rb +16 -0
  16. data/lib/activevlc/dsl/pipeline.rb +31 -0
  17. data/lib/activevlc/dsl/stream.rb +75 -0
  18. data/lib/activevlc/dsl/transcode.rb +56 -0
  19. data/lib/activevlc/dsl.rb +22 -0
  20. data/lib/activevlc/pipeline.rb +37 -0
  21. data/lib/activevlc/pipeline_dump.rb +61 -0
  22. data/lib/activevlc/stage/base.rb +75 -0
  23. data/lib/activevlc/stage/chain.rb +18 -0
  24. data/lib/activevlc/stage/duplicate.rb +38 -0
  25. data/lib/activevlc/stage/gather.rb +18 -0
  26. data/lib/activevlc/stage/input.rb +41 -0
  27. data/lib/activevlc/stage/stream.rb +33 -0
  28. data/lib/activevlc/stage/transcode.rb +18 -0
  29. data/lib/activevlc/stage.rb +23 -0
  30. data/lib/activevlc/version.rb +3 -0
  31. data/lib/activevlc.rb +7 -0
  32. data/spec/basic_pipe_spec.rb +29 -0
  33. data/spec/basic_spec.rb +40 -0
  34. data/spec/pipeline_dump_spec.rb +38 -0
  35. data/spec/pipeline_spec.rb +84 -0
  36. data/spec/pipes/basic.rb +14 -0
  37. data/spec/pipes/duplicate.rb +18 -0
  38. data/spec/pipes/duplicate_then_transcode.rb +29 -0
  39. data/spec/pipes/transcode_and_display.rb +25 -0
  40. data/spec/pipes/transcode_and_display_with_options.rb +36 -0
  41. data/spec/spec_helper.rb +37 -0
  42. data/spec/stage_spec.rb +48 -0
  43. metadata +196 -0
@@ -0,0 +1,61 @@
1
+ ##
2
+ ## debug_print.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Fri Sep 6 17:42:31 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'debugger'
13
+
14
+ module ActiveVlc
15
+ module PipelineDump
16
+ extend ActiveSupport::Concern
17
+
18
+ TAB_WIDTH = 2
19
+
20
+ def _dump(depth = 0)
21
+ name = instance_eval &_find_in_ancestors(:_dump_name)
22
+ childs = instance_eval &_find_in_ancestors(:_dump_childs)
23
+
24
+ "#{_dump_depth(depth)}+ #{name}\n" +
25
+ childs.map { |c| c._dump(depth + 1) }.join
26
+ end
27
+
28
+ def _dump_depth(depth)
29
+ ' ' * depth * TAB_WIDTH
30
+ end
31
+
32
+ # FIXME Find an elegant way to do this :-/
33
+ # Here we walk the ancestor array to find the one which included us first and therefore
34
+ # has a default _dump_name and _dump_childs. It will stops to the first ancestor which has
35
+ # (re)defined it.
36
+ def _find_in_ancestors(sym)
37
+ klass = self.class
38
+ while klass.respond_to?(sym) and klass.superclass and not klass.send(sym)
39
+ klass = klass.superclass
40
+ end
41
+ klass.send(sym)
42
+ end
43
+
44
+ included do
45
+ dump_name { self.class.name }
46
+ dump_childs { [] }
47
+ end
48
+
49
+ module ClassMethods
50
+ attr_accessor :_dump_name, :_dump_childs
51
+
52
+ def dump_name(&block)
53
+ self._dump_name = block
54
+ end
55
+
56
+ def dump_childs(&block)
57
+ self._dump_childs = block
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,75 @@
1
+ ##
2
+ ## base.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Thu Sep 5 10:08:46 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ # Represents a stage in the pipeline
13
+ module ActiveVlc::Stage
14
+ class Base
15
+ include ActiveVlc::PipelineDump
16
+ dump_name { "#{self.class.name}(#{@type}): #{options}" }
17
+
18
+ attr_reader :type
19
+ attr_reader :options
20
+
21
+ def initialize(type = :dummy)
22
+ @options = Hash.new
23
+ @type = type
24
+ end
25
+
26
+ def [](key) @options[key] end
27
+ def []=(key, value) @options[key] = value end
28
+
29
+ def fragment
30
+ _recurse_on_suboption(@type, @options)
31
+ end
32
+
33
+ protected
34
+ # Handles the rendering of the options hash to a vlc sout format
35
+ #
36
+ # key = vlc, value = {test: 42, sub: {_this_: 'this', opt1='foo'}, sub2: {opt2: 'bar'}}
37
+ # renders to "key{test=42,sub=this{opt1=foo},sub2{opt2:bar}}"
38
+ def _recurse_on_suboption(k, h)
39
+ map = h.map do |key, value|
40
+ if value.is_a?(Hash)
41
+ value_without_this = value.clone
42
+ this = value_without_this.delete :_this_
43
+ if this
44
+ "#{key}=#{_recurse_on_suboption(this, value_without_this)}"
45
+ else
46
+ _recurse_on_suboption(key, value)
47
+ end
48
+ else
49
+ if value.nil?
50
+ "#{key}"
51
+ elsif value == false
52
+ "no-#{key}"
53
+ else
54
+ "#{key}=#{format_value value}"
55
+ end
56
+ end
57
+ end.join(', ')
58
+
59
+ if map == ""
60
+ "#{k}"
61
+ else
62
+ "#{k}{#{map}}"
63
+ end
64
+ end
65
+
66
+ def format_value(value)
67
+ if value.is_a? String
68
+ "'#{value}'"
69
+ else
70
+ "#{value}"
71
+ end
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,18 @@
1
+ ##
2
+ ## chain.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Tue Sep 10 19:43:11 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::Stage
13
+ class Chain < Stream
14
+ def fragment
15
+ @chain.map{|s| s.fragment}.join ':'
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ ##
2
+ ## duplicate.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Thu Sep 5 10:15:03 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'activevlc/stage/base'
13
+
14
+ module ActiveVlc::Stage
15
+ class Duplicate < Base
16
+ attr_reader :stages
17
+
18
+ dump_childs { @stages }
19
+
20
+ def initialize()
21
+ super(:duplicate)
22
+ @stages = []
23
+ end
24
+
25
+ def <<(stage)
26
+ @stages.push stage
27
+ @stages.flatten!
28
+ self
29
+ end
30
+
31
+ def fragment
32
+ f = @stages.map do |s|
33
+ "dst=#{s.fragment}"
34
+ end.join ', '
35
+ "duplicate{#{f}}"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ ##
2
+ ## gather.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Mon Sep 9 10:49:03 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::Stage
13
+ class Gather < Base
14
+ def initialize
15
+ super :gather
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,41 @@
1
+ ##
2
+ ## input_stage.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Sep 4 19:13:47 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'activevlc/stage'
13
+
14
+ module ActiveVlc::Stage
15
+ class Input < Base
16
+ include ActiveVlc::PipelineDump
17
+
18
+ attr_reader :inputs
19
+
20
+ def initialize(array_or_string)
21
+ super(:input)
22
+
23
+ @inputs = [array_or_string] if array_or_string.is_a? String
24
+ @inputs ||= array_or_string
25
+ end
26
+
27
+ def <<(new_inputs)
28
+ @inputs.push new_inputs
29
+ @inputs.flatten!
30
+ self
31
+ end
32
+
33
+ def fragment
34
+ @inputs.join ' '
35
+ end
36
+
37
+ dump_name { "Input : " + @inputs.join(', ') }
38
+ dump_childs { [] }
39
+ end
40
+ end
41
+
@@ -0,0 +1,33 @@
1
+ ##
2
+ ## stream_stage.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Sep 4 19:35:50 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::Stage
13
+ class Stream < Base
14
+ dump_childs { @chain }
15
+
16
+ def initialize
17
+ super :sout
18
+ @chain = []
19
+ end
20
+
21
+ def <<(stage)
22
+ @chain.push stage
23
+ @chain.flatten!
24
+ self
25
+ end
26
+
27
+ def fragment
28
+ return "" if @chain.empty?
29
+ sout_string = @chain.map{|s| s.fragment}.join ':'
30
+ ":sout=\"##{sout_string}\""
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ ##
2
+ ## transcode.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Fri Sep 6 16:09:02 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::Stage
13
+ class Transcode < Base
14
+ def initialize
15
+ super :transcode
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ ##
2
+ ## stage.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jul 3 16:08:37 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc
13
+ module Stage
14
+ end
15
+ end
16
+
17
+ require 'activevlc/stage/base'
18
+ require 'activevlc/stage/input'
19
+ require 'activevlc/stage/stream'
20
+ require 'activevlc/stage/duplicate'
21
+ require 'activevlc/stage/transcode'
22
+ require 'activevlc/stage/gather'
23
+ require 'activevlc/stage/chain'
@@ -0,0 +1,3 @@
1
+ module ActiveVlc
2
+ VERSION = "0.0.1"
3
+ end
data/lib/activevlc.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'active_support'
2
+ require 'activevlc/version'
3
+ require 'activevlc/pipeline'
4
+ require 'activevlc/dsl'
5
+
6
+ module ActiveVlc
7
+ end
@@ -0,0 +1,29 @@
1
+ ##
2
+ ## basic_pipe_spec.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 20:46:26 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'spec_helper'
13
+
14
+ describe ActiveVlc do
15
+ describe '::pipe_for' do
16
+ it 'creates a new Pipeline' do
17
+ ActiveVlc::Pipeline.for('test.mp4'){}.should be_a(ActiveVlc::Pipeline)
18
+ end
19
+
20
+ it 'has input file in the fragment string' do
21
+ ActiveVlc::Pipeline.for('test.mp4'){}.fragment.should match('test.mp4')
22
+ end
23
+
24
+ it 'handles an array of input' do
25
+ ActiveVlc::Pipeline.for(['test.mp4', 'test.flv']){}.fragment.should match(/test\.mp4.+test\.flv/)
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,40 @@
1
+ ##
2
+ ## basic.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 14:08:35 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'spec_helper'
13
+
14
+ describe ActiveVlc do
15
+ it 'has a version' do
16
+ ActiveVlc::VERSION.is_a?(String).should be_true
17
+ end
18
+
19
+ describe 'cmd' do
20
+ it 'return version number on \'version\' command' do
21
+ expect(`bundle exec activevlc version`).to match(/version \d+\.\d+\.\d+/)
22
+ expect(`bundle exec activevlc version`).to match(ActiveVlc::VERSION)
23
+ end
24
+ end
25
+
26
+ describe 'VLC detection' do
27
+ it 'detects and returns VLV version number on \'vlc version\'' do
28
+ expect(`bundle exec activevlc vlc version`).to match(/VLC version \d+\.\d+\.\d+/)
29
+ end
30
+
31
+ it 'tells if detected VLC version is supported on \'vlc version\'' do
32
+ expect(`bundle exec activevlc vlc version`).to match(/supported = (true|false)/)
33
+ end
34
+
35
+ it 'tells if detected VLC version is supported on \'vlc supported\'' do
36
+ expect(`bundle exec activevlc vlc supported`).to match(/(true|false)/)
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,38 @@
1
+ ##
2
+ ## pipeline_dump_spec.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Mon Sep 9 12:31:23 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'spec_helper'
13
+
14
+ describe 'ActiveVlc::PipelineDump' do
15
+ describe 'CLI' do
16
+ it 'needs a pipeline file as paremeter' do
17
+ `bundle exec activevlc dump 2>&1`.should match(/ERROR/)
18
+ end
19
+ it 'needs an existent pipeline file' do
20
+ `bundle exec activevlc dump inexistent.rb`
21
+ $?.exitstatus.should_not eq(0)
22
+ end
23
+ end
24
+
25
+ it 'return a readable representation of the pipeline' do
26
+ dump = <<-DUMP
27
+ ActiveVlc: Dumping pipeline internal representation
28
+ + ActiveVlc::Pipeline
29
+ + Input : input.mp4
30
+ + ActiveVlc::Stage::Stream(sout): {}
31
+ + ActiveVlc::Stage::Transcode(transcode): {:acodec=>:aac, :vcodec=>:h264, :scodec=>:svcd}
32
+ + ActiveVlc::Stage::Duplicate(duplicate): {}
33
+ + ActiveVlc::Stage::Base(standard): {"mux"=>:mp4, "dst"=>"output.mp4"}
34
+ + ActiveVlc::Stage::Base(display): {}
35
+ DUMP
36
+ ActiveVlc::Pipeline.parse('spec/pipes/transcode_and_display.rb').dump.should eq(dump)
37
+ end
38
+ end
@@ -0,0 +1,84 @@
1
+ ##
2
+ ## pipeline_spec.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jul 3 15:57:47 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'spec_helper'
13
+
14
+ describe ActiveVlc::Pipeline do
15
+ describe '\'basic\' pipeline' do
16
+ it 'returns nil if the file doesn\'t exists' do
17
+ ActiveVlc::Pipeline.parse('dontexist.rb').should be_nil
18
+ end
19
+
20
+ it 'is loaded' do
21
+ pipe = ActiveVlc::Pipeline.parse 'spec/pipes/basic.rb'
22
+ pipe.class.should be(ActiveVlc::Pipeline)
23
+ end
24
+
25
+ it 'can produces a basic fragment' do
26
+ pipe = ActiveVlc::Pipeline.parse 'spec/pipes/basic.rb'
27
+ pipe.fragment.should match(/input.mp4/)
28
+ end
29
+
30
+ it 'allows adding new inputs' do
31
+ pipe = ActiveVlc::Pipeline.parse 'spec/pipes/basic.rb'
32
+ pipe.input << 'test.mp3'
33
+ pipe.fragment.should match(/input.mp4/)
34
+ pipe.fragment.should match(/test.mp3/)
35
+ end
36
+ end
37
+
38
+ describe '\'duplicate\' pipeline' do
39
+ it 'is loaded' do
40
+ ActiveVlc::Pipeline.parse('spec/pipes/duplicate.rb').class.should be(ActiveVlc::Pipeline)
41
+ end
42
+
43
+ it 'produce the correct fragment' do
44
+ expect(ActiveVlc::Pipeline.parse('spec/pipes/duplicate.rb').fragment)
45
+ .to eq("input.mp3 :sout=\"#duplicate{dst=display, dst=standard{dst='output.mp3'}}\"")
46
+ end
47
+ end
48
+
49
+ describe '\'transcode_and_display\' pipeline' do
50
+ it 'is loaded' do
51
+ ActiveVlc::Pipeline.parse('spec/pipes/transcode_and_display.rb').class.should be(ActiveVlc::Pipeline)
52
+ end
53
+
54
+ it 'produce the correct fragment' do
55
+ expect(ActiveVlc::Pipeline.parse('spec/pipes/transcode_and_display.rb').fragment)
56
+ .to eq("input.mp4 :sout=\"#transcode{acodec=aac, vcodec=h264, scodec=svcd}:duplicate{dst=standard{mux=mp4, dst='output.mp4'}, dst=display}\"")
57
+ end
58
+ end
59
+
60
+ describe '\'transcode_and_display_with_options\' pipeline' do
61
+ it 'is loaded' do
62
+ ActiveVlc::Pipeline.parse('spec/pipes/transcode_and_display_with_options.rb').class
63
+ .should be(ActiveVlc::Pipeline)
64
+ end
65
+
66
+ it 'produce the correct fragment' do
67
+ expect(ActiveVlc::Pipeline.parse('spec/pipes/transcode_and_display_with_options.rb').fragment)
68
+ .to eq("input.mp4 :sout=\"#gather:transcode{deinterlace, acodec=aac, ab=128, channels=2, vcodec=h264, venc=x264{bpyramid=strict, bframes=4, no-cabac}, vb=512}:duplicate{dst=standard{mux=mp4, dst='output.mp4'}, dst=display}\"")
69
+ end
70
+ end
71
+
72
+ describe '\'duplicate_then_transcode\' pipeline' do
73
+ it 'is loaded' do
74
+ ActiveVlc::Pipeline.parse('spec/pipes/duplicate_then_transcode.rb').class
75
+ .should be(ActiveVlc::Pipeline)
76
+ end
77
+
78
+ it 'produce the correct fragment' do
79
+ expect(ActiveVlc::Pipeline.parse('spec/pipes/duplicate_then_transcode.rb').fragment)
80
+ .to eq("input.mp4 :sout=\"#duplicate{dst=transcode{acodec=aac, vcodec=h264, scodec=svcd}:standard{mux=mp4, dst='output.mp4'}, dst=display}\"")
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,14 @@
1
+ ##
2
+ ## basic.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 14:41:04 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ # Basic pipe for rspec testing
13
+
14
+ ActiveVlc::Pipeline.for 'input.mp4'
@@ -0,0 +1,18 @@
1
+ ##
2
+ ## duplicate.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Sep 4 17:29:45 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ # input.mp3 :sout="#duplicate{dst=display, dst=std{dst='output.mp3'}}"
13
+ ActiveVlc::Pipeline.for 'input.mp3' do
14
+ duplicate do
15
+ to :display
16
+ to file: 'output.mp3'
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ ##
2
+ ## duplicate_then_transcode.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Tue Sep 10 18:30:41 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ ActiveVlc::Pipeline.for 'input.mp4' do
13
+ duplicate do
14
+ to :chain do
15
+ #debugger
16
+ transcode do
17
+ audio :aac
18
+ video :h264
19
+ subtitle :svcd
20
+ end
21
+ to :file do
22
+ mux :mp4
23
+ dst 'output.mp4'
24
+ end
25
+ end
26
+ to :display
27
+ end
28
+ end
29
+
@@ -0,0 +1,25 @@
1
+ ##
2
+ ## transcode_and_display.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 14:45:36 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ ActiveVlc::Pipeline.for 'input.mp4' do
13
+ transcode do
14
+ audio :aac
15
+ video :h264
16
+ subtitle :svcd
17
+ end
18
+ duplicate do
19
+ to :file do
20
+ mux :mp4
21
+ dst 'output.mp4'
22
+ end
23
+ to :display
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ ##
2
+ ## transcode_and_display.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 14:45:36 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ ActiveVlc::Pipeline.for 'input.mp4' do
13
+ gather
14
+ transcode do
15
+ deinterlace
16
+ audio :aac do
17
+ bitrate 128 # 128 kpbs
18
+ channels 2
19
+ end
20
+ video :h264 do
21
+ encoder :x264 do
22
+ bpyramid :strict
23
+ bframes 4
24
+ cabac false
25
+ end
26
+ bitrate 512 # 512 kbps
27
+ end
28
+ end
29
+ duplicate do
30
+ to :file do
31
+ mux :mp4
32
+ dst 'output.mp4'
33
+ end
34
+ to :display
35
+ end
36
+ end