paperclip-ffmpeg 0.9.1 → 0.9.3
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.
data/Gemfile
CHANGED
data/lib/paperclip-ffmpeg.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
require "paperclip"
|
2
|
-
require "
|
3
|
-
require "
|
2
|
+
require "paperclip_processors/ffmpeg"
|
3
|
+
require "paperclip_processors/qtfaststart"
|
@@ -40,13 +40,19 @@ module Paperclip
|
|
40
40
|
# Performs the transcoding of the +file+ into a thumbnail/video. Returns the Tempfile
|
41
41
|
# that contains the new image/video.
|
42
42
|
def make
|
43
|
+
Ffmpeg.log("Making...") if @whiny
|
43
44
|
src = @file
|
45
|
+
Ffmpeg.log("Building Destination File: '#{@basename}' + '#{@format}'") if @whiny
|
44
46
|
dst = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
|
47
|
+
Ffmpeg.log("Destination File Built") if @whiny
|
45
48
|
dst.binmode
|
46
49
|
|
47
50
|
parameters = []
|
51
|
+
|
52
|
+
Ffmpeg.log("Adding Geometry") if @whiny
|
48
53
|
# Add geometry
|
49
54
|
if @geometry
|
55
|
+
Ffmpeg.log("Extracting Target Dimensions") if @whiny
|
50
56
|
# Extract target dimensions
|
51
57
|
if @geometry =~ /(\d*)x(\d*)/
|
52
58
|
target_width = $1
|
@@ -54,30 +60,37 @@ module Paperclip
|
|
54
60
|
end
|
55
61
|
# Only calculate target dimensions if we have current dimensions
|
56
62
|
unless @meta[:size].nil?
|
57
|
-
|
63
|
+
Ffmpeg.log("Target Size is Available") if @whiny
|
64
|
+
current_width, current_height = @meta[:size].split('x')
|
58
65
|
# Current width and height
|
59
|
-
current_width = current_geometry[0]
|
60
|
-
current_height = current_geometry[1]
|
61
66
|
if @keep_aspect
|
67
|
+
Ffmpeg.log("Keeping Aspect Ratio") if @whiny
|
62
68
|
if @enlarge_only
|
69
|
+
Ffmpeg.log("Enlarge Only") if @whiny
|
63
70
|
if current_width.to_i < target_width.to_i
|
64
71
|
# Keep aspect ratio
|
65
72
|
width = target_width.to_i
|
66
73
|
height = (width.to_f / (@meta[:aspect].to_f)).to_i
|
67
74
|
@convert_options[:output][:s] = "#{width.to_i/2*2}x#{height.to_i/2*2}"
|
75
|
+
Ffmpeg.log("Convert Options: #{@convert_options[:output][:s]}") if @whiny
|
68
76
|
else
|
69
|
-
|
77
|
+
Ffmpeg.log("Source is Larger than Destination, Doing Nothing") if @whiny
|
78
|
+
#return nil
|
70
79
|
end
|
71
80
|
elsif @shrink_only
|
81
|
+
Ffmpeg.log("Shrink Only") if @whiny
|
72
82
|
if current_width.to_i > target_width.to_i
|
73
83
|
# Keep aspect ratio
|
74
84
|
width = target_width.to_i
|
75
85
|
height = (width.to_f / (@meta[:aspect].to_f)).to_i
|
76
86
|
@convert_options[:output][:s] = "#{width.to_i/2*2}x#{height.to_i/2*2}"
|
87
|
+
Ffmpeg.log("Convert Options: #{@convert_options[:output][:s]}") if @whiny
|
77
88
|
else
|
78
|
-
|
89
|
+
Ffmpeg.log("Source is Smaller than Destination, Doing Nothing") if @whiny
|
90
|
+
#return nil
|
79
91
|
end
|
80
92
|
elsif @pad_only
|
93
|
+
Ffmpeg.log("Pad Only") if @whiny
|
81
94
|
# Keep aspect ratio
|
82
95
|
width = target_width.to_i
|
83
96
|
height = (width.to_f / (@meta[:aspect].to_f)).to_i
|
@@ -88,18 +101,25 @@ module Paperclip
|
|
88
101
|
else
|
89
102
|
@convert_options[:output][:vf] = "scale=#{width}:-1,crop=#{width.to_i}:#{height.to_i}"
|
90
103
|
end
|
104
|
+
Ffmpeg.log("Convert Options: #{@convert_options[:output][:s]}") if @whiny
|
91
105
|
else
|
106
|
+
Ffmpeg.log("Resize") if @whiny
|
92
107
|
# Keep aspect ratio
|
93
108
|
width = target_width.to_i
|
94
109
|
height = (width.to_f / (@meta[:aspect].to_f)).to_i
|
95
110
|
@convert_options[:output][:s] = "#{width.to_i/2*2}x#{height.to_i/2*2}"
|
111
|
+
Ffmpeg.log("Convert Options: #{@convert_options[:output][:s]}") if @whiny
|
96
112
|
end
|
97
113
|
else
|
114
|
+
Ffmpeg.log("Not Keeping Aspect Ratio") if @whiny
|
98
115
|
# Do not keep aspect ratio
|
99
116
|
@convert_options[:output][:s] = "#{target_width.to_i/2*2}x#{target_height.to_i/2*2}"
|
117
|
+
Ffmpeg.log("Convert Options: #{@convert_options[:output][:s]}") if @whiny
|
100
118
|
end
|
101
119
|
end
|
102
120
|
end
|
121
|
+
|
122
|
+
Ffmpeg.log("Adding Format") if @whiny
|
103
123
|
# Add format
|
104
124
|
case @format
|
105
125
|
when 'jpg', 'jpeg', 'png', 'gif' # Images
|
@@ -107,20 +127,22 @@ module Paperclip
|
|
107
127
|
@convert_options[:output][:vframes] = 1
|
108
128
|
@convert_options[:output][:f] = 'image2'
|
109
129
|
end
|
110
|
-
|
130
|
+
|
131
|
+
Ffmpeg.log("Adding Source") if @whiny
|
111
132
|
# Add source
|
112
133
|
parameters << @convert_options[:input].map { |k,v| "-#{k.to_s} #{v} "}
|
113
134
|
parameters << "-i :source"
|
114
135
|
parameters << @convert_options[:output].map { |k,v| "-#{k.to_s} #{v} "}
|
115
136
|
parameters << ":dest"
|
116
137
|
|
138
|
+
Ffmpeg.log("Building Parameters") if @whiny
|
117
139
|
parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ")
|
118
|
-
|
119
|
-
|
140
|
+
|
141
|
+
Ffmpeg.log(parameters)
|
120
142
|
begin
|
121
143
|
success = Paperclip.run("ffmpeg", parameters, :source => "#{File.expand_path(src.path)}", :dest => File.expand_path(dst.path))
|
122
144
|
rescue Cocaine::ExitStatusError => e
|
123
|
-
raise
|
145
|
+
raise Paperclip::Error, "error while processing video for #{@basename}: #{e}" if @whiny
|
124
146
|
end
|
125
147
|
|
126
148
|
dst
|
@@ -129,7 +151,7 @@ module Paperclip
|
|
129
151
|
def identify
|
130
152
|
meta = {}
|
131
153
|
command = "ffmpeg -i \"#{File.expand_path(@file.path)}\" 2>&1"
|
132
|
-
Paperclip.log(command)
|
154
|
+
Paperclip.log("[ffmpeg] #{command}")
|
133
155
|
ffmpeg = IO.popen(command)
|
134
156
|
ffmpeg.each("\r") do |line|
|
135
157
|
if line =~ /((\d*)\s.?)fps,/
|
@@ -148,8 +170,14 @@ module Paperclip
|
|
148
170
|
meta[:length] = $2.to_s + ":" + $3.to_s + ":" + $4.to_s
|
149
171
|
end
|
150
172
|
end
|
173
|
+
Paperclip.log("[ffmpeg] Command Success") if @whiny
|
151
174
|
meta
|
152
175
|
end
|
176
|
+
|
177
|
+
|
178
|
+
def self.log message
|
179
|
+
Paperclip.log "[ffmpeg] #{message}"
|
180
|
+
end
|
153
181
|
end
|
154
182
|
|
155
183
|
class Attachment
|
File without changes
|
data/paperclip-ffmpeg.gemspec
CHANGED
metadata
CHANGED
@@ -1,72 +1,69 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-ffmpeg
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.3
|
4
5
|
prerelease:
|
5
|
-
version: 0.9.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Omar Abdel-Wahab
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-11-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: paperclip
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
23
21
|
version: 2.5.2
|
24
22
|
type: :runtime
|
25
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.5.2
|
26
30
|
description: Process your attachments with FFMPEG
|
27
|
-
email:
|
31
|
+
email:
|
28
32
|
- owahab@gmail.com
|
29
33
|
executables: []
|
30
|
-
|
31
34
|
extensions: []
|
32
|
-
|
33
35
|
extra_rdoc_files: []
|
34
|
-
|
35
|
-
files:
|
36
|
+
files:
|
36
37
|
- .gitignore
|
37
38
|
- Gemfile
|
38
39
|
- README.md
|
39
40
|
- Rakefile
|
40
41
|
- lib/paperclip-ffmpeg.rb
|
41
|
-
- lib/
|
42
|
-
- lib/
|
42
|
+
- lib/paperclip_processors/ffmpeg.rb
|
43
|
+
- lib/paperclip_processors/qtfaststart.rb
|
43
44
|
- paperclip-ffmpeg.gemspec
|
44
45
|
homepage: http://github.com/owahab/paperclip-ffmpeg
|
45
46
|
licenses: []
|
46
|
-
|
47
47
|
post_install_message:
|
48
48
|
rdoc_options: []
|
49
|
-
|
50
|
-
require_paths:
|
49
|
+
require_paths:
|
51
50
|
- lib
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
52
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
58
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version:
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
64
63
|
requirements: []
|
65
|
-
|
66
64
|
rubyforge_project: paperclip-ffmpeg
|
67
65
|
rubygems_version: 1.8.24
|
68
66
|
signing_key:
|
69
67
|
specification_version: 3
|
70
68
|
summary: Process your attachments with FFMPEG
|
71
69
|
test_files: []
|
72
|
-
|