mkv2m4v 0.2.0 → 0.3.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/LICENSE.txt +2 -2
- data/lib/mkv2m4v/transcoder.rb +36 -7
- data/lib/mkv2m4v/version.rb +2 -2
- data/lib/mkv2m4v.rb +1 -1
- data/mkv2m4v.gemspec +1 -1
- metadata +37 -43
    
        data/LICENSE.txt
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            Copyright (c) 2012 Ryan McGeary
         | 
| 1 | 
            +
            Copyright (c) 2012-2013 Ryan McGeary
         | 
| 2 2 |  | 
| 3 3 | 
             
            MIT License
         | 
| 4 4 |  | 
| @@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| 19 19 | 
             
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 20 20 | 
             
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 21 21 | 
             
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 22 | 
            -
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
| 22 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/lib/mkv2m4v/transcoder.rb
    CHANGED
    
    | @@ -1,5 +1,7 @@ | |
| 1 1 | 
             
            require "fileutils"
         | 
| 2 2 | 
             
            require "colorize"
         | 
| 3 | 
            +
            require "shellwords"
         | 
| 4 | 
            +
            require "iso639/language"
         | 
| 3 5 |  | 
| 4 6 | 
             
            module Mkv2m4v
         | 
| 5 7 | 
             
              class Transcoder
         | 
| @@ -26,7 +28,11 @@ module Mkv2m4v | |
| 26 28 |  | 
| 27 29 | 
             
                def extract
         | 
| 28 30 | 
             
                  puts "==> Extracting #{video_id}:video.#{video_ext} #{audio_id}:audio.#{audio_ext} ".magenta
         | 
| 29 | 
            -
                   | 
| 31 | 
            +
                  command = "mkvextract tracks"
         | 
| 32 | 
            +
                  command << " #{escape(@file.filename)}"
         | 
| 33 | 
            +
                  command << " #{video_id}:#{escape(video_file)}"
         | 
| 34 | 
            +
                  command << " #{audio_id}:#{escape(audio_file)}"
         | 
| 35 | 
            +
                  system command
         | 
| 30 36 | 
             
                end
         | 
| 31 37 |  | 
| 32 38 | 
             
                def transcode_avc
         | 
| @@ -42,7 +48,11 @@ module Mkv2m4v | |
| 42 48 | 
             
                    puts "==> Assuming pass through for AAC audio track".yellow.on_black
         | 
| 43 49 | 
             
                  else
         | 
| 44 50 | 
             
                    puts "==> Transcoding #{audio_format} to Stereo AAC audio track".magenta
         | 
| 45 | 
            -
                     | 
| 51 | 
            +
                    command = "ffmpeg"
         | 
| 52 | 
            +
                    command << " -i #{escape(audio_file)}"
         | 
| 53 | 
            +
                    command << " -acodec libfaac -ac 2 -ab 160k"
         | 
| 54 | 
            +
                    command << " #{escape(audio_basename)}.aac"
         | 
| 55 | 
            +
                    system command
         | 
| 46 56 | 
             
                  end
         | 
| 47 57 | 
             
                end
         | 
| 48 58 |  | 
| @@ -54,19 +64,24 @@ module Mkv2m4v | |
| 54 64 | 
             
                    @skip_ac3 = true
         | 
| 55 65 | 
             
                  else
         | 
| 56 66 | 
             
                    puts "==> Transcoding #{audio_format} to Surround AC-3 audio track".magenta
         | 
| 57 | 
            -
                     | 
| 67 | 
            +
                    command = "ffmpeg"
         | 
| 68 | 
            +
                    command << " -i #{escape(audio_file)}"
         | 
| 69 | 
            +
                    command << " -acodec ac3 -ac #{max_audio_channels} -ab #{max_audio_bit_rate}k"
         | 
| 70 | 
            +
                    command << " #{escape(audio_basename)}.ac3"
         | 
| 71 | 
            +
                    system command
         | 
| 58 72 | 
             
                  end
         | 
| 59 73 | 
             
                end
         | 
| 60 74 |  | 
| 61 75 | 
             
                def remux
         | 
| 62 76 | 
             
                  puts "==> Remuxing everything into an M4V container".magenta
         | 
| 63 77 | 
             
                  command = "MP4Box"
         | 
| 64 | 
            -
                  command << " -add #{video_basename | 
| 65 | 
            -
                  command << " -add #{audio_basename | 
| 78 | 
            +
                  command << " -add #{escape(video_basename)}.h264:lang=#{video_language.alpha3_terminology}:name=\"AVC Video\""
         | 
| 79 | 
            +
                  command << " -add #{escape(audio_basename)}.aac:lang=#{audio_language.alpha3_terminology}:group=1:delay=84:name=\"Stereo\""
         | 
| 66 80 | 
             
                  unless @skip_ac3
         | 
| 67 | 
            -
                    command << " -add #{audio_basename | 
| 81 | 
            +
                    command << " -add #{escape(audio_basename)}.ac3:lang=#{audio_language.alpha3_terminology}:group=1:delay=84:disable:name=\"AC3\" "
         | 
| 68 82 | 
             
                  end
         | 
| 69 | 
            -
                  command << " -new #{m4v_file | 
| 83 | 
            +
                  command << " -new #{escape(m4v_file)}"
         | 
| 84 | 
            +
                  puts command
         | 
| 70 85 | 
             
                  system command
         | 
| 71 86 | 
             
                end
         | 
| 72 87 |  | 
| @@ -98,6 +113,10 @@ module Mkv2m4v | |
| 98 113 | 
             
                  end
         | 
| 99 114 | 
             
                end
         | 
| 100 115 |  | 
| 116 | 
            +
                def video_language
         | 
| 117 | 
            +
                  @file.ideal_video_track.language || @options[:languages].first || UnknownLanguage
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
             | 
| 101 120 | 
             
                def audio_basename
         | 
| 102 121 | 
             
                  ::File.join(tmp_dir, "audio")
         | 
| 103 122 | 
             
                end
         | 
| @@ -118,6 +137,10 @@ module Mkv2m4v | |
| 118 137 | 
             
                  audio_format.gsub(/\W/, "").downcase
         | 
| 119 138 | 
             
                end
         | 
| 120 139 |  | 
| 140 | 
            +
                def audio_language
         | 
| 141 | 
            +
                  @file.ideal_audio_track.language || @options[:languages].first || UnknownLanguage
         | 
| 142 | 
            +
                end
         | 
| 143 | 
            +
             | 
| 121 144 | 
             
                def max_audio_channels
         | 
| 122 145 | 
             
                  [@file.ideal_audio_track.channel_count, 6].min
         | 
| 123 146 | 
             
                end
         | 
| @@ -137,5 +160,11 @@ module Mkv2m4v | |
| 137 160 | 
             
                def m4v_file
         | 
| 138 161 | 
             
                  ::File.join(dir, ::File.basename(@file.name, ".*") + ".m4v")
         | 
| 139 162 | 
             
                end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                def escape(str)
         | 
| 165 | 
            +
                  Shellwords.escape(str)
         | 
| 166 | 
            +
                end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                UnknownLanguage = Iso639::Language.new("", "", "", "", "")
         | 
| 140 169 | 
             
              end
         | 
| 141 170 | 
             
            end
         | 
    
        data/lib/mkv2m4v/version.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module Mkv2m4v
         | 
| 2 | 
            -
              VERSION = "0. | 
| 2 | 
            +
              VERSION = "0.3.0"
         | 
| 3 3 |  | 
| 4 | 
            -
              VersionDescription = "mkv2m4v #{VERSION} (c) 2012 Ryan McGeary"
         | 
| 4 | 
            +
              VersionDescription = "mkv2m4v #{VERSION} (c) 2012-2013 Ryan McGeary"
         | 
| 5 5 | 
             
              Description = <<EOS
         | 
| 6 6 | 
             
            mkv2m4v is a command line utility that converts audio and video tracks from a
         | 
| 7 7 | 
             
            MKV (Matroska Media) container into a format compatible with Apple TVs.
         | 
    
        data/lib/mkv2m4v.rb
    CHANGED
    
    | @@ -30,7 +30,7 @@ module Mkv2m4v | |
| 30 30 | 
             
                    banner [Mkv2m4v::Description, Mkv2m4v::Usage].join("\n")
         | 
| 31 31 | 
             
                    opt :info, "Print media info only"
         | 
| 32 32 | 
             
                    opt :lang, "Preferred languages, comma separated", :type => :string, :default => "English"
         | 
| 33 | 
            -
                    opt :dir, "Destination directory", :type => :string
         | 
| 33 | 
            +
                    opt :dir, "Destination directory (default: same dir as source mkv)", :type => :string
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 | 
             
                  parse_languages
         | 
| 36 36 | 
             
                  @filenames = ARGV
         | 
    
        data/mkv2m4v.gemspec
    CHANGED
    
    | @@ -19,7 +19,7 @@ Gem::Specification.new do |gem| | |
| 19 19 |  | 
| 20 20 | 
             
              gem.add_dependency "trollop",   "~> 2.0"
         | 
| 21 21 | 
             
              gem.add_dependency "mediainfo", "~> 0.7"
         | 
| 22 | 
            -
              gem.add_dependency "iso639",    "~> 1. | 
| 22 | 
            +
              gem.add_dependency "iso639",    "~> 1.1"
         | 
| 23 23 | 
             
              gem.add_dependency "colorize",  "~> 0.5"
         | 
| 24 24 |  | 
| 25 25 | 
             
              gem.add_development_dependency "minitest",       "~> 4.3"
         | 
    
        metadata
    CHANGED
    
    | @@ -2,117 +2,111 @@ | |
| 2 2 | 
             
            name: mkv2m4v
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0. | 
| 5 | 
            +
              version: 0.3.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Ryan McGeary
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2013-01-27 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 16 | 
            -
                requirements:
         | 
| 17 | 
            -
                - - ~>
         | 
| 18 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '2.0'
         | 
| 20 | 
            -
                none: false
         | 
| 21 15 | 
             
              name: trollop
         | 
| 22 16 | 
             
              type: :runtime
         | 
| 23 | 
            -
              prerelease: false
         | 
| 24 17 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 | 
            +
                none: false
         | 
| 25 19 | 
             
                requirements:
         | 
| 26 20 | 
             
                - - ~>
         | 
| 27 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 28 22 | 
             
                    version: '2.0'
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 23 | 
            +
              prerelease: false
         | 
| 31 24 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            +
                none: false
         | 
| 32 26 | 
             
                requirements:
         | 
| 33 27 | 
             
                - - ~>
         | 
| 34 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 35 | 
            -
                    version: '0 | 
| 36 | 
            -
             | 
| 29 | 
            +
                    version: '2.0'
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 37 31 | 
             
              name: mediainfo
         | 
| 38 32 | 
             
              type: :runtime
         | 
| 39 | 
            -
              prerelease: false
         | 
| 40 33 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 34 | 
            +
                none: false
         | 
| 41 35 | 
             
                requirements:
         | 
| 42 36 | 
             
                - - ~>
         | 
| 43 37 | 
             
                  - !ruby/object:Gem::Version
         | 
| 44 38 | 
             
                    version: '0.7'
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 39 | 
            +
              prerelease: false
         | 
| 47 40 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 48 42 | 
             
                requirements:
         | 
| 49 43 | 
             
                - - ~>
         | 
| 50 44 | 
             
                  - !ruby/object:Gem::Version
         | 
| 51 | 
            -
                    version: ' | 
| 52 | 
            -
             | 
| 53 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 1.0.5
         | 
| 55 | 
            -
                none: false
         | 
| 45 | 
            +
                    version: '0.7'
         | 
| 46 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 47 | 
             
              name: iso639
         | 
| 57 48 | 
             
              type: :runtime
         | 
| 58 | 
            -
              prerelease: false
         | 
| 59 49 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 50 | 
            +
                none: false
         | 
| 60 51 | 
             
                requirements:
         | 
| 61 52 | 
             
                - - ~>
         | 
| 62 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 63 | 
            -
                    version: '1. | 
| 64 | 
            -
             | 
| 65 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            -
                    version: 1.0.5
         | 
| 67 | 
            -
                none: false
         | 
| 68 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 54 | 
            +
                    version: '1.1'
         | 
| 55 | 
            +
              prerelease: false
         | 
| 69 56 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                none: false
         | 
| 70 58 | 
             
                requirements:
         | 
| 71 59 | 
             
                - - ~>
         | 
| 72 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 73 | 
            -
                    version: ' | 
| 74 | 
            -
             | 
| 61 | 
            +
                    version: '1.1'
         | 
| 62 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 75 63 | 
             
              name: colorize
         | 
| 76 64 | 
             
              type: :runtime
         | 
| 77 | 
            -
              prerelease: false
         | 
| 78 65 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 66 | 
            +
                none: false
         | 
| 79 67 | 
             
                requirements:
         | 
| 80 68 | 
             
                - - ~>
         | 
| 81 69 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 70 | 
             
                    version: '0.5'
         | 
| 83 | 
            -
             | 
| 84 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            +
              prerelease: false
         | 
| 85 72 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
                none: false
         | 
| 86 74 | 
             
                requirements:
         | 
| 87 75 | 
             
                - - ~>
         | 
| 88 76 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: ' | 
| 90 | 
            -
             | 
| 77 | 
            +
                    version: '0.5'
         | 
| 78 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 91 79 | 
             
              name: minitest
         | 
| 92 80 | 
             
              type: :development
         | 
| 93 | 
            -
              prerelease: false
         | 
| 94 81 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 82 | 
            +
                none: false
         | 
| 95 83 | 
             
                requirements:
         | 
| 96 84 | 
             
                - - ~>
         | 
| 97 85 | 
             
                  - !ruby/object:Gem::Version
         | 
| 98 86 | 
             
                    version: '4.3'
         | 
| 99 | 
            -
             | 
| 100 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 87 | 
            +
              prerelease: false
         | 
| 101 88 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            +
                none: false
         | 
| 102 90 | 
             
                requirements:
         | 
| 103 91 | 
             
                - - ~>
         | 
| 104 92 | 
             
                  - !ruby/object:Gem::Version
         | 
| 105 | 
            -
                    version: ' | 
| 106 | 
            -
             | 
| 93 | 
            +
                    version: '4.3'
         | 
| 94 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 107 95 | 
             
              name: rake
         | 
| 108 96 | 
             
              type: :development
         | 
| 109 | 
            -
              prerelease: false
         | 
| 110 97 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 98 | 
            +
                none: false
         | 
| 111 99 | 
             
                requirements:
         | 
| 112 100 | 
             
                - - ~>
         | 
| 113 101 | 
             
                  - !ruby/object:Gem::Version
         | 
| 114 102 | 
             
                    version: '10.0'
         | 
| 103 | 
            +
              prerelease: false
         | 
| 104 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 115 105 | 
             
                none: false
         | 
| 106 | 
            +
                requirements:
         | 
| 107 | 
            +
                - - ~>
         | 
| 108 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            +
                    version: '10.0'
         | 
| 116 110 | 
             
            description: ! 'mkv2m4v is a command line utility that converts audio and video tracks
         | 
| 117 111 | 
             
              from a
         | 
| 118 112 |  | 
| @@ -148,17 +142,17 @@ rdoc_options: [] | |
| 148 142 | 
             
            require_paths:
         | 
| 149 143 | 
             
            - lib
         | 
| 150 144 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 145 | 
            +
              none: false
         | 
| 151 146 | 
             
              requirements:
         | 
| 152 147 | 
             
              - - ! '>='
         | 
| 153 148 | 
             
                - !ruby/object:Gem::Version
         | 
| 154 149 | 
             
                  version: '0'
         | 
| 155 | 
            -
              none: false
         | 
| 156 150 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 151 | 
            +
              none: false
         | 
| 157 152 | 
             
              requirements:
         | 
| 158 153 | 
             
              - - ! '>='
         | 
| 159 154 | 
             
                - !ruby/object:Gem::Version
         | 
| 160 155 | 
             
                  version: '0'
         | 
| 161 | 
            -
              none: false
         | 
| 162 156 | 
             
            requirements: []
         | 
| 163 157 | 
             
            rubyforge_project: 
         | 
| 164 158 | 
             
            rubygems_version: 1.8.23
         |