mm_tool 0.1.12 → 0.1.13

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 236711e162216210ed419200d7fb23c13dce2d7917a250e98dbc3593c7c6f378
4
- data.tar.gz: af02dd4afc8018751ab769db40c0671a00b774454ed28ae98a782c3084066789
3
+ metadata.gz: 0d69efe53e6d0c00bc51cf406efdede9770fcb34c7b0aefb576cb9065d26a94d
4
+ data.tar.gz: dd6b5aa461fe6c5327ebef47a9448b2eefadb1ae76c5bb39f21af4e633df2d2d
5
5
  SHA512:
6
- metadata.gz: affc8eb70beb7b0d3b5cf564825c434e7cea2c15e2a3ef888b72e238f508f83e41a61a5ff1ef2a3a365d0e49b651e29cf45a9a177f3a8dba7202cb5deb1bbc99
7
- data.tar.gz: ee58ae8dfda2803d320c98432526db9edd30b0e02f5b3a8bcf780880847e2d8571e4dcc0b9b2f2d3362539e06b9901cdcaa900291977fbfd89ab67ff7aa4486c
6
+ metadata.gz: b1eaa1923e61797b431fa7c508d7c68d09301134fec695c59e19bb3093e44b8a0f972c0856d17b7f1c5a4a311d1c41512394d4951c668b2155a5f3b04c9ce191
7
+ data.tar.gz: f41098c3dbbd7525829ab2bce37991d3fb461c0d2b22c0980b73e5741481daa06194d04c229b0c744705cd7488a722bf8e47bfc6289d74b3ee23681b460173a9
data/LICENSE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  The MIT License
2
2
  ===============
3
3
 
4
- Copyright (c) 2020 Jim Derry
4
+ Copyright (c) 2020-2024 Jim Derry
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -42,3 +42,54 @@ remuxing, and re-encoding media libraries.
42
42
  - 0.1.4
43
43
 
44
44
  - Hot fix.
45
+
46
+ - 0.1.5
47
+
48
+ - Updated for Ruby 2.7 compatibility.
49
+
50
+ - 0.1.6
51
+
52
+ - Make ffmpeg output less verbose.
53
+ - Don't do "slow" video conversions.
54
+
55
+ - 0.1.7
56
+
57
+ - Added `shell_commands` user default, so that we can suppress the printing of
58
+ the shell commands, such as when summarizing the work already performed.
59
+
60
+ - 0.1.8
61
+
62
+ - Fix single quoting.
63
+
64
+ - 0.1.9
65
+
66
+ - Add different encoder support.
67
+
68
+ - 0.1.10
69
+
70
+ - Fix underscore issue.
71
+
72
+
73
+ - 0.1.11
74
+
75
+ - Add force (re-encode) option.
76
+
77
+ - 0.1.12
78
+
79
+ - Fix preference, shorten string.
80
+
81
+ - 0.1.13
82
+
83
+ - Put the name of the temporary file at the end of output, so we don't have to scroll all the way to the top
84
+ to find out what it is.
85
+
86
+ - Plant a flag when we've touched a file.
87
+
88
+ - For whole file:
89
+ - MM_TOOL_ENCODED=true|false Set to true if any part of the file was transcoded.
90
+ - MM_TOOL_WRITTEN=true|false Set to true if the file was written by mm_tool, for example, possibly
91
+ nothing was transcoded, but streams were dropped or added. If EVERY stream
92
+ is copy ONLY, then we don't apply this.
93
+
94
+ - For streams:
95
+ - MM_TOOL_ENCODED_STREAM=true|false Set to true if the stream is transcoded.
@@ -180,7 +180,10 @@ module MmTool
180
180
  exit 1
181
181
  end
182
182
 
183
- output("#{File.basename($0)} processed #{@file_count[:processed]} files and displayed data for #{@file_count[:displayed]} of them.")
183
+ unless @defaults[:shell_commands]
184
+ output("Transcode File Location: #{tempfile&.path}") if @tempfile
185
+ output("#{File.basename($0)} processed #{@file_count[:processed]} files and displayed data for #{@file_count[:displayed]} of them.")
186
+ end
184
187
 
185
188
  ensure
186
189
  if @tempfile
@@ -69,6 +69,20 @@ module MmTool
69
69
  @format_metadata&.dig(:tags, :title)
70
70
  end
71
71
 
72
+ #------------------------------------------------------------
73
+ # Get the file-level 'MM_TOOL_ENCODED' metadata.
74
+ #------------------------------------------------------------
75
+ def format_mm_tool_encoded
76
+ @format_metadata&.dig(:tags, :MM_TOOL_ENCODED)&.downcase == 'true'
77
+ end
78
+
79
+ #------------------------------------------------------------
80
+ # Get the file-level 'MM_TOOL_WRITTEN' metadata.
81
+ #------------------------------------------------------------
82
+ def format_mm_tool_written
83
+ @format_metadata&.dig(:tags, :MM_TOOL_WRITTEN)&.downcase == 'true'
84
+ end
85
+
72
86
  #------------------------------------------------------------
73
87
  # Indicates whether any of the streams are of a lower
74
88
  # quality than desired by the user.
@@ -93,16 +107,28 @@ module MmTool
93
107
  @streams.count {|stream| stream.interesting?} > 0 || format_title
94
108
  end
95
109
 
110
+ #------------------------------------------------------------
111
+ # Indicates whether any of the streams are to be modified
112
+ # in any form.
113
+ #------------------------------------------------------------
114
+ def modify_streams?
115
+ number_of_copy_only = @streams.count {|stream| stream.copy_only?}
116
+ number_of_streams = @streams.count
117
+ number_of_streams > number_of_copy_only
118
+ # result = @streams.count {|stream| stream.copy_only?} < @streams.count
119
+ # result
120
+ end
121
+
96
122
  #------------------------------------------------------------
97
123
  # Get the rendered text of the format_table.
98
124
  #------------------------------------------------------------
99
125
  def format_table
100
126
  unless @format_table
101
127
  @format_table = format_table_datasource.render(:basic) do |renderer|
102
- renderer.column_widths = [10,10,10,160]
128
+ renderer.column_widths = [10,10,10,12,10,123]
103
129
  renderer.multiline = true
104
130
  renderer.padding = [0,1]
105
- renderer.width = 1000
131
+ renderer.width = 192
106
132
  end
107
133
  end
108
134
  @format_table
@@ -115,11 +141,11 @@ module MmTool
115
141
  def stream_table
116
142
  unless @stream_table
117
143
  @stream_table = stream_table_datasource.render(:unicode) do |renderer|
118
- renderer.alignments = [:center, :left, :left, :right, :right, :left, :left, :left, :left]
119
- renderer.column_widths = [5,10,10,5,10,5,23,50,35]
144
+ renderer.alignments = [:center, :left, :left, :right, :right, :left, :left, :left, :left, :left]
145
+ renderer.column_widths = [5,10,10,5,10,5,23,50,8,35]
120
146
  renderer.multiline = true
121
147
  renderer.padding = [0,1]
122
- renderer.width = 1000
148
+ renderer.width = 192
123
149
  end # do
124
150
  end
125
151
  @stream_table
@@ -153,6 +179,11 @@ module MmTool
153
179
  stream.instruction_metadata.each { |instruction| command << " #{instruction}" }
154
180
  end
155
181
 
182
+ if @defaults[:containers_preferred][0].downcase == 'mkv'
183
+ command << " -metadata MM_TOOL_ENCODED=\"true\" \\" if @streams.count {|stream| stream.transcode?} > 0
184
+ command << " -metadata MM_TOOL_WRITTEN=\"true\" \\" if modify_streams?
185
+ end
186
+
156
187
  command << " -metadata title=\"#{format_title}\" \\" if format_title
157
188
  command << " \"#{output_path}\""
158
189
  command.join("\n")
@@ -207,8 +238,8 @@ module MmTool
207
238
  #------------------------------------------------------------
208
239
  def format_table_datasource
209
240
  unless @format_table
210
- @format_table = TTY::Table.new(header: %w(Duration: Size: Bitrate: Title:))
211
- @format_table << [format_duration, format_size, format_bitrate, format_title]
241
+ @format_table = TTY::Table.new(header: ['Duration:', 'Size:', 'Bitrate:', 'mm_encoded:', 'mm_wrote:', 'Title:'])
242
+ @format_table << [format_duration, format_size, format_bitrate, format_mm_tool_encoded, format_mm_tool_written, format_title]
212
243
  end
213
244
  @format_table
214
245
  end
@@ -220,8 +251,8 @@ module MmTool
220
251
  def stream_table_datasource
221
252
  unless @table
222
253
  # Ensure that when we add the headers, they specifically are left-aligned.
223
- headers = %w(index codec type w/# h/layout lang disposition title action(s))
224
- .map { |header| {:value => header, :alignment => :left} }
254
+ headers = ['index', 'codec', 'type', 'w/#', 'h/layout', 'lang', 'disposition', 'title', 'touched?', 'action(s)']
255
+ .map { |header| {:value => header, :alignment => :left} }
225
256
 
226
257
  @table = TTY::Table.new(header: headers)
227
258
 
@@ -235,6 +266,7 @@ module MmTool
235
266
  row << stream.language
236
267
  row << stream.dispositions
237
268
  row << stream.title
269
+ row << stream.mm_tool_encoded_stream
238
270
  row << stream.action_label
239
271
  @table << row
240
272
  end
@@ -119,6 +119,14 @@ module MmTool
119
119
  lang
120
120
  end
121
121
 
122
+ #------------------------------------------------------------
123
+ # Property - returns the metadata indicating whether or not
124
+ # mm_tool has previously encoded this stream.
125
+ #------------------------------------------------------------
126
+ def mm_tool_encoded_stream
127
+ @data&.dig(:tags, :MM_TOOL_ENCODED_STREAM)&.downcase == 'true'
128
+ end
129
+
122
130
  #------------------------------------------------------------
123
131
  # Property - returns the title of the stream, or nil.
124
132
  #------------------------------------------------------------
@@ -213,6 +221,13 @@ module MmTool
213
221
  actions.include?(:copy)
214
222
  end
215
223
 
224
+ #------------------------------------------------------------
225
+ # Property - Is the stream copy only? No other modifications?
226
+ #------------------------------------------------------------
227
+ def copy_only?
228
+ (actions - [:copy, :interesting]).empty?
229
+ end
230
+
216
231
  #------------------------------------------------------------
217
232
  # Property - stream action includes :transcode?
218
233
  #------------------------------------------------------------
@@ -324,6 +339,11 @@ module MmTool
324
339
  result = []
325
340
  result << "-metadata:s:#{output_specifier} language=#{lang} \\" if set_language?
326
341
  result << "-metadata:s:#{output_specifier} title=\"#{title}\" \\" if title && ! @defaults[:ignore_titles]
342
+
343
+ if @defaults[:containers_preferred][0].downcase == 'mkv'
344
+ result << "-metadata:s:#{output_specifier} MM_TOOL_ENCODED_STREAM=\"true\" \\" if @actions.include?(:transcode)
345
+ end
346
+
327
347
  result
328
348
  end
329
349
 
@@ -204,7 +204,7 @@ module MmTool
204
204
 
205
205
  when '--no-transcode'
206
206
  @defaults[:transcode] = false
207
- @defaults.tempfile = nil
207
+ @application.tempfile = nil
208
208
 
209
209
  when '--ignore-files'
210
210
  @defaults[:ignore_files] = true
@@ -306,7 +306,7 @@ module MmTool
306
306
  OutputHelper.print_error_and_exit("Error: option #{C.bold(args[0])} was specified, but I don't know what that means.")
307
307
  end
308
308
 
309
- # Otherwise, check for existence of the path, and warn or proceed.
309
+ # Otherwise, check for existence of the path, and proceed or warn.
310
310
  path = File.expand_path(args[0])
311
311
  if File.exist?(path)
312
312
  @application.run(path)
@@ -1,3 +1,3 @@
1
1
  module MmTool
2
- VERSION = "0.1.12"
2
+ VERSION = "0.1.13"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mm_tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Derry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-21 00:00:00.000000000 Z
11
+ date: 2024-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-table
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
187
  requirements: []
188
- rubygems_version: 3.1.6
188
+ rubygems_version: 3.5.3
189
189
  signing_key:
190
190
  specification_version: 4
191
191
  summary: Curate your movie files.