evideo 0.2.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0790e2e3d70d9a24e7dd68fd3de6910b2f76acbb08340b381bc1384bc41ea1a7'
4
- data.tar.gz: f2fdd13f9fd3766c4139fc19a17eb494c0d82b3362231a47bfa087506351d7d6
3
+ metadata.gz: ebefc113933dc1cc99fab42d3aecd5b907231b2bcf70d9364572305e303a5554
4
+ data.tar.gz: e68bd951fd8912ceea23ec54a4a3774f2234ae505e6b065e9c20b3bd9ed18fcd
5
5
  SHA512:
6
- metadata.gz: a6600bc14a3b436d3de37b4a393f1c8e23e64381add067c80d0033fc7d511b08362ac5b94d06b140c5f3047602b520fed5df0332bf05e4025a3b34e01c0c10a9
7
- data.tar.gz: 25353d139bcf0b2c14b84716b52d7fa64442f91c53a51640963828e1a68ce9d1dd8ff8549c0cb17e6d22224d745fab9a2aba86143e5861373116a6521648e665
6
+ metadata.gz: e8690ca607ae90682154d61498c1236aa4f1433527c07be0dd4b0a73c7b7a3f2c04f3e5804e033ead09b49ccb9aa39469466a284c65a897e2e4bbcff4bddfd10
7
+ data.tar.gz: f03bea64673a278436199ba8c623a57d84448103e277cfeda18e9532485bb70e44441f9015149d2b8cea5536e8066660efd07715f202a2552caa6ea8df40b50a
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- evideo (0.2.0)
5
- thor (~> 0.1)
4
+ evideo (0.2.1)
5
+ thor
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  rake (13.0.1)
11
- thor (0.20.3)
11
+ thor (1.0.1)
12
12
 
13
13
  PLATFORMS
14
14
  ruby
@@ -19,4 +19,4 @@ DEPENDENCIES
19
19
  rake
20
20
 
21
21
  BUNDLED WITH
22
- 1.17.2
22
+ 2.1.2
@@ -34,5 +34,5 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency 'bundler'
35
35
  spec.add_development_dependency 'rake'
36
36
 
37
- spec.add_dependency 'thor', '~> 0.1'
37
+ spec.add_dependency 'thor'
38
38
  end
@@ -13,16 +13,13 @@ module Evideo
13
13
  class_option :d, banner: 'DIR', type: :array,
14
14
  default: ["/home/#{ID}/lust", "/media/#{ID}/hrv2"],
15
15
  desc: 'Onde procurar videos'
16
- class_option :i, banner: 'IN', default: 'ftv',
17
- desc: 'Pasta origem'
18
- class_option :o, banner: 'OUT', default: 'out',
19
- desc: 'Pasta destino'
16
+ class_option :i, banner: 'IN', default: 'ftv', desc: 'Pasta origem'
17
+ class_option :o, banner: 'OUT', default: 'out', desc: 'Pasta destino'
20
18
  desc 'conv', 'converte videos'
21
- option :t, type: :boolean, default: false,
22
- desc: 'Processa somente segundos para teste'
19
+ option :t, type: :boolean, default: false, desc: 'Processa somente segundos para teste'
23
20
  # Processa videos
24
21
  def conv
25
- Dir.glob("#{fin}/*.???").sort.each do |f|
22
+ Dir.glob("#{fin}/c*.???").sort.each do |f|
26
23
  HRVideo.new(f).processa(options, fout)
27
24
  end
28
25
  end
@@ -30,7 +27,7 @@ module Evideo
30
27
  desc 'test', 'testa videos'
31
28
  # Analisa videos
32
29
  def test
33
- Dir.glob("#{fin}/*.???").sort.each do |f|
30
+ Dir.glob("#{fin}/c*.???").sort.each do |f|
34
31
  HRVideo.new(f).testa(options, fout)
35
32
  end
36
33
  end
@@ -13,6 +13,8 @@ module Evideo
13
13
  attr_reader :duration
14
14
  # @return [String] bitrate do ficheiro video
15
15
  attr_reader :bitrate
16
+ # @return [String] frequencia audio do ficheiro video
17
+ attr_reader :audio
16
18
 
17
19
  # Duration: 01:01:08.50, start: 0.000000, bitrate: 2228 kb/s
18
20
  R1 = /duration:\s+(\d\d:\d\d:\d\d).*bitrate:\s+(\d+)\s+kb/i.freeze
@@ -21,6 +23,9 @@ module Evideo
21
23
  R2 = /stream.*video:.*x\s*(\d+).*\s+(\d+\.*\d*)\s+fps/i.freeze
22
24
  # display_aspect_ratio=16:9
23
25
  R3 = /display_aspect_ratio\s*=\s*(\d+:\d+)$/i.freeze
26
+ # Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
27
+ # Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
28
+ R4 = /stream.*audio:.*\s+(\d+)\s+hz/i.freeze
24
29
 
25
30
  def initialize(fvideo)
26
31
  @video = fvideo
@@ -28,7 +33,7 @@ module Evideo
28
33
  @base = File.basename(fvideo, @ext).downcase
29
34
  @duration = '00:00:00'
30
35
  @bitrate = 0
31
- @probe = `#{probe}` if File.exist?(fvideo)
36
+ @probe = `#{cmd_probe}` if File.exist?(fvideo)
32
37
  return unless @probe
33
38
 
34
39
  tr1 = @probe.scan(R1).flatten
@@ -52,6 +57,20 @@ module Evideo
52
57
  @ratio = @probe.scan(R3).flatten[0]
53
58
  end
54
59
 
60
+ # Parametrizar audio
61
+ def r4
62
+ return unless @probe
63
+
64
+ @audio = @probe.scan(R4).flatten[0].to_i
65
+ end
66
+
67
+ # @return [String] audio
68
+ def audio
69
+ r4 unless @audio
70
+
71
+ @audio
72
+ end
73
+
55
74
  # @return [String] height
56
75
  def height
57
76
  r2 unless @height
@@ -17,9 +17,9 @@ module Evideo
17
17
  # @param [String] aot pasta destino dos videos absoluta
18
18
  # @return [true, false] sim ou nao video esta ok
19
19
  def ofok?(aot)
20
- return false unless (bitrate < 3000 && ext == '.mp4') ||
21
- Time.parse(duration) < Time.parse('00:01:00')
20
+ return false unless (bitrate < 3000 && ext == '.mp4') || Time.parse(duration) < Time.parse('00:01:00')
22
21
  return false unless ratio == '16:9' && height > 480
22
+ return false unless audio == 0
23
23
 
24
24
  puts "mv \"#{video} #{aot}/#{base}.mp4\" # #{show}"
25
25
  true
@@ -31,8 +31,7 @@ module Evideo
31
31
  # @return [true, false] sim ou nao video esta ok
32
32
  def vfok?(file)
33
33
  return false unless File.exist?(file.video) &&
34
- file.bitrate < 3000 &&
35
- Time.parse(file.duration) > Time.parse(duration) - 60
34
+ file.bitrate < 3000 && Time.parse(file.duration) > Time.parse(duration) - 60
36
35
 
37
36
  puts "rm \"#{video}\" # #{file.video} #{file.show}"
38
37
  true
@@ -50,14 +49,6 @@ module Evideo
50
49
  end
51
50
  end
52
51
 
53
- # @return [String] opcoes gerais comando conversao
54
- def geral
55
- '-loglevel quiet -hide_banner' +
56
- # para ignorar segundos no inicio
57
- # ' -ss 15' \
58
- ''
59
- end
60
-
61
52
  # @return [String] aspect ratio comando conversao
62
53
  def aspect
63
54
  if ratio == '0:1' then height < 720 ? '' : ' -aspect 16:9'
@@ -74,15 +65,16 @@ module Evideo
74
65
  end
75
66
 
76
67
  # @return [String] comando analise
77
- def probe
68
+ def cmd_probe
78
69
  "ffprobe -hide_banner -show_streams \"#{video}\" 2>&1|grep -v title"
79
70
  end
80
71
 
81
72
  # Comando para processar videos
82
73
  #
83
- # @param [String] tempo do video processato
74
+ # @param [String] tempo do video processado
84
75
  # @return [String] comando conversao
85
- def mpeg(tempo)
76
+ def cmd_mpeg(tempo)
77
+ puts "processar #{base}.mp4 -r #{[fps, 25].min} -b:v #{[bitrate, 2000].min}k" + dimension + aspect + tempo
86
78
  "ffmpeg #{geral} -i \"#{video}\" -y -an " +
87
79
  # framerate & bitrate
88
80
  "-r #{[fps, 25].min} -b:v #{[bitrate, 2000].min}k" +
@@ -93,6 +85,14 @@ module Evideo
93
85
  tempo
94
86
  end
95
87
 
88
+ # @return [String] opcoes gerais comando conversao
89
+ def geral
90
+ '-loglevel quiet -hide_banner' +
91
+ # para ignorar segundos no inicio
92
+ # ' -ss 15' \
93
+ ''
94
+ end
95
+
96
96
  # Processa videos
97
97
  #
98
98
  # @param [Hash] opcoes parametrizacao
@@ -104,7 +104,7 @@ module Evideo
104
104
  def processa(opcoes, aot)
105
105
  return if ofok?(aot) || vdok?(opcoes[:d], opcoes[:o])
106
106
 
107
- system mpeg(opcoes[:t] ? ' -t 20' : '') + " #{aot}/#{base}.mp4"
107
+ system cmd_mpeg(opcoes[:t] ? ' -t 20' : '') + " #{aot}/#{base}.mp4"
108
108
  vfok?(HRVideo.new("#{aot}/#{base}.mp4"))
109
109
  end
110
110
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Evideo
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evideo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hernâni Rodrigues Vaz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.1'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.1'
54
+ version: '0'
55
55
  description: Processa ficheiros video. Pode alterar bitrate, framerate, height, aspect
56
56
  ratio e elimina metadata.
57
57
  email:
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubygems_version: 3.0.3
101
+ rubygems_version: 3.1.2
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Processa ficheiros video.