moshy 1.0.0 → 2.0.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.
data/lib/moshy/ppulse.rb CHANGED
@@ -1,153 +1,153 @@
1
- module Moshy
2
- class PPulse
3
- def cli(args)
4
- opts = Slop::Options.new
5
- opts.banner = "Usage: moshy -m ppulse -i file.avi -o file_out.avi [options]\nmoshy -m inspect --help for details"
6
- opts.separator 'Required Parameters:'
7
- opts.string '-i', '--input', 'Input file path - must be an .avi. Clip to split in split mode, first clip in stitch mode'
8
- opts.string '-o', '--output', 'Output file path - will be appended with -#.avi for each frame in split mode'
9
- opts.separator 'Optional Parameters:'
10
- opts.string '-k', '--keep', 'Whether or not to keep standard frames. (default: true)', default: "true"
11
- opts.integer '-c', '--count', 'How many frames to grab forward from each interval. (default: 1)', default: 1
12
- opts.integer '-d', '--dupes', 'Number of times to multiply the frame (default: 30)', default: 30
13
- opts.integer '-n', '--interval', 'Which nth frames should be duplicated (default: 30)', default: 30
14
- opts.on '-h', '--help' do
15
- puts opts
16
- puts "\n"
17
- puts \
18
- "Takes c number of frames and every n frames and duplicates them a
19
- given amount, resulting in a consistent P-duplication datamosh that's
20
- good for creating rhythmic effects. This was originally created to
21
- create mosh effects in sync with a beat for a music video.
22
-
23
- You can specify what interval to get frames at with -n (--interval).
24
- You can specify how many frames to get from the current interval with
25
- -c (--count). You can specify how many times to duplicate a given
26
- frame with -d (--dupes). You can then specify whether or not to keep
27
- the original video's frames between the end of the duplication and
28
- where the next interval occurs with -k (--keep). Keeping original
29
- frames causes the original motion to continue after the P-frame dupe
30
- effect, whereas dropping original frames causes the video to snap
31
- into the motion of the frames at each interval. This is a more complex
32
- effect so I recommend experimenting with it!"
33
- exit
34
- end
35
-
36
- default = {
37
- :dupes => 30,
38
- :interval => 30,
39
- :count => 1,
40
- :keep => true
41
- }
42
-
43
- parser = Slop::Parser.new(opts)
44
- slop_options = parser.parse(ARGV)
45
- @options = default.merge(slop_options) { |key, oldval, newval|
46
- if newval.nil?
47
- oldval
48
- else
49
- newval
50
- end
51
- }
52
-
53
- if @options[:keep] == "false"
54
- @options[:keep] = false
55
- else
56
- @options[:keep] = true
57
- end
58
-
59
- # Check mandatory params
60
- mandatory = [:input, :output]
61
- missing = mandatory.select{ |param| @options[param].nil? }
62
- unless missing.empty?
63
- puts "Missing options: #{missing.join(', ')}"
64
- puts slop_options
65
- exit
66
- end
67
-
68
- puts "Opening file " + @options[:input] + "..."
69
- a = AviGlitch.open @options[:input] # Rewrite this line for your file.
70
- puts "Opened!"
71
-
72
- ppulse(a, @options[:output], @options[:interval], @options[:count], @options[:dupes], @options[:keep])
73
- end
74
-
75
- # Loops through a video file and grabs every `interval` frames then duplicates them
76
- # `duplicate_amount` times
77
- #
78
- # `leave_originals` will copy standard frames and only p-frame the last one every `interval`
79
- def ppulse(clip, output, interval = 30, count = 1, duplicate_amount = 30, leave_originals = true)
80
-
81
- puts "Size: " + clip.frames.size_of('videoframe').to_s
82
-
83
- frames = nil
84
-
85
- video_frame_counter = 0
86
-
87
- have_iframe = false
88
-
89
- if leave_originals
90
- first_index = 0
91
- second_index = 0
92
- clip.frames.each_with_index do |f, i|
93
- if f.is_videoframe?
94
- video_frame_counter += 1
95
- if video_frame_counter % interval == 0
96
- second_index = i
97
- puts "first index: " + first_index.to_s
98
- puts "second index: " + second_index.to_s
99
-
100
- clipped = clip.frames[first_index..(i + 5)]
101
- dupe_clip = clip.frames[i, count] * duplicate_amount
102
- if frames.nil?
103
- frames = clipped + dupe_clip
104
- else
105
- frames = frames + clipped + dupe_clip
106
- end
107
- puts "Current expected output frame count: " + frames.size.to_s
108
-
109
- first_index = i + 5
110
- end
111
- end
112
- end
113
- else
114
- # Harvest clip details
115
- clip.frames.each_with_index do |f, i|
116
- if f.is_videoframe?
117
- if !have_iframe && f.is_keyframe?
118
- puts "Added first iframe (necessary to avoid total corruption)"
119
- # no idea why i need to get 5
120
- frames = clip.frames[i, 1]
121
- have_iframe = true
122
- end
123
-
124
- # +1 to offset the first iframe
125
- if video_frame_counter % interval == 0 && f.is_deltaframe?
126
- puts "Processing frame " + video_frame_counter.to_s + " at index " + i.to_s
127
- # You might ask why we need to check if frames are nil when we already check
128
- # whether or not we have an i frame and if the above is a keyframe - that's
129
- # because datamoshers are crazy and might pass use clip with no leading iframe :)
130
- if frames.nil?
131
- puts "First frame, setting"
132
- clipped = clip.frames[i, count]
133
- frames = frames.concat( clipped * duplicate_amount )
134
- puts "Frame size"
135
- puts frames.size_of('videoframe')
136
- else
137
- puts "Current i: " + i.to_s
138
- puts "Duping frame " + i.to_s + " " + duplicate_amount.to_s + " times"
139
- frames = frames.concat( clip.frames[i, count] * duplicate_amount )
140
- puts "Next frame, size: " + frames.size.to_s
141
- end
142
- end
143
- video_frame_counter += 1
144
- end
145
- end
146
- end
147
-
148
- o = AviGlitch.open frames
149
- o.output output
150
- puts "Done! File processed to: " + output
151
- end
152
- end
153
- end
1
+ module Moshy
2
+ class PPulse
3
+ def cli(args)
4
+ opts = Slop::Options.new
5
+ opts.banner = "Usage: moshy -m ppulse -i file.avi -o file_out.avi [options]\nmoshy -m inspect --help for details"
6
+ opts.separator 'Required Parameters:'
7
+ opts.string '-i', '--input', 'Input file path - must be an .avi. Clip to split in split mode, first clip in stitch mode'
8
+ opts.string '-o', '--output', 'Output file path - will be appended with -#.avi for each frame in split mode'
9
+ opts.separator 'Optional Parameters:'
10
+ opts.string '-k', '--keep', 'Whether or not to keep standard frames. (default: true)', default: "true"
11
+ opts.integer '-c', '--count', 'How many frames to grab forward from each interval. (default: 1)', default: 1
12
+ opts.integer '-d', '--dupes', 'Number of times to multiply the frame (default: 30)', default: 30
13
+ opts.integer '-n', '--interval', 'Which nth frames should be duplicated (default: 30)', default: 30
14
+ opts.on '-h', '--help' do
15
+ puts opts
16
+ puts "\n"
17
+ puts \
18
+ "Takes c number of frames and every n frames and duplicates them a
19
+ given amount, resulting in a consistent P-duplication datamosh that's
20
+ good for creating rhythmic effects. This was originally created to
21
+ create mosh effects in sync with a beat for a music video.
22
+
23
+ You can specify what interval to get frames at with -n (--interval).
24
+ You can specify how many frames to get from the current interval with
25
+ -c (--count). You can specify how many times to duplicate a given
26
+ frame with -d (--dupes). You can then specify whether or not to keep
27
+ the original video's frames between the end of the duplication and
28
+ where the next interval occurs with -k (--keep). Keeping original
29
+ frames causes the original motion to continue after the P-frame dupe
30
+ effect, whereas dropping original frames causes the video to snap
31
+ into the motion of the frames at each interval. This is a more complex
32
+ effect so I recommend experimenting with it!"
33
+ exit
34
+ end
35
+
36
+ default = {
37
+ :dupes => 30,
38
+ :interval => 30,
39
+ :count => 1,
40
+ :keep => true
41
+ }
42
+
43
+ parser = Slop::Parser.new(opts)
44
+ slop_options = parser.parse(ARGV)
45
+ @options = default.merge(slop_options) { |key, oldval, newval|
46
+ if newval.nil?
47
+ oldval
48
+ else
49
+ newval
50
+ end
51
+ }
52
+
53
+ if @options[:keep] == "false"
54
+ @options[:keep] = false
55
+ else
56
+ @options[:keep] = true
57
+ end
58
+
59
+ # Check mandatory params
60
+ mandatory = [:input, :output]
61
+ missing = mandatory.select{ |param| @options[param].nil? }
62
+ unless missing.empty?
63
+ puts "Missing options: #{missing.join(', ')}"
64
+ puts slop_options
65
+ exit
66
+ end
67
+
68
+ puts "Opening file " + @options[:input] + "..."
69
+ a = AviGlitch.open @options[:input] # Rewrite this line for your file.
70
+ puts "Opened!"
71
+
72
+ ppulse(a, @options[:output], @options[:interval], @options[:count], @options[:dupes], @options[:keep])
73
+ end
74
+
75
+ # Loops through a video file and grabs every `interval` frames then duplicates them
76
+ # `duplicate_amount` times
77
+ #
78
+ # `leave_originals` will copy standard frames and only p-frame the last one every `interval`
79
+ def ppulse(clip, output, interval = 30, count = 1, duplicate_amount = 30, leave_originals = true)
80
+
81
+ puts "Size: " + clip.frames.size_of('videoframe').to_s
82
+
83
+ frames = nil
84
+
85
+ video_frame_counter = 0
86
+
87
+ have_iframe = false
88
+
89
+ if leave_originals
90
+ first_index = 0
91
+ second_index = 0
92
+ clip.frames.each_with_index do |f, i|
93
+ if f.is_videoframe?
94
+ video_frame_counter += 1
95
+ if video_frame_counter % interval == 0
96
+ second_index = i
97
+ puts "first index: " + first_index.to_s
98
+ puts "second index: " + second_index.to_s
99
+
100
+ clipped = clip.frames[first_index..(i + 5)]
101
+ dupe_clip = clip.frames[i, count] * duplicate_amount
102
+ if frames.nil?
103
+ frames = clipped + dupe_clip
104
+ else
105
+ frames = frames + clipped + dupe_clip
106
+ end
107
+ puts "Current expected output frame count: " + frames.size.to_s
108
+
109
+ first_index = i + 5
110
+ end
111
+ end
112
+ end
113
+ else
114
+ # Harvest clip details
115
+ clip.frames.each_with_index do |f, i|
116
+ if f.is_videoframe?
117
+ if !have_iframe && f.is_keyframe?
118
+ puts "Added first iframe (necessary to avoid total corruption)"
119
+ # no idea why i need to get 5
120
+ frames = clip.frames[i, 1]
121
+ have_iframe = true
122
+ end
123
+
124
+ # +1 to offset the first iframe
125
+ if video_frame_counter % interval == 0 && f.is_deltaframe?
126
+ puts "Processing frame " + video_frame_counter.to_s + " at index " + i.to_s
127
+ # You might ask why we need to check if frames are nil when we already check
128
+ # whether or not we have an i frame and if the above is a keyframe - that's
129
+ # because datamoshers are crazy and might pass use clip with no leading iframe :)
130
+ if frames.nil?
131
+ puts "First frame, setting"
132
+ clipped = clip.frames[i, count]
133
+ frames = frames.concat( clipped * duplicate_amount )
134
+ puts "Frame size"
135
+ puts frames.size_of('videoframe')
136
+ else
137
+ puts "Current i: " + i.to_s
138
+ puts "Duping frame " + i.to_s + " " + duplicate_amount.to_s + " times"
139
+ frames = frames.concat( clip.frames[i, count] * duplicate_amount )
140
+ puts "Next frame, size: " + frames.size.to_s
141
+ end
142
+ end
143
+ video_frame_counter += 1
144
+ end
145
+ end
146
+ end
147
+
148
+ o = AviGlitch.open frames
149
+ o.output output
150
+ puts "Done! File processed to: " + output
151
+ end
152
+ end
153
+ end
data/lib/moshy/prep.rb CHANGED
@@ -1,78 +1,78 @@
1
- module Moshy
2
- class Prep
3
- def cli(args)
4
- opts = Slop::Options.new
5
- opts.banner = "Usage: moshy.rb -m prep -i <file> -o <output> [options]\n"
6
- opts.separator 'Required Parameters:'
7
- opts.string '-i', '--input', 'Input file path - can be anything that ffmpeg supports.'
8
- opts.string '-o', '--output', 'File output path - should end in .avi.'
9
- opts.separator 'Optional Parameters:'
10
- opts.integer '-b', '--bitrate', 'Bitrate amount (kb/s). Defaults to 4196. Larger number means higher quality, but larger size.'
11
- opts.on '-h', '--help' do
12
- puts opts
13
- puts "\n"
14
- puts \
15
- "Preps a video file for datamoshing with moshy by converting it into an
16
- AVI with no B-Frames (they're not good for moshing), and placing as
17
- few I-Frames as possible. Requires ffmpeg be installed locally. Check
18
- the repository's README.md for more information on how to install ffmpeg.
19
-
20
- This command is meant to be a simple one-liner that makes your datamoshing
21
- workflow faster. Under the covers, it runs the following ffmpeg command:
22
-
23
- ffmpeg -i <moshy input> -bf 0 -g 600 -b:v <moshy bitrate> -o <moshy output>
24
-
25
- This takes in an input file (it should theoretically work with any video
26
- file type that ffmpeg supports), makes sure that no B-Frames are rendered,
27
- and sets the ideal I-frame interval to 600 (ffmpeg's max). This seems to
28
- mean that an I-frame will only show up every 30 to 25 seconds
29
- (600f / 30fps = 20s or 600f / 24fps = 25s), but I-Frames must be deposited
30
- wherever there is a hard cut or transition in a video where a P-frame would
31
- not be able to properly predict the motion of pixels."
32
- exit
33
- end
34
-
35
- default = {
36
- :bitrate => 4196
37
- }
38
-
39
- parser = Slop::Parser.new(opts)
40
- slop_options = parser.parse(ARGV)
41
- @options = default.merge(slop_options) { |key, oldval, newval|
42
- if newval.nil?
43
- oldval
44
- else
45
- newval
46
- end
47
- }
48
-
49
- # Check mandatory params
50
- mandatory = [:input, :output]
51
- missing = mandatory.select{ |param| @options[param].nil? }
52
- unless missing.empty?
53
- puts "Missing options: #{missing.join(', ')}"
54
- puts slop_options
55
- exit
56
- end
57
-
58
- prep @options[:input], @options[:output], @options[:bitrate]
59
- end
60
-
61
- def prep(input, output, bitrate)
62
- ffmpeg = Av::Commands::Ffmpeg.new
63
- ffmpeg.add_source input
64
- ffmpeg.add_destination output
65
-
66
- # Ensures all frames come out as P-frames, B-frames don't
67
- # dupe or mosh properly
68
- ffmpeg.add_output_param ['bf', 0]
69
- # Keyframe interval, sets as few I-frames as possible.
70
- # ffmpeg will complain about anything over 600 and cap it.
71
- ffmpeg.add_output_param ['g', 600]
72
- # Bitrate
73
- ffmpeg.add_output_param ['b:v', bitrate.to_s + 'k']
74
-
75
- ffmpeg.run
76
- end
77
- end
78
- end
1
+ module Moshy
2
+ class Prep
3
+ def cli(args)
4
+ opts = Slop::Options.new
5
+ opts.banner = "Usage: moshy.rb -m prep -i <file> -o <output> [options]\n"
6
+ opts.separator 'Required Parameters:'
7
+ opts.string '-i', '--input', 'Input file path - can be anything that ffmpeg supports.'
8
+ opts.string '-o', '--output', 'File output path - should end in .avi.'
9
+ opts.separator 'Optional Parameters:'
10
+ opts.integer '-b', '--bitrate', 'Bitrate amount (kb/s). Defaults to 4196. Larger number means higher quality, but larger size.'
11
+ opts.on '-h', '--help' do
12
+ puts opts
13
+ puts "\n"
14
+ puts \
15
+ "Preps a video file for datamoshing with moshy by converting it into an
16
+ AVI with no B-Frames (they're not good for moshing), and placing as
17
+ few I-Frames as possible. Requires ffmpeg be installed locally. Check
18
+ the repository's README.md for more information on how to install ffmpeg.
19
+
20
+ This command is meant to be a simple one-liner that makes your datamoshing
21
+ workflow faster. Under the covers, it runs the following ffmpeg command:
22
+
23
+ ffmpeg -i <moshy input> -bf 0 -g 600 -b:v <moshy bitrate> -o <moshy output>
24
+
25
+ This takes in an input file (it should theoretically work with any video
26
+ file type that ffmpeg supports), makes sure that no B-Frames are rendered,
27
+ and sets the ideal I-frame interval to 600 (ffmpeg's max). This seems to
28
+ mean that an I-frame will only show up every 30 to 25 seconds
29
+ (600f / 30fps = 20s or 600f / 24fps = 25s), but I-Frames must be deposited
30
+ wherever there is a hard cut or transition in a video where a P-frame would
31
+ not be able to properly predict the motion of pixels."
32
+ exit
33
+ end
34
+
35
+ default = {
36
+ :bitrate => 4196
37
+ }
38
+
39
+ parser = Slop::Parser.new(opts)
40
+ slop_options = parser.parse(ARGV)
41
+ @options = default.merge(slop_options) { |key, oldval, newval|
42
+ if newval.nil?
43
+ oldval
44
+ else
45
+ newval
46
+ end
47
+ }
48
+
49
+ # Check mandatory params
50
+ mandatory = [:input, :output]
51
+ missing = mandatory.select{ |param| @options[param].nil? }
52
+ unless missing.empty?
53
+ puts "Missing options: #{missing.join(', ')}"
54
+ puts slop_options
55
+ exit
56
+ end
57
+
58
+ prep @options[:input], @options[:output], @options[:bitrate]
59
+ end
60
+
61
+ def prep(input, output, bitrate)
62
+ ffmpeg = Av::Commands::Ffmpeg.new
63
+ ffmpeg.add_source input
64
+ ffmpeg.add_destination output
65
+
66
+ # Ensures all frames come out as P-frames, B-frames don't
67
+ # dupe or mosh properly
68
+ ffmpeg.add_output_param ['bf', 0]
69
+ # Keyframe interval, sets as few I-frames as possible.
70
+ # ffmpeg will complain about anything over 600 and cap it.
71
+ ffmpeg.add_output_param ['g', 600]
72
+ # Bitrate
73
+ ffmpeg.add_output_param ['b:v', bitrate.to_s + 'k']
74
+
75
+ ffmpeg.run
76
+ end
77
+ end
78
+ end
data/lib/moshy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Moshy
2
- VERSION = "1.0.0"
3
- end
1
+ module Moshy
2
+ VERSION = "2.0.0"
3
+ end
data/lib/moshy.rb CHANGED
@@ -1,13 +1,13 @@
1
- require "aviglitch"
2
- require "av"
3
- require_relative "moshy/version"
4
- require_relative "moshy/inspect"
5
- require_relative "moshy/isplit"
6
- require_relative "moshy/pdupe"
7
- require_relative "moshy/bake"
8
- require_relative "moshy/prep"
9
- require_relative "moshy/ppulse"
10
-
11
- module Moshy
12
- # Empty skeleton - just used to include the others
13
- end
1
+ require "aviglitch"
2
+ require "av"
3
+ require_relative "moshy/version"
4
+ require_relative "moshy/inspect"
5
+ require_relative "moshy/isplit"
6
+ require_relative "moshy/pdupe"
7
+ require_relative "moshy/bake"
8
+ require_relative "moshy/prep"
9
+ require_relative "moshy/ppulse"
10
+
11
+ module Moshy
12
+ # Empty skeleton - just used to include the others
13
+ end
data/moshy.gemspec CHANGED
@@ -1,27 +1,27 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'moshy/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "moshy"
8
- spec.version = Moshy::VERSION
9
- spec.summary = "datamoshing utility kit for common tasks with AVI files"
10
- spec.description = spec.summary
11
- spec.authors = ["wayspurrchen"]
12
- spec.email = 'wayspurrchen@gmail.com'
13
- spec.homepage = 'https://github.com/wayspurrchen/moshy'
14
- spec.license = 'MIT'
15
-
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_runtime_dependency "slop"
22
- spec.add_runtime_dependency "aviglitch"
23
- spec.add_runtime_dependency "av"
24
-
25
- spec.add_development_dependency "bundler", "~> 1.6"
26
- spec.add_development_dependency "rake"
27
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'moshy/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "moshy"
8
+ spec.version = Moshy::VERSION
9
+ spec.summary = "datamoshing utility kit for common tasks with AVI files"
10
+ spec.description = spec.summary
11
+ spec.authors = ["wayspurrchen"]
12
+ spec.email = 'wayspurrchen@gmail.com'
13
+ spec.homepage = 'https://github.com/wayspurrchen/moshy'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "slop", "~> 4.2.1"
22
+ spec.add_runtime_dependency "aviglitch"
23
+ spec.add_runtime_dependency "av"
24
+
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "rake"
27
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moshy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - wayspurrchen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-12 00:00:00.000000000 Z
11
+ date: 2022-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 4.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 4.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: aviglitch
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.6'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.6'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
+ - DEVNOTES.md
91
92
  - Gemfile
92
93
  - LICENSE.txt
93
94
  - README.md
@@ -106,7 +107,7 @@ homepage: https://github.com/wayspurrchen/moshy
106
107
  licenses:
107
108
  - MIT
108
109
  metadata: {}
109
- post_install_message:
110
+ post_install_message:
110
111
  rdoc_options: []
111
112
  require_paths:
112
113
  - lib
@@ -121,9 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  - !ruby/object:Gem::Version
122
123
  version: '0'
123
124
  requirements: []
124
- rubyforge_project:
125
- rubygems_version: 2.2.2
126
- signing_key:
125
+ rubygems_version: 3.3.7
126
+ signing_key:
127
127
  specification_version: 4
128
128
  summary: datamoshing utility kit for common tasks with AVI files
129
129
  test_files: []