video_transcoding 0.22.0 → 0.23.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
  SHA256:
3
- metadata.gz: 2ec7d9f2674f60b914a959df7c76debc47249ae57b925606b1d2ca86937a6f35
4
- data.tar.gz: 5db202054bf388c995005cd9752ae6203551e2aec5680acbdb3a887b5d1d38ed
3
+ metadata.gz: 03bf26235071514e773c623951ccf5363672daaaa6a47e382eb39047632a7535
4
+ data.tar.gz: 3c1e303d5002e0415a87ef397a17a08e4df547f8c3abcd3d5dd51bb8d4bfe2f4
5
5
  SHA512:
6
- metadata.gz: 27dc2c42fee463759a08d50bafe115d43b42a904cb89ff9e9cd0fe59bb8be14f98bbd3f6cd23a08b7b40952191ee5c1f6f5d47c539f9fd178f929203a76b35c6
7
- data.tar.gz: 548d0b737f9d976daf3a5e4f710837b0c2a807cead897b0d2c7ee7eed2509fdd1ca0044595c1b41fa29d90ecfaaf2f43d71503ae541f6b7df2074169eca62ca9
6
+ metadata.gz: 5a309622bce60b49984c428fe261a19f0a6a43750b1f2e7cecb55f9d2f57d3c01947e45eb43024598ee19c0f1b677169dddfba9743f7b3024caf872204fd58ca
7
+ data.tar.gz: 98ca7b6d7827bc9361f3f6707f622138019f105eb9f67ab9132de7f218b775245c7b0052cfddc9a6f7a693c374deb56762e4c3d6680c82da64baa0f205a8de4d
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2018 Don Melton
1
+ Copyright (c) 2013-2019 Don Melton
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -563,7 +563,7 @@ These examples are written in Bash and only supply crop values. But almost any s
563
563
 
564
564
  What is a ratecontrol system? It's how a video encoder decides on the amount of bits to allocate for a specific frame.
565
565
 
566
- My `transcode-video` tool has three different ratecontrol systems which manipulate the x264 and x265 software-based video encoders built into `HandBrakeCLI`.
566
+ My `transcode-video` tool has four different ratecontrol systems which manipulate x264 and three which manipulate x265, both software-based video encoders built into `HandBrakeCLI`.
567
567
 
568
568
  Additionally, `transcode-video` allows access to hardware-based video encoders which have their own ratecontrol systems.
569
569
 
@@ -603,6 +603,18 @@ It seems counterintuitive, but constraining the maximum bitrate prevents too muc
603
603
 
604
604
  And this manipulation is exactly the same strategy used by streaming services such as Netflix.
605
605
 
606
+ ### How my average variable bitrate (AVBR) ratecontrol system works
607
+
608
+ My average variable bitrate (AVBR) ratecontrol system, selected via the `--avbr` option, is also based on the ABR algorithm already within x264 which targets a specific bitrate.
609
+
610
+ But the maximum bitrate is not constrained like my ABR system.
611
+
612
+ Instead, the tolerance of missing the average bitrate is raised to the maximum amount, disabling overflow detection completely. This makes the ABR algorithm behave much more like a CRF-based encode, so final bitrates can be 10-15% higher or lower than the target.
613
+
614
+ And to prevent bitrates from getting too low, the Macroblock-tree ratecontrol system built into x264 is disabled. While this does lower compression efficiency somewhat, it significantly reduces blockiness, color banding and other artifacts.
615
+
616
+ Unfortunately, these modifications to implement AVBR are not possible when using x265.
617
+
606
618
  ## FAQ
607
619
 
608
620
  ### Should I worry about all these `VBV underflow` warnings?
@@ -629,9 +641,16 @@ While speed continues to improve, x265 is still considerably slower than the def
629
641
 
630
642
  Hardware-based encoders, like those in [Intel Quick Sync Video](https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video), are often considerably faster than x264 or x265. Some are available in recent versions of HandBrake.
631
643
 
632
- Check the output of `HandBrakeCLI --help` to find out if your platform has any of these video encoders available. The names of these encoders all end with "`_h264`" (for H.264) or "`_h265`" (for HEVC).
644
+ Check the `Video Options` section from the output of `HandBrakeCLI --help` to find out if your platform has any of these video encoders available:
633
645
 
634
- You can try hardware-based transcoding now using the `--encoder` option. On macOS, select the H.264 encoder this way:
646
+ Platform | H.264 encoder | HEVC encoder
647
+ --- | --- | ---
648
+ Intel Quick Sync Video | `qsv_h264` | `qsv_h265` and `qsv_h265_10bit`
649
+ AMD Video Coding Engine | `vce_h264` | `vce_h265`
650
+ Nvidia NVENC | `nvenc_h264` | `nvenc_h265`
651
+ Apple VideoToolbox | `vt_h264` | `vt_h265`
652
+
653
+ You can try hardware-based transcoding now using the `--encoder` option. On macOS, select the Apple VideoToolbox H.264 encoder this way:
635
654
 
636
655
  transcode-video --encoder vt_h264 "/path/to/Movie.mkv"
637
656
 
@@ -657,6 +676,21 @@ For a few problematic videos, I have to apply options like `--force-rate 23.976
657
676
 
658
677
  ## History
659
678
 
679
+ ### [0.23.0](https://github.com/donmelton/video_transcoding/releases/tag/0.23.0)
680
+
681
+ Sunday, February 10, 2019
682
+
683
+ * Add a `--avbr` ratecontrol option to `transcode-video` (via [ #248](https://github.com/donmelton/video_transcoding/issues/248)) which:
684
+ * Implements an average variable bitrate (AVBR) ratecontrol system focused on maintaining quality at the risk of final bitrates being as much as 10-15% higher or lower than the target.
685
+ * May emit a few `VBV underflow` warnings at the beginning of a transcode, but nothing like the sustained deluge possible with my special, or default, ratecontrol system.
686
+ * Works only with the `x264` and `x264_10bit` encoders. Sorry, but the settings necessary to implement AVBR are not available with the `x265` family of encoders.
687
+ * Add my new AVBR ratecontrol system to the "Explanation" section of the "README" document.
688
+ * Add an undocumented `--raw` ratecontrol testing option to `transcode-video` which implements, by default, an unconstrained ABR system, easily modified with `--handbrake-option` and/or `--encoder-option`.
689
+ * Add a `--mixdown` option to `transcode-video` which sets the mixdown format for all AAC audio tracks, either Dolby Pro Logic II (the default) or stereo. Thanks to [@samhutchins](https://github.com/samhutchins) for the idea and the patch! Via [ #245](https://github.com/donmelton/video_transcoding/pull/245).
690
+ * Fix failure in `detect-crop` on Linux for certain inputs by forcing the text output from `ffmpeg` into UTF-8 binary format to ensure the correct parsing of that data during crop detection. Via [ #247](https://github.com/donmelton/video_transcoding/issues/247).
691
+ * List all hardware-based video encoders within the related answer in the "FAQ" section of the "README" document. Thanks to [@vr8hub](https://github.com/vr8hub) for the idea! Via [ #251](https://github.com/donmelton/video_transcoding/issues/251).
692
+ * Update all copyright notices to the year 2019.
693
+
660
694
  ### [0.22.0](https://github.com/donmelton/video_transcoding/releases/tag/0.22.0)
661
695
 
662
696
  Saturday, December 15, 2018
data/bin/convert-video CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # convert-video
4
4
  #
5
- # Copyright (c) 2013-2018 Don Melton
5
+ # Copyright (c) 2013-2019 Don Melton
6
6
  #
7
7
 
8
8
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
data/bin/detect-crop CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # detect-crop
4
4
  #
5
- # Copyright (c) 2013-2018 Don Melton
5
+ # Copyright (c) 2013-2019 Don Melton
6
6
  #
7
7
 
8
8
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # query-handbrake-log
4
4
  #
5
- # Copyright (c) 2013-2018 Don Melton
5
+ # Copyright (c) 2013-2019 Don Melton
6
6
  #
7
7
 
8
8
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
data/bin/transcode-video CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # transcode-video
4
4
  #
5
- # Copyright (c) 2013-2018 Don Melton
5
+ # Copyright (c) 2013-2019 Don Melton
6
6
  #
7
7
 
8
8
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
@@ -62,6 +62,9 @@ Quality options:
62
62
  (predictable size with different quality than default)
63
63
  --simple use simple constrained ratecontrol
64
64
  (limited size with different quality than default)
65
+ --avbr use average variable bitrate (AVBR) ratecontrol
66
+ (size near target with different quality than default)
67
+ (only available with x264 and x264_10bit encoders)
65
68
  --target big|small
66
69
  apply video bitrate target macro for all input resolutions
67
70
  (`big` trades some size for increased quality)
@@ -154,6 +157,8 @@ Audio options:
154
157
  (can be used multiple times)
155
158
  --aac-encoder NAME
156
159
  use named AAC audio encoder (default: platform dependent)
160
+ --mixdown dpl2|stereo
161
+ set mixdown format for stereo audio tracks (default: dpl2)
157
162
  --no-audio disable all audio output
158
163
 
159
164
  Subtitle options:
@@ -230,8 +235,7 @@ HERE
230
235
  @format = :mkv
231
236
  @log = true
232
237
  @dry_run = false
233
- @use_abr = false
234
- @use_simple = false
238
+ @ratecontrol = :special
235
239
  @target_bitrate_2160p = 12000
236
240
  @target_bitrate_1080p = 6000
237
241
  @target_bitrate_720p = 3000
@@ -256,6 +260,7 @@ HERE
256
260
  @copy_audio = []
257
261
  @copy_audio_name = []
258
262
  @aac_encoder = nil
263
+ @mixdown = 'dpl2'
259
264
  @burn_subtitle = nil
260
265
  @force_subtitle = nil
261
266
  @extra_subtitle = []
@@ -326,13 +331,19 @@ HERE
326
331
  end
327
332
 
328
333
  opts.on '--abr' do
329
- @use_abr = true
330
- @use_simple = false
334
+ @ratecontrol = :abr
331
335
  end
332
336
 
333
337
  opts.on '--simple' do
334
- @use_simple = true
335
- @use_abr = false
338
+ @ratecontrol = :simple
339
+ end
340
+
341
+ opts.on '--avbr' do
342
+ @ratecontrol = :avbr
343
+ end
344
+
345
+ opts.on '--raw' do
346
+ @ratecontrol = :raw
336
347
  end
337
348
 
338
349
  opts.on '--target ARG' do |arg|
@@ -607,6 +618,15 @@ HERE
607
618
  end
608
619
  end
609
620
 
621
+ opts.on '--mixdown ARG' do |arg|
622
+ @mixdown = case arg
623
+ when 'dpl2', 'stereo'
624
+ arg
625
+ else
626
+ fail UsageError, "invalid mixdown: #{arg}"
627
+ end
628
+ end
629
+
610
630
  opts.on('--no-audio') { force_handbrake_option 'audio', 'none' }
611
631
 
612
632
  opts.on '--burn-subtitle ARG' do |arg|
@@ -968,24 +988,41 @@ HERE
968
988
  handbrake_options['encoder-level'] = encoder_level
969
989
  end
970
990
 
971
- if @use_abr
991
+ signal_hrd = false
992
+
993
+ case @ratecontrol
994
+ when :special
995
+ handbrake_options['quality'] = '1'
996
+ encoder_options['vbv-maxrate'] = bitrate.to_s
997
+ encoder_options['vbv-bufsize'] = ((bitrate * 2).to_i).to_s
998
+ encoder_options['crf-max'] = '25'
999
+ encoder_options['qpmax'] = '34'
1000
+ when :abr
972
1001
  handbrake_options['vb'] = bitrate.to_s
973
1002
  encoder_options['vbv-maxrate'] = ((bitrate * 1.5).to_i).to_s
974
1003
  encoder_options['vbv-bufsize'] = ((bitrate * 2).to_i).to_s
975
- encoder_options['nal-hrd'] = 'vbr' if encoder =~ /^x264(?:_10bit)?$/
976
- encoder_options['hrd'] = '1' if encoder =~ /^x265(?:_1[02]bit)?$/
977
- elsif @use_simple
1004
+ signal_hrd = true
1005
+ when :simple
978
1006
  handbrake_options['quality'] = '1'
979
1007
  encoder_options['vbv-maxrate'] = bitrate.to_s
980
1008
  encoder_options['vbv-bufsize'] = bitrate.to_s
1009
+ signal_hrd = true
1010
+ when :avbr
1011
+ handbrake_options['vb'] = bitrate.to_s
1012
+
1013
+ if encoder =~ /^x264(?:_10bit)?$/
1014
+ encoder_options['ratetol'] = 'inf'
1015
+ encoder_options['mbtree'] = '0'
1016
+ else
1017
+ fail UsageError, "`--avbr` not available with the `#{encoder}` encoder"
1018
+ end
1019
+ when :raw
1020
+ handbrake_options['vb'] = bitrate.to_s unless @handbrake_options.has_key? 'quality'
1021
+ end
1022
+
1023
+ if signal_hrd
981
1024
  encoder_options['nal-hrd'] = 'vbr' if encoder =~ /^x264(?:_10bit)?$/
982
1025
  encoder_options['hrd'] = '1' if encoder =~ /^x265(?:_1[02]bit)?$/
983
- else
984
- handbrake_options['quality'] = '1'
985
- encoder_options['vbv-maxrate'] = bitrate.to_s
986
- encoder_options['vbv-bufsize'] = ((bitrate * 2).to_i).to_s
987
- encoder_options['crf-max'] = '25'
988
- encoder_options['qpmax'] = '34'
989
1026
  end
990
1027
 
991
1028
  if (@quick or @veryquick) and
@@ -1088,7 +1125,7 @@ HERE
1088
1125
  else
1089
1126
  @aac_encoder ||= HandBrake.aac_encoder
1090
1127
  encoders << @aac_encoder
1091
- mixdowns << (info[:channels] > 2.0 ? 'dpl2' : '')
1128
+ mixdowns << (info[:channels] > 2.0 ? @mixdown : '')
1092
1129
  end
1093
1130
 
1094
1131
  bitrates << ''
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # video_transcoding.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  require 'English'
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # cli.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  require 'optparse'
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # console.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,9 +1,9 @@
1
1
  #
2
2
  # copyright.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
8
- COPYRIGHT = 'Copyright (c) 2013-2018 Don Melton'
8
+ COPYRIGHT = 'Copyright (c) 2013-2019 Don Melton'
9
9
  end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # crop.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -51,6 +51,8 @@ module VideoTranscoding
51
51
  last_seconds = seconds
52
52
  end
53
53
 
54
+ line.encode! 'UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''
55
+
54
56
  if line =~ / crop=([0-9]+):([0-9]+):([0-9]+):([0-9]+)$/
55
57
  d_width, d_height, d_x, d_y = $1.to_i, $2.to_i, $3.to_i, $4.to_i
56
58
  crop_width = d_width if crop_width < d_width
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # errors.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # ffmpeg.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # handbrake.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # media.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # mkvpropedit.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # mp4track.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # tool.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
@@ -1,9 +1,9 @@
1
1
  #
2
2
  # version.rb
3
3
  #
4
- # Copyright (c) 2013-2018 Don Melton
4
+ # Copyright (c) 2013-2019 Don Melton
5
5
  #
6
6
 
7
7
  module VideoTranscoding
8
- VERSION = '0.22.0'
8
+ VERSION = '0.23.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.22.0
4
+ version: 0.23.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: 2018-12-16 00:00:00.000000000 Z
11
+ date: 2019-02-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Video Transcoding is a package of tools to transcode, inspect
@@ -63,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.7.7
66
+ rubygems_version: 3.0.2
68
67
  signing_key:
69
68
  specification_version: 4
70
69
  summary: Tools to transcode, inspect and convert videos.