ffmprb 0.6.7 → 0.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ffmprb/file.rb +7 -7
- data/lib/ffmprb/filter.rb +2 -6
- data/lib/ffmprb/process/input.rb +1 -1
- data/lib/ffmprb/process/output.rb +2 -2
- data/lib/ffmprb/process.rb +2 -2
- data/lib/ffmprb/util.rb +15 -11
- data/lib/ffmprb/version.rb +1 -1
- data/lib/ffmprb.rb +5 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c63aad2be1497ee10ff566dafaa5a76f7e8cc87
|
4
|
+
data.tar.gz: 0b6b1f15cd314f7b51fc7dbddb3b9c37f47dcdfe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 183ba570ca74223f6f5974a969ff9f2bd74fe5a8a099e34b429901773d76d7757d8c58fb8666d9444abedc5539d978b98ef22fa1c534bb9b7ba43a14665a9701
|
7
|
+
data.tar.gz: a9be63b31513b789f454931b0514c3b7601e01ac38ba71ee4a596cd82cab7b99b3547439303aace34595235e69b719550d3361830431d8091bb5df922a3c6e2b
|
data/lib/ffmprb/file.rb
CHANGED
@@ -131,10 +131,10 @@ module Ffmprb
|
|
131
131
|
raise Error, "Incorrect audio extname (must be .mp3)" unless !audio || audio.extname =~ /mp3$/
|
132
132
|
raise Error, "Can sample either video OR audio UNLESS a block is given" unless block_given? || (!!audio != !!video)
|
133
133
|
|
134
|
-
cmd =
|
135
|
-
cmd
|
136
|
-
cmd
|
137
|
-
Util.ffmpeg cmd
|
134
|
+
cmd = ['-i', path]
|
135
|
+
cmd += ['-deinterlace', '-an', '-ss', at, '-r', 1, '-vcodec', 'mjpeg', '-f', 'mjpeg', video.path] if video
|
136
|
+
cmd += ['-vn', '-ss', at, '-t', 1, '-f', 'mp3', audio.path] if audio
|
137
|
+
Util.ffmpeg *cmd
|
138
138
|
|
139
139
|
return video || audio unless block_given?
|
140
140
|
|
@@ -172,9 +172,9 @@ module Ffmprb
|
|
172
172
|
|
173
173
|
def probe(force=false)
|
174
174
|
return @probe unless !@probe || force
|
175
|
-
cmd =
|
176
|
-
cmd <<
|
177
|
-
@probe = JSON.parse(Util::ffprobe cmd).tap do |probe|
|
175
|
+
cmd = ['-v', 'quiet', '-i', path, '-print_format', 'json', '-show_format', '-show_streams']
|
176
|
+
cmd << '-show_frames' if force
|
177
|
+
@probe = JSON.parse(Util::ffprobe *cmd).tap do |probe|
|
178
178
|
raise Error, "This doesn't look like a ffprobable file" unless probe['streams']
|
179
179
|
end
|
180
180
|
end
|
data/lib/ffmprb/filter.rb
CHANGED
@@ -210,12 +210,8 @@ module Ffmprb
|
|
210
210
|
inout filter, nil, output
|
211
211
|
end
|
212
212
|
|
213
|
-
def complex_options(filters)
|
214
|
-
|
215
|
-
''
|
216
|
-
else
|
217
|
-
" -filter_complex \"#{filters.join '; '}\""
|
218
|
-
end
|
213
|
+
def complex_options(*filters)
|
214
|
+
['-filter_complex', filters.join('; ')] unless filters.empty?
|
219
215
|
end
|
220
216
|
|
221
217
|
private
|
data/lib/ffmprb/process/input.rb
CHANGED
@@ -238,9 +238,9 @@ module Ffmprb
|
|
238
238
|
end
|
239
239
|
io_channel_lbls.each do |io, channel_lbls|
|
240
240
|
channel_lbls.each do |channel_lbl|
|
241
|
-
options <<
|
241
|
+
options << '-map' << "[#{channel_lbl}]"
|
242
242
|
end
|
243
|
-
options <<
|
243
|
+
options << io.path
|
244
244
|
end
|
245
245
|
|
246
246
|
end
|
data/lib/ffmprb/process.rb
CHANGED
@@ -70,7 +70,7 @@ module Ffmprb
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def run
|
73
|
-
Util.ffmpeg command
|
73
|
+
Util.ffmpeg *command
|
74
74
|
@threaded.to_a.each &:join
|
75
75
|
end
|
76
76
|
|
@@ -93,7 +93,7 @@ module Ffmprb
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def input_options
|
96
|
-
@inputs.map(&:options).
|
96
|
+
@inputs.map(&:options).flatten(1)
|
97
97
|
end
|
98
98
|
|
99
99
|
def output_options
|
data/lib/ffmprb/util.rb
CHANGED
@@ -10,28 +10,32 @@ module Ffmprb
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
attr_accessor :ffmpeg_cmd, :ffprobe_cmd
|
14
|
+
|
15
|
+
def ffprobe(*args)
|
16
|
+
sh ffprobe_cmd, *args
|
15
17
|
end
|
16
18
|
|
17
|
-
def ffmpeg(args)
|
18
|
-
args =
|
19
|
-
sh
|
19
|
+
def ffmpeg(*args)
|
20
|
+
args = ['-loglevel', 'debug'] + args if Ffmprb.debug
|
21
|
+
sh ffmpeg_cmd, '-y', *args, output: :stderr
|
20
22
|
end
|
21
23
|
|
22
|
-
def sh(cmd, output: :stdout, log: :stderr)
|
23
|
-
|
24
|
-
|
24
|
+
def sh(*cmd, output: :stdout, log: :stderr)
|
25
|
+
cmd = cmd.to_a.map(&:to_s)
|
26
|
+
cmd_str = cmd.join(' ')
|
27
|
+
Ffmprb.logger.info cmd_str
|
28
|
+
Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thr|
|
25
29
|
stdin.close
|
26
30
|
|
27
31
|
# XXX process timeouting/cleanup here will be appreciated
|
28
32
|
|
29
33
|
begin
|
30
|
-
log_cmd = "#{cmd.split(' ').first.upcase}: " if log
|
34
|
+
log_cmd = "#{(cmd.respond_to?(:first)? cmd : cmd.split(' ')).first.upcase}: " if log
|
31
35
|
stdout_r = Reader.new(stdout, output == :stdout, log == :stdout && log_cmd)
|
32
36
|
stderr_r = Reader.new(stderr, true, log == :stderr && log_cmd)
|
33
37
|
|
34
|
-
raise Error, "#{
|
38
|
+
raise Error, "#{cmd_str}:\n#{stderr_r.read}" unless
|
35
39
|
wait_thr.value.exitstatus == 0 # NOTE blocks
|
36
40
|
|
37
41
|
# NOTE only one of them will return non-nil, see above
|
@@ -45,7 +49,7 @@ module Ffmprb
|
|
45
49
|
Ffmprb.logger.error "Thread joining error: #{$!.message}"
|
46
50
|
stderr_r.join if stdout_r
|
47
51
|
end
|
48
|
-
Ffmprb.logger.debug "FINISHED: #{
|
52
|
+
Ffmprb.logger.debug "FINISHED: #{cmd_str}"
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
data/lib/ffmprb/version.rb
CHANGED
data/lib/ffmprb.rb
CHANGED
@@ -19,6 +19,9 @@ module Ffmprb
|
|
19
19
|
class Error < StandardError
|
20
20
|
end
|
21
21
|
|
22
|
+
Util.ffmpeg_cmd = 'ffmpeg'
|
23
|
+
Util.ffprobe_cmd = 'ffprobe'
|
24
|
+
|
22
25
|
Process.duck_audio_hi = 0.9
|
23
26
|
Process.duck_audio_lo = 0.1
|
24
27
|
Process.duck_audio_transition_sec = 1
|
@@ -59,9 +62,9 @@ module Ffmprb
|
|
59
62
|
def find_silence(input_file, output_file)
|
60
63
|
logger.debug "Finding silence (#{input_file.path}->#{output_file.path})"
|
61
64
|
filters = Filter.silencedetect
|
62
|
-
options =
|
65
|
+
options = ['-i', input_file.path, *Filter.complex_options(filters), output_file.path]
|
63
66
|
silence = []
|
64
|
-
Util.ffmpeg(options).split("\n").each do |line|
|
67
|
+
Util.ffmpeg(*options).split("\n").each do |line|
|
65
68
|
next unless line =~ /^\[silencedetect\s.*\]\s*silence_(\w+):\s*(\d+\.?d*)/
|
66
69
|
case $1
|
67
70
|
when 'start'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffmprb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- showbox.com
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-07-
|
12
|
+
date: 2015-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mkfifo
|