video_transcoding 0.15.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a80da681f701c9145241ab7427a34189885db02d
4
- data.tar.gz: bb82f1a8edb1bb6ee6da02362146fa8cdbbf2b4f
3
+ metadata.gz: a766c53d54b741cc24e1d9ba31579667f8354ce1
4
+ data.tar.gz: d37b0b0730d5e7800aa7795f4a5caf90c84fbbcc
5
5
  SHA512:
6
- metadata.gz: 587f0b77d7804f4a65a5aa1aee7c802cd34b5ea25248b5d78ab02b9c44efbdbaca6db6ccec57b770a6a81070b3799100e599364d03bb83d7f538798388de3f66
7
- data.tar.gz: dcdb174cfdd6fe0f379169ca569195efc6df074315c4cc3b39253caf92311e71016d0ea44e3cf46fe98fac16bb8da5d24b4bca7ea9256dc5a4c379b1480901b7
6
+ metadata.gz: fffe7dc4bc59256425bb7fe704033f49fe4b733a49db896a6f1b5274a3e71f5deb85add04bf1976a51aa2f082f9fdd46561096d52c8931e0b9c1e3927ac8e791
7
+ data.tar.gz: d36bcf4a8ba96c4d7f17519c72af2fb3ea934e28ea8d46d94ed8f0ad3b445d7ba1624f26dfb550fe8aeb4194429a137d35faaa420f392a64211773512a2ff002
data/README.md CHANGED
@@ -80,9 +80,9 @@ On macOS, `HandBrakeCLI` and all its other dependencies can be easily installed
80
80
 
81
81
  On Linux, package management systems vary so it's best consult the indexes for those systems. But there's a Homebrew port available called [Linuxbrew](http://linuxbrew.sh/) and it doesn't require root access.
82
82
 
83
- On Windows, it's best to search the Web for the appropriate binary or add-on package manager. The [VideoHelp](http://www.videohelp.com) and [Cygwin](https://cygwin.com/) sites are a good place to start. Or you could try installing into the [Windows Subsystem for Linux](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) as described here:
83
+ On Windows, it's best to follow one of the two methods, manually installing binaries or installing into the [Windows Subsystem for Linux](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux), as described here:
84
84
 
85
- <https://gist.github.com/JMoVS/75f3c6b344648deef59bc761e5e5a0e6>
85
+ <https://github.com/JMoVS/installing_video_transcoding_on_windows>
86
86
 
87
87
  When installing `HandBrakeCLI` or other downloaded programs, make sure the executable binary is in a directory listed in your `PATH` environment variable. On Unix-style systems like macOS and Linux, that directory might be `/usr/local/bin`.
88
88
 
@@ -198,13 +198,11 @@ The `.m4v` file extension is more "iTunes-friendly," but the file content itself
198
198
 
199
199
  #### Improving performance
200
200
 
201
- If you're willing to trade some precision for a 45-50% increase in video encoding speed, use the `--quick` option:
201
+ You can increase encoding speed by 70-80% with no easily perceptible loss in video quality by using the `--quick` option:
202
202
 
203
203
  transcode-video --quick "/path/to/Movie.mkv"
204
204
 
205
- The `--quick` option is also more than 15% speedier than the x264 video encoder's "fast" preset and it avoids the occasional quality loss problems of the "faster" and "veryfast" presets.
206
-
207
- Be aware that output files are slightly larger when using the `--quick` option since the loss of precision is also a loss of efficiency.
205
+ The `--quick` option avoids the typical quality problems associated with the x264 video encoder's speed-based presets, especially as that speed increases.
208
206
 
209
207
  #### Cropping
210
208
 
@@ -612,7 +610,7 @@ Plus, I wouldn't use a GUI for these tasks. And it's a bad idea to develop softw
612
610
 
613
611
  [High Efficiency Video Coding](https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding) or H.265 is the likely successor to [H.264](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC), which is the format currently output by `transcode-video`. HandBrake has supported H.265 ever since it included the [x265 video encoder](http://x265.org/).
614
612
 
615
- My ratecontrol system can't be applied with the current version of the x265 encoder in HandBrake because it doesn't allow access to `qpmax`, critical for maintaining quality in certain situations. I'll consider adding support once the [fix for `qpmax` support in x265](https://bitbucket.org/multicoreware/x265/issues/232/add-option-to-specify-qpmax) is available in an official HandBrake release.
613
+ My ratecontrol system couldn't be applied with the x265 encoder in older versions of HandBrake because it didn't allow access to `qpmax`, critical for maintaining quality in certain situations. The latest version of HandBrake includes a new encoder which fixes that.
616
614
 
617
615
  But support also requires equivalent quality at a smaller size when using my rate control system. And performance is an issue. While speed continues to improve, the x265 encoder is still considerably slower than the current H.264 system.
618
616
 
@@ -658,6 +656,19 @@ For a few problematic videos, I have to apply options like `--force-rate 23.976
658
656
 
659
657
  ## History
660
658
 
659
+ ### [0.16.0](https://github.com/donmelton/video_transcoding/releases/tag/0.16.0)
660
+
661
+ Friday, January 20, 2017
662
+
663
+ * Add a `--cvbr` option to `transcode-video`. This is essentially the same as the experimental option of the same name which was removed on February 25, 2016, but now it doesn't have a bitrate argument. It enables a _simple_ constrained variable bitrate (CVBR) ratecontrol system, less constrained the default, producing a more predictable output size while avoiding `VBV underflow` warnings. Use it with `--target big` for the best results.
664
+ * Modify the `--abr` option in `transcode-video` to no longer use a bitrate argument. Instead, it relies on the `--target` option to control bitrate, just like the default ratecontrol system and the new `--cvbr` option. So, passing a bitrate argument is now an error. But you should consider using `--cvbr` instead of `--abr` anyway since the former is almost always higher quality.
665
+ * Remove the deprecated `--no-constrain` option from `detect-crop` and the `--no-constrain-crop` option from `transcode-video`.
666
+ * Modify `convert-video` to allow HEVC format video along with H.264.
667
+ * Update the "README" document to:
668
+ * Revise and simplify the Windows installation instructions to point users at the fine work by [@samhutchins](https://github.com/samhutchins) and [@JMoVS](https://github.com/JMoVS) on documenting their two methods. Via [ #115](https://github.com/donmelton/video_transcoding/issues/115).
669
+ * Revise the "Using `transcode-video`" section to correct out-of-date performance data about the `--quick` option.
670
+ * Revise the H.265 answer in the "FAQ" section with up-to-date information about the x265 video encoder. Via [ #118](https://github.com/donmelton/video_transcoding/pull/118).
671
+
661
672
  ### [0.15.0](https://github.com/donmelton/video_transcoding/releases/tag/0.15.0)
662
673
 
663
674
  Sunday, January 15, 2017
data/bin/convert-video CHANGED
@@ -74,7 +74,7 @@ HERE
74
74
  media = Media.new(path: arg, allow_directory: false)
75
75
  Console.debug media.info
76
76
  output = resolve_output(media)
77
- fail "no H.264 format video track: #{arg}" unless media.info[:h264]
77
+ fail "no compatible video track: #{arg}" unless media.info[:h264] or media.info[:hevc]
78
78
  fail "no video stream: #{arg}" unless media.info.has_key? :stream
79
79
 
80
80
  if media.info[:mkv]
data/bin/detect-crop CHANGED
@@ -55,11 +55,6 @@ HERE
55
55
  opts.on('--title ARG', Integer) { |arg| @title = arg }
56
56
  opts.on('--constrain') { @constrain = true }
57
57
  opts.on('--values-only') { @values_only = true }
58
-
59
- opts.on '--no-constrain' do
60
- Console.warn 'Using deprecated option: --no-constrain'
61
- @constrain = false
62
- end
63
58
  end
64
59
 
65
60
  def configure
data/bin/transcode-video CHANGED
@@ -186,8 +186,11 @@ External subtitle options:
186
186
  (can be used multiple times)
187
187
 
188
188
  Advanced options:
189
- --abr BITRATE use modified ABR ratecontrol at average video bitrate
190
- (more predictable size but lower quality than default)
189
+ --cvbr use simple constrained variable bitrate (CVBR) ratecontrol
190
+ (more predictable size while avoiding VBV underflows)
191
+ (use with `--target big` for best results)
192
+ --abr use modified average bitrate (ABR) ratecontrol
193
+ (predictable size but lower quality than default)
191
194
  --vbr QUALITY use true VBR ratecontrol at constant video quality (0-51)
192
195
  (unpredictable size but useful for comparison to default)
193
196
  -E, --encoder-option NAME=VALUE|_NAME
@@ -226,10 +229,10 @@ HERE
226
229
  @format = :mkv
227
230
  @log = true
228
231
  @dry_run = false
229
- @vbv_maxrate_2160p = 12000
230
- @vbv_maxrate_1080p = 6000
231
- @vbv_maxrate_720p = 3000
232
- @vbv_maxrate_480p = 1500
232
+ @max_bitrate_2160p = 12000
233
+ @max_bitrate_1080p = 6000
234
+ @max_bitrate_720p = 3000
235
+ @max_bitrate_480p = 1500
233
236
  @quick = false
234
237
  @veryquick = false
235
238
  @crop = {:top => 0, :bottom => 0, :left => 0, :right => 0}
@@ -259,7 +262,8 @@ HERE
259
262
  @srt_language = {}
260
263
  @srt_encoding = {}
261
264
  @srt_offset = {}
262
- @abr_bitrate = nil
265
+ @use_cvbr = false
266
+ @use_abr = false
263
267
  @vbr_quality = nil
264
268
  @encoder_options = {}
265
269
  @disable_encoder_options = []
@@ -318,27 +322,27 @@ HERE
318
322
  opts.on '--target ARG' do |arg|
319
323
  case arg
320
324
  when 'big'
321
- @vbv_maxrate_2160p = 16000
322
- @vbv_maxrate_1080p = 8000
323
- @vbv_maxrate_720p = 4000
324
- @vbv_maxrate_480p = 2000
325
+ @max_bitrate_2160p = 16000
326
+ @max_bitrate_1080p = 8000
327
+ @max_bitrate_720p = 4000
328
+ @max_bitrate_480p = 2000
325
329
  when 'small'
326
- @vbv_maxrate_2160p = 8000
327
- @vbv_maxrate_1080p = 4000
328
- @vbv_maxrate_720p = 2000
329
- @vbv_maxrate_480p = 1000
330
+ @max_bitrate_2160p = 8000
331
+ @max_bitrate_1080p = 4000
332
+ @max_bitrate_720p = 2000
333
+ @max_bitrate_480p = 1000
330
334
  when /^([0-9]+p)=([1-9][0-9]*)$/
331
335
  bitrate = $2.to_i
332
336
 
333
337
  case $1
334
338
  when '2160p'
335
- @vbv_maxrate_2160p = bitrate
339
+ @max_bitrate_2160p = bitrate
336
340
  when '1080p'
337
- @vbv_maxrate_1080p = bitrate
341
+ @max_bitrate_1080p = bitrate
338
342
  when '720p'
339
- @vbv_maxrate_720p = bitrate
343
+ @max_bitrate_720p = bitrate
340
344
  when '480p'
341
- @vbv_maxrate_480p = bitrate
345
+ @max_bitrate_480p = bitrate
342
346
  else
343
347
  fail UsageError, "invalid target video bitrate resolution: #{$1}"
344
348
  end
@@ -346,12 +350,12 @@ HERE
346
350
  @target_bitrate = nil
347
351
  else
348
352
  unless arg =~ /^[1-9][0-9]*$/
349
- fail UsageError, "invalid rate argument: #{arg}"
353
+ fail UsageError, "invalid bitrate argument: #{arg}"
350
354
  end
355
+
351
356
  @target_bitrate = arg.to_i
352
357
  end
353
358
 
354
- @abr_bitrate = nil
355
359
  @vbr_quality = nil
356
360
  end
357
361
 
@@ -399,11 +403,6 @@ HERE
399
403
  @constrain_crop = true
400
404
  end
401
405
 
402
- opts.on '--no-constrain-crop' do
403
- Console.warn 'Using deprecated option: --no-constrain-crop'
404
- @constrain_crop = false
405
- end
406
-
407
406
  opts.on '--fallback-crop ARG' do |arg|
408
407
  @fallback_crop = case arg
409
408
  when 'handbrake', 'mplayer', 'none'
@@ -702,14 +701,22 @@ HERE
702
701
  @srt_offset[@srt_file.size - 1] = arg
703
702
  end
704
703
 
705
- opts.on '--abr ARG', Integer do |arg|
706
- @abr_bitrate = arg
704
+ opts.on '--cvbr' do
705
+ @use_cvbr = true
706
+ @use_abr = false
707
+ @vbr_quality = nil
708
+ end
709
+
710
+ opts.on '--abr' do
711
+ @use_abr = true
712
+ @use_cvbr = false
707
713
  @vbr_quality = nil
708
714
  end
709
715
 
710
716
  opts.on '--vbr ARG', Float do |arg|
711
717
  @vbr_quality = arg
712
- @abr_bitrate = nil
718
+ @use_cvbr = false
719
+ @use_abr = false
713
720
  end
714
721
 
715
722
  opts.on '-E', '--encoder-option ARG' do |arg|
@@ -910,16 +917,16 @@ HERE
910
917
 
911
918
  if width > 1920 or height > 1080
912
919
  encoder_level = '5.1'
913
- vbv_maxrate = @vbv_maxrate_2160p
920
+ max_bitrate = @max_bitrate_2160p
914
921
  elsif width > 1280 or height > 720
915
922
  encoder_level = '4.0'
916
- vbv_maxrate = @vbv_maxrate_1080p
923
+ max_bitrate = @max_bitrate_1080p
917
924
  elsif width * height > 720 * 576
918
925
  encoder_level = '3.1'
919
- vbv_maxrate = @vbv_maxrate_720p
926
+ max_bitrate = @max_bitrate_720p
920
927
  else
921
928
  encoder_level = '3.0'
922
- vbv_maxrate = @vbv_maxrate_480p
929
+ max_bitrate = @max_bitrate_480p
923
930
  end
924
931
 
925
932
  case encoder
@@ -930,38 +937,37 @@ HERE
930
937
  handbrake_options['encoder-profile'] = 'main'
931
938
  end
932
939
 
933
- if @abr_bitrate.nil? and @vbr_quality.nil?
934
- handbrake_options['quality'] = '1'
935
-
940
+ if @vbr_quality.nil?
936
941
  if @target_bitrate.nil?
937
942
  unless media.info[:directory]
938
943
  bitrate = ((((media.info[:size] * 8) / media.info[:duration]) / 1000) / 1000) * 1000
939
944
 
940
- if bitrate < vbv_maxrate
941
- min_bitrate = vbv_maxrate / 2
945
+ if bitrate < max_bitrate
946
+ min_bitrate = max_bitrate / 2
942
947
 
943
948
  if bitrate < min_bitrate
944
- vbv_maxrate = min_bitrate
949
+ max_bitrate = min_bitrate
945
950
  else
946
- vbv_maxrate = bitrate
951
+ max_bitrate = bitrate
947
952
  end
948
953
  end
949
954
  end
950
955
  else
951
- vbv_maxrate = @target_bitrate
956
+ max_bitrate = @target_bitrate
952
957
  end
953
958
 
954
- encoder_options['vbv-maxrate'] = vbv_maxrate.to_s
955
- encoder_options['vbv-bufsize'] = (@encoder_options.fetch('vbv-maxrate', vbv_maxrate).to_i * 2).to_s
956
- encoder_options['crf-max'] = '25'
957
- encoder_options['qpmax'] = '34'
958
- else
959
- unless @abr_bitrate.nil?
960
- handbrake_options['vb'] = @abr_bitrate.to_s
961
- encoder_options['qpmax'] = '34'
959
+ if @use_abr
960
+ handbrake_options['vb'] = max_bitrate.to_s
961
+ else
962
+ handbrake_options['quality'] = '1'
963
+ encoder_options['vbv-maxrate'] = max_bitrate.to_s
964
+ encoder_options['vbv-bufsize'] = (@encoder_options.fetch('vbv-maxrate', max_bitrate).to_i * 2).to_s
965
+ encoder_options['crf-max'] = @use_cvbr ? '30' : '25'
962
966
  end
963
967
 
964
- handbrake_options['quality'] = @vbr_quality.to_s.gsub(/\.0+$/, '') unless @vbr_quality.nil?
968
+ encoder_options['qpmax'] = '34' unless @use_cvbr
969
+ else
970
+ handbrake_options['quality'] = @vbr_quality.to_s.gsub(/\.0+$/, '')
965
971
  end
966
972
 
967
973
  if (@quick or @veryquick) and
@@ -131,6 +131,7 @@ module VideoTranscoding
131
131
  end
132
132
 
133
133
  @info[:h264] = false
134
+ @info[:hevc] = false
134
135
  @info[:mpeg2] = false
135
136
  audio_track = 0
136
137
  subtitle_track = 0
@@ -148,6 +149,8 @@ module VideoTranscoding
148
149
 
149
150
  if attributes =~ /^h264/
150
151
  @info[:h264] = true
152
+ elsif attributes =~ /^hevc/
153
+ @info[:hevc] = true
151
154
  elsif attributes =~ /^mpeg2video/
152
155
  @info[:mpeg2] = true
153
156
  end
@@ -5,5 +5,5 @@
5
5
  #
6
6
 
7
7
  module VideoTranscoding
8
- VERSION = '0.15.0'
8
+ VERSION = '0.16.0'
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: video_transcoding
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Don Melton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-15 00:00:00.000000000 Z
11
+ date: 2017-01-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Video Transcoding is a package of tools to transcode, inspect