stack-encode 0.2.1 → 0.3.0

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: 480eff6014663edb1f4c334f3d56e3d69937a4ed
4
- data.tar.gz: 318be20e9527d47f88a83961ac33a1f04343cef7
3
+ metadata.gz: 3b424112450f9f17120772daec636dacc1e167dc
4
+ data.tar.gz: 74736aa088b738e4f9035abef8eae0706f790123
5
5
  SHA512:
6
- metadata.gz: 7ebbd2b8d6c2faa7787c0288af186f62744c7c5fd66b5abbc8f3ae4695e40c3a7e505ff0dd0f61d2967bbe370cc3d4383ce859b265fadd0ef4498f59e8fd861d
7
- data.tar.gz: 987ceec58bd05815fd9ca2537037138c2432feb31d795df00c31ccb2f97345f94255358eee30989385881341eaf8263a93cf97449802ea1407a832951a265389
6
+ metadata.gz: 0257cb3bebd3ea1508bdabe5ba9816da0a3bc0b54cf3e5380c782cee697142cade2f132aeb92e06355dcdd1abf51001078937ba43e2a42bc8cea1f1e1ac645ca
7
+ data.tar.gz: 2c52be8cf08ee68f0556c25e575f8e32e2a7d51f85dc4c12b2fc801adada2270879413f43a8e1e59a5798d7d1ddd6aec5d8340bcd8c47eab68139797dce4f8a0
data/README.md CHANGED
@@ -31,6 +31,41 @@ Encoding 2011-05-31_0053_loaud4.mp2 to MP3: [#################################]
31
31
  Encoding 2014-05-26_0010_lo.mp4 to MP4: [#################################] 100%
32
32
  ```
33
33
 
34
+ ## Profiles
35
+
36
+ Stack Encode supports ffmpeg setting profiles in the form of YAML files.
37
+ There are 3 different hashes for the following settings:
38
+
39
+ - video settings - used for transcoding video files
40
+ - audio settings - used for transcoding audio files
41
+ - transcoder settings - general transcoder settings
42
+
43
+ This is an example profile file for stack-encode (my_profile.yml):
44
+
45
+ ```YAML
46
+ ---
47
+ video:
48
+ resolution: 320x480
49
+ frame_rate: 10
50
+ x264_vprofile: high
51
+ x264_preset: slow
52
+ audio_codec: libfaac
53
+ custom: -movflags +faststart
54
+
55
+ audio:
56
+ audio_channels: 1
57
+ custom: -ab 48k
58
+
59
+ transcoder:
60
+ preserve_aspect_ratio: :width
61
+ ```
62
+ You can use the profile from above like this:
63
+
64
+ ```bash
65
+ $ stack-encode encode --profile my_profile.yml audio_file.wma
66
+ ```
67
+
68
+
34
69
  ## Contributing
35
70
 
36
71
  1. Fork it
@@ -29,11 +29,11 @@ module StackEncode
29
29
  desc: "destination directory",
30
30
  aliases: '-d'
31
31
  option :video_format,
32
- desc: "video format",
32
+ desc: "destination video format",
33
33
  aliases: '-v',
34
34
  default: 'mp4'
35
35
  option :audio_format,
36
- desc: "audio format",
36
+ desc: "destination audio format",
37
37
  aliases: '-a',
38
38
  default: 'mp3'
39
39
  option :log_file,
@@ -44,35 +44,83 @@ module StackEncode
44
44
  desc: "show encoding progress",
45
45
  type: :boolean,
46
46
  default: true
47
+ option :profile,
48
+ desc: "path to profile file (YAML)",
49
+ aliases: '-p',
50
+ default: ENV['STACKENCODE_PROFILE'] || nil
47
51
  option :ffmpeg_options,
48
- desc: "custom ffmpeg options",
52
+ desc: "custom ffmpeg options string",
49
53
  aliases: '-o',
50
- default: ENV['FFMPEG_OPTIONS'] || nil
54
+ default: ENV['FFMPEG_OPTIONS'] || ""
51
55
  def encode(*files)
52
56
  FFMPEG.logger = Logger.new(options[:log_file])
57
+ profile = Profile.new(
58
+ profile_path: options[:profile],
59
+ custom_options: options[:ffmpeg_options]
60
+ )
53
61
  files.each do |source|
54
62
  unless File.file?(source)
55
63
  puts "#{source} is not a valid file"
56
64
  next
57
65
  end
58
- movie = FFMPEG::Movie.new(source)
59
- dest_format = movie.video_stream ? options[:video_format] : options[:audio_format]
66
+ file = FFMPEG::Movie.new(source)
67
+ dest_format = file.video_stream ? options[:video_format] : options[:audio_format]
60
68
  dest_dir = options[:destination] || File.dirname(source)
61
69
  filename = File.basename(source, File.extname(source)) + ".#{dest_format}"
62
70
  banner = "Encoding #{File.basename(source)} to #{dest_format.upcase} ==> #{filename}"
63
- puts banner unless options[:progress]
64
- transcoded_movie = movie.transcode(
65
- File.expand_path(
66
- "#{dest_dir}/" + filename
67
- ),
68
- options[:ffmpeg_options]
71
+ say banner unless options[:progress]
72
+ transcoded_file = file.transcode(
73
+ File.expand_path(File.join(dest_dir, filename)),
74
+ file.video_stream ? profile.video_options : profile.audio_options,
75
+ profile.transcoder_options
69
76
  ) do |progress|
70
77
  if options[:progress]
71
78
  print_progress(progress * 100, banner)
72
79
  end
73
80
  end
74
- puts if options[:progress]
75
- transcoded_movie
81
+ say if options[:progress]
82
+ transcoded_file
83
+ end
84
+ end
85
+
86
+ desc "info FILES", "Print information for a number video or audio files"
87
+ def info(*files)
88
+ files.each do |source|
89
+ unless File.file?(source)
90
+ puts "#{source} is not a valid file"
91
+ next
92
+ end
93
+ file = FFMPEG::Movie.new(source)
94
+ if file.valid?
95
+ say source, :green
96
+ table = [
97
+ ["file type", file.video_stream ? "video" : "audio"],
98
+ ["duration", file.duration.to_s + " sec"],
99
+ ["bitrate", file.bitrate.to_s + " kb/s"],
100
+ ["size", file.size.to_s + " bytes"]
101
+ ]
102
+ table += if file.video_stream
103
+ [
104
+ ["video_codec", file.video_codec],
105
+ ["colorspace", file.colorspace],
106
+ ["resolution", file.resolution],
107
+ ["frame_rate", file.frame_rate.to_s + " fps"],
108
+ ["audio_codec", file.audio_codec],
109
+ ["audio_sample_rate", file.audio_sample_rate.to_s],
110
+ ["audio_channels", file.audio_channels.to_s]
111
+ ]
112
+ else
113
+ [
114
+ ["audio_codec", file.audio_codec],
115
+ ["audio_sample_rate", file.audio_sample_rate.to_s],
116
+ ["audio_channels", file.audio_channels.to_s]
117
+ ]
118
+ end
119
+ print_table table
120
+ puts
121
+ else
122
+ puts "Invalid source file"
123
+ end
76
124
  end
77
125
  end
78
126
 
@@ -0,0 +1,51 @@
1
+ module StackEncode
2
+ require 'yaml'
3
+
4
+ class Profile
5
+
6
+ def initialize(options = {})
7
+ @profile_path = options[:profile_path] ? options[:profile_path] : nil
8
+ @custom_options = options[:custom_options] ? options[:custom_options] : nil
9
+ end
10
+
11
+ def settings
12
+ @settings ||= if @profile_path
13
+ begin
14
+ YAML.load_file @profile_path
15
+ rescue SystemCallError
16
+ $stderr.puts "Can't find profile #{@profile_path}."
17
+ exit 1
18
+ rescue => e
19
+ $stderr.puts "Error parsing profile (#{@profile_path}):"
20
+ $stderr.puts e.message
21
+ exit 1
22
+ end
23
+ else
24
+ {}
25
+ end
26
+ end
27
+
28
+ def video_options
29
+ video_options = settings['video'] ? settings['video'] : {}
30
+ merge_custom_options(video_options)
31
+ end
32
+
33
+ def audio_options
34
+ audio_options = settings['audio'] ? settings['audio'] : {}
35
+ merge_custom_options(audio_options)
36
+ end
37
+
38
+ def transcoder_options
39
+ @settings['transcoder'] ? @settings['transcoder'] : {}
40
+ end
41
+
42
+ private
43
+
44
+ def merge_custom_options(options)
45
+ profile_options = options['custom'] ? options['custom'] : ''
46
+ options['custom'] = [profile_options, @custom_options].join(' ').strip || ''
47
+ options
48
+ end
49
+
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module StackEncode
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/stack-encode.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require "stack-encode/version"
2
+ require "stack-encode/profile"
2
3
  require "stack-encode/cli"
data/test/profile.yml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ video:
3
+ resolution: 320x480
4
+ frame_rate: 10
5
+ x264_vprofile: high
6
+ x264_preset: slow
7
+ audio_codec: libfaac
8
+ custom: -movflags +faststart
9
+
10
+ audio:
11
+ audio_channels: 1
12
+ custom: -ab 64k
13
+
14
+ transcoder:
15
+ preserve_aspect_ratio: :width
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack-encode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nik Wolfgramm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-26 00:00:00.000000000 Z
11
+ date: 2015-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -82,8 +82,10 @@ files:
82
82
  - bin/stack-encode
83
83
  - lib/stack-encode.rb
84
84
  - lib/stack-encode/cli.rb
85
+ - lib/stack-encode/profile.rb
85
86
  - lib/stack-encode/version.rb
86
87
  - stack-encode.gemspec
88
+ - test/profile.yml
87
89
  homepage: https://github.com/swisstxt/stack-encode
88
90
  licenses:
89
91
  - MIT
@@ -108,4 +110,5 @@ rubygems_version: 2.2.2
108
110
  signing_key:
109
111
  specification_version: 4
110
112
  summary: stack-encode - automating the encoding process with ffmpeg
111
- test_files: []
113
+ test_files:
114
+ - test/profile.yml