moshy 0.1.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/moshy.rb +110 -0
  3. metadata +56 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 10b05cab4000093c123ded361c51188a2a35294a
4
+ data.tar.gz: 05b77cee5a180f285e48c97627626ba6190e1229
5
+ SHA512:
6
+ metadata.gz: ae34d58ed8350a14a71422a49283d99917a8f08e7b1698c867f73f859f94644720169d1f115bc2b8cd4e459587381fed7cc59b7fa7c80ec30a43397b578909d1
7
+ data.tar.gz: ff48178601ce668c27770ba535c431528c036a0ed9e20c9dcd865acdb49ada0915847c96ed8791819dda485c3dfaf16ea7d45e400cd61ce006a0cecca06f8c98
@@ -0,0 +1,110 @@
1
+ require_relative 'lib/inspect'
2
+ require_relative 'lib/isplit'
3
+ require_relative 'lib/pdupe'
4
+ require_relative 'lib/bake'
5
+ require_relative 'lib/prep'
6
+ require_relative 'lib/ppulse'
7
+ require 'aviglitch'
8
+ require 'optparse'
9
+ require 'slop'
10
+ require 'av'
11
+
12
+ module Moshy
13
+ def self.top_level_help
14
+ $options = {
15
+
16
+ }
17
+ opts = OptionParser.new do |opts|
18
+ opts.banner = "
19
+ moshy, a Ruby utility for making it easier to datamosh AVI files. It has
20
+ multiple modes that can be run with the -m or --mode option.
21
+
22
+ MODES DETAILS
23
+ -------------
24
+
25
+ \"prep\"
26
+ ------
27
+ Preps a video file for datamoshing with moshy by converting it
28
+ into an AVI with no B-Frames (they're not good for moshing), and placing as
29
+ few I-Frames as possible. Requires ffmpeg be installed locally.
30
+
31
+ \"isplit\"
32
+ --------
33
+ Extracts individual clips from an AVI where each clip is
34
+ separated by I-frames in the original AVI. Great for getting specific
35
+ clips out of a larger video and later doing I-frame moshing.
36
+
37
+ \"pdupe\"
38
+ -------
39
+ Duplicates a P-frame at a given frame a certain amount. To find
40
+ out which frames are P-frames, use software like avidemux to look at the
41
+ frame type. WARNING: This mode is a little glitchy. You may need to set
42
+ the interval 1 or 2 above or below the frame number you actually want to
43
+ duplicate. I'm not sure why this happens, but try it with a small
44
+ duplication amount first. NOTE: This can mode take a while to process
45
+ over 60-90 frame dupes.
46
+
47
+ \"ppulse\"
48
+ --------
49
+ Takes c number of frames and every n frames and duplicates them a
50
+ given amount, resulting in a consistent P-duplication datamosh that's
51
+ good for creating rhythmic effects. This was originally created to
52
+ create mosh effects in sync with a beat for a music video.
53
+
54
+ \"bake\"
55
+ ------
56
+ \"Bakes\" your datamosh by creating a new video file from your
57
+ datamoshed .avi, causing the datamosh effects to be treated as the actual
58
+ content of the new video instead of an error. Requires ffmpeg to be
59
+ installed locally.
60
+
61
+ \"inspect\"
62
+ ---------
63
+ Reads an .avi file and prints which video frames are keyframes
64
+ (I-Frames) and which frames are delta frames (P-frames or B-frames). moshy
65
+ cannot tell the difference between a P-frame or a B-frame, so you will want
66
+ to use avidemux or another program if you need to know.
67
+
68
+ Run moshy with mode -m <mode> --help to see options for individual modes.
69
+ "
70
+ end
71
+
72
+ begin
73
+ opts.parse
74
+ rescue OptionParser::InvalidOption, OptionParser::InvalidArgument
75
+ end
76
+
77
+ puts opts
78
+ end
79
+ end
80
+
81
+ # Because we have multiple modes, we do some initial basic arg checking
82
+ # to see if they specified a mode. If not, we show the top-level help menu.
83
+ result = Slop.parse suppress_errors: true do |o|
84
+ o.string '-m', '--mode'
85
+ end
86
+
87
+ mode_classes = {
88
+ "inspect" => Moshy::Inspect,
89
+ "isplit" => Moshy::ISplit,
90
+ "pdupe" => Moshy::PDupe,
91
+ "ppulse" => Moshy::PPulse,
92
+ "prep" => Moshy::Prep,
93
+ "bake" => Moshy::Bake
94
+ }
95
+
96
+ if mode_classes.has_key? result[:m]
97
+ # We need to strip out the "m" otherwise our other arg parsers
98
+ # will choke on the extra parameter
99
+ ARGV.each_with_index do |o, i|
100
+ if o == "-m" || o == "--m"
101
+ ARGV.delete_at(i + 1)
102
+ ARGV.delete_at(i)
103
+ break
104
+ end
105
+ end
106
+
107
+ mode_classes[result[:m]].new ARGV
108
+ else
109
+ Moshy.top_level_help
110
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: moshy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Way Spurr-Chen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2010-09-12 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |-
14
+ moshy is a datamoshing utility kit for AVI files, based heavily on [aviglitch](https://github.com/ucnv/aviglitch).
15
+ It's designed to make common datamoshing tasks easier from a command line interface
16
+ without having to open avidemux or other GUI tools. It lets you do stuff like:
17
+
18
+ - Convert video files into AVI video files with minimal I-Frames and no B-frames for ultimate moshability
19
+ - Create P-Frame duplication effects quickly
20
+ - Split a long video file into multiple clips based on its I-Frames
21
+ - "Bake" your datamoshed video, encoding the corruption as actual video content for uploading to video services or moshing even further!
22
+ - Identifying keyframe and deltaframe indexes in any AVI file
23
+ - ...and more!
24
+
25
+ See https://github.com/wayspurrchen/moshy for detailed documentation.
26
+ email: wayspurrchen@gmail.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - moshy.rb
32
+ homepage: https://github.com/wayspurrchen/moshy
33
+ licenses:
34
+ - MIT
35
+ metadata: {}
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project:
52
+ rubygems_version: 2.2.2
53
+ signing_key:
54
+ specification_version: 4
55
+ summary: datamoshing utility kit for common tasks with AVI files
56
+ test_files: []