video_transcoding 0.23.0 → 0.24.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: 03bf26235071514e773c623951ccf5363672daaaa6a47e382eb39047632a7535
4
- data.tar.gz: 3c1e303d5002e0415a87ef397a17a08e4df547f8c3abcd3d5dd51bb8d4bfe2f4
3
+ metadata.gz: 18cb27202f7ca6e7c2c06000235622d7f30ab398dc9e7da2d35961a079a11ba0
4
+ data.tar.gz: fcc91ae647be367d93f9bc7a9ecf317cb7f72e15c7da4880a4c2db48927bb959
5
5
  SHA512:
6
- metadata.gz: 5a309622bce60b49984c428fe261a19f0a6a43750b1f2e7cecb55f9d2f57d3c01947e45eb43024598ee19c0f1b677169dddfba9743f7b3024caf872204fd58ca
7
- data.tar.gz: 98ca7b6d7827bc9361f3f6707f622138019f105eb9f67ab9132de7f218b775245c7b0052cfddc9a6f7a693c374deb56762e4c3d6680c82da64baa0f205a8de4d
6
+ metadata.gz: cc0c7a36b0e17efd6fb3a18bd9f36a5dd61b4e20fab78a9b46e2a5a317af2c4437db831e39efd74e6ef5a6fbccbf68d673d0dc30f344a625f1d615d445be4581
7
+ data.tar.gz: 4e32e4f2141b38c31db2a360b8f99149dda65f5942a16096cb64d08585634f86be7dca8bdbf5e46640af755baa58210f2e9d4f92dd30c3d4d4c59f784b1d9339
data/README.md CHANGED
@@ -676,6 +676,22 @@ For a few problematic videos, I have to apply options like `--force-rate 23.976
676
676
 
677
677
  ## History
678
678
 
679
+ ### [0.24.0](https://github.com/donmelton/video_transcoding/releases/tag/0.24.0)
680
+
681
+ Sunday, February 24, 2019
682
+
683
+ * Add `--audio-format` and `--keep-ac3-stereo` options to `transcode-video`. Thanks to [@samhutchins](https://github.com/samhutchins) for the idea and design! Via [ #254](https://github.com/donmelton/video_transcoding/issues/254).
684
+ * With the `--audio-format` option, you can now specify whether AC-3 or AAC is used when surround or stereo output tracks are created.
685
+ * This allows multichannel 5.1 AAC audio output by adding `--audio-format surround=aac` to your command line. However, you may want to pair that with `--audio-width main=surround` to avoid two AAC tracks of the same input being created.
686
+ * Think of the `--keep-ac3-stereo` option as a kinder, gentler form of the `--prefer-ac3` option.
687
+ * It copies rather than transcodes AC-3 stereo or mono audio tracks even when the current stereo format is AAC, but it doesn't affect surround tracks.
688
+ * Deprecate the `--prefer-ac3` option in `transcode-video` and remove its description from the `--help` output. Also via [ #254](https://github.com/donmelton/video_transcoding/issues/254).
689
+ * The option still works for now, but using it issues a warning message.
690
+ * You can get the exact same functionality by adding `--audio-width all=surround --audio-format all=ac3` to your command line.
691
+ * However, you might want to add `--audio-width all=surround --keep-ac3-stereo` instead since you'll get higher quality and slightly smaller output, albeit with some AAC tracks in your output when stereo audio in non-AC-3 format still needs to be transcoded.
692
+ * Add a `minimal` argument to the `--fallback-crop` option in `transcode-video` which determines the smallest possible crop values, when using the`--crop detect` option and argument, by combining results from both `HandBrakeCLI` and `ffmpeg`. Thanks to [@dkoenig01](https://github.com/dkoenig01) for the idea! Via [ #255](https://github.com/donmelton/video_transcoding/issues/255).
693
+ * Relax validation criteria for HandBrake-generated `.log` files in `query-handbrake-log` as workaround for `HandBrakeCLI` spewing linkage failure warnings on certain Linux platforms. Via [ #257](https://github.com/donmelton/video_transcoding/issues/257).
694
+
679
695
  ### [0.23.0](https://github.com/donmelton/video_transcoding/releases/tag/0.23.0)
680
696
 
681
697
  Sunday, February 10, 2019
@@ -137,7 +137,7 @@ HERE
137
137
  File.foreach(log) do |line|
138
138
  found = true if not found and line =~ /^HandBrake/
139
139
  count += 1
140
- fail "not a HandBrake-generated `.log` file: #{log}" if count > 5 and not found
140
+ fail "not a HandBrake-generated `.log` file: #{log}" if count > 10 and not found
141
141
  duration_line = line if duration_line.nil? and line =~ /\+ duration: /
142
142
  rate_line = line if line =~ /\+ frame rate: /
143
143
 
data/bin/transcode-video CHANGED
@@ -89,8 +89,10 @@ Video options:
89
89
  (use `--crop auto` for `HandBrakeCLI` behavior)
90
90
  --constrain-crop
91
91
  constrain `--crop detect` to optimal shape
92
- --fallback-crop handbrake|ffmpeg|none
92
+ --fallback-crop handbrake|ffmpeg|minimal|none
93
93
  select fallback crop values if `--crop detect` fails
94
+ (`minimal` uses the smallest possible crop values
95
+ combining results from `HandBrakeCLI` and `ffmpeg`)
94
96
  --720p fit video within 1280x720 pixel bounds
95
97
  --max-width WIDTH, --max-height HEIGHT
96
98
  fit video within horizontal and/or vertical pixel bounds
@@ -134,9 +136,12 @@ Audio options:
134
136
  (can be used multiple times)
135
137
  --reverse-double-order
136
138
  reverse order of `double` width audio output tracks
137
- --prefer-ac3 prefer AC-3 over AAC format when encoding or copying audio
138
- even when original track channel layout is stereo or mono
139
- (sets audio output width for all tracks to `surround`)
139
+ --audio-format surround|stereo|all=ac3|aac
140
+ set audio format for specific or all output tracks
141
+ (default for surround: ac3; default for stereo: aac)
142
+ --keep-ac3-stereo
143
+ copy rather than transcode AC-3 stereo or mono audio tracks
144
+ even when the current stereo format is AAC
140
145
  --ac3-encoder ac3|eac3
141
146
  set AC-3 audio encoder (default: ac3)
142
147
  --ac3-bitrate 384|448|640|768|1536
@@ -145,7 +150,7 @@ Audio options:
145
150
  set AC-3 audio pass-through bitrate (default: 640)
146
151
  --copy-audio TRACK|all
147
152
  try to copy track selected by number in its original format
148
- falling back to AC-3 format if original not allowed
153
+ falling back to surround format if original not allowed
149
154
  or try to copy all tracks in same manner
150
155
  (only applies to main and explicitly added audio tracks)
151
156
  (can be used multiple times)
@@ -253,7 +258,9 @@ HERE
253
258
  @audio_language = []
254
259
  @audio_width = {:main => :double, :other => :stereo}
255
260
  @reverse_double_order = false
256
- @prefer_ac3 = false
261
+ @surround_format = 'ac3'
262
+ @stereo_format = 'aac'
263
+ @keep_ac3_stereo = false
257
264
  @ac3_encoder = 'ac3'
258
265
  @ac3_bitrate = 640
259
266
  @pass_ac3_bitrate = 640
@@ -430,7 +437,7 @@ HERE
430
437
 
431
438
  opts.on '--fallback-crop ARG' do |arg|
432
439
  @fallback_crop = case arg
433
- when 'handbrake', 'ffmpeg', 'mplayer', 'none'
440
+ when 'handbrake', 'ffmpeg', 'mplayer', 'minimal', 'none'
434
441
  arg.to_sym
435
442
  else
436
443
  fail UsageError, "invalid fallback crop argument: #{arg}"
@@ -557,10 +564,35 @@ HERE
557
564
 
558
565
  opts.on('--reverse-double-order') { @reverse_double_order = true }
559
566
 
567
+ opts.on '--audio-format ARG' do |arg|
568
+ if arg =~ /^(surround|stereo|all)=(ac3|aac)$/
569
+ case $1
570
+ when 'surround'
571
+ @surround_format = $2
572
+ when 'stereo'
573
+ @stereo_format = $2
574
+ else
575
+ @surround_format = $2
576
+ @stereo_format = $2
577
+ end
578
+ else
579
+ fail UsageError, "invalid audio format argument: #{arg}"
580
+ end
581
+ end
582
+
583
+ opts.on '--keep-ac3-stereo' do
584
+ @keep_ac3_stereo = true
585
+ end
586
+
560
587
  opts.on '--prefer-ac3' do
561
- @prefer_ac3 = true
588
+ Console.warn '**********'
589
+ Console.warn 'Using deprecated option: --prefer-ac3'
590
+ Console.warn "Replace with: --audio-width all=surround --audio-format all=ac3"
591
+ Console.warn '**********'
562
592
  @audio_width[:main] = :surround
563
593
  @audio_width[:other] = :surround
594
+ @surround_format = 'ac3'
595
+ @stereo_format = 'ac3'
564
596
  end
565
597
 
566
598
  opts.on '--ac3-encoder ARG' do |arg|
@@ -1053,6 +1085,13 @@ HERE
1053
1085
  hb_crop
1054
1086
  when :ffmpeg, :mplayer
1055
1087
  ff_crop
1088
+ when :minimal
1089
+ {
1090
+ :top => [hb_crop[:top], ff_crop[:top]].min,
1091
+ :bottom => [hb_crop[:bottom], ff_crop[:bottom]].min,
1092
+ :left => [hb_crop[:left], ff_crop[:left]].min,
1093
+ :right => [hb_crop[:right], ff_crop[:right]].min
1094
+ }
1056
1095
  when :none
1057
1096
  {:top => 0, :bottom => 0, :left => 0, :right => 0}
1058
1097
  else
@@ -1094,37 +1133,53 @@ HERE
1094
1133
  end
1095
1134
 
1096
1135
  tracks, encoders, bitrates, mixdowns, names = [], [], [], [], []
1136
+ @aac_encoder ||= HandBrake.aac_encoder
1137
+ surround_encoder = @surround_format == 'ac3' ? @ac3_encoder : @aac_encoder
1138
+ stereo_encoder = @stereo_format == 'ac3' ? @ac3_encoder : @aac_encoder
1097
1139
 
1098
1140
  add_surround = ->(info, copy) do
1141
+ has_ac3 = (@ac3_encoder == 'ac3' and info[:format] == 'AC3') or
1142
+ (@ac3_encoder == 'eac3' and info[:format] =~ /^(?:E-)?AC3$/)
1099
1143
  bitrate = info[:bps].nil? ? 640 : info[:bps] / 1000
1100
1144
 
1101
- if copy or
1102
- (((@ac3_encoder == 'ac3' and info[:format] == 'AC3') or
1103
- (@ac3_encoder == 'eac3' and info[:format] =~ /^(?:E-)?AC3$/)) and
1104
- bitrate <= @pass_ac3_bitrate)
1145
+ if copy or
1146
+ (@surround_format == 'ac3' and has_ac3 and bitrate <= @pass_ac3_bitrate) or
1147
+ (@surround_format == 'aac' and info[:format] =~ /^AAC/)
1105
1148
  encoders << 'copy'
1106
1149
  bitrates << ''
1150
+ mixdowns << ''
1107
1151
  else
1108
- encoders << @ac3_encoder
1152
+ encoders << surround_encoder
1109
1153
 
1110
- if (@ac3_encoder == 'ac3' and @ac3_bitrate >= 640) or
1111
- (@ac3_encoder == 'eac3' and @ac3_bitrate == 1536)
1112
- bitrates << ''
1154
+ if @surround_format == 'ac3'
1155
+ if (@ac3_encoder == 'ac3' and @ac3_bitrate >= 640) or
1156
+ (@ac3_encoder == 'eac3' and @ac3_bitrate == 1536)
1157
+ bitrates << ''
1158
+ else
1159
+ bitrates << @ac3_bitrate.to_s
1160
+ end
1161
+
1162
+ mixdowns << ''
1113
1163
  else
1114
- bitrates << @ac3_bitrate.to_s
1164
+ bitrates << ''
1165
+ mixdowns << '5point1'
1115
1166
  end
1116
1167
  end
1117
-
1118
- mixdowns << ''
1119
1168
  end
1120
1169
 
1121
1170
  add_stereo = ->(info, copy) do
1122
- if copy or (info[:format] =~ /^AAC/ and info[:channels] <= 2.0)
1171
+ has_ac3 = (@ac3_encoder == 'ac3' and info[:format] == 'AC3') or
1172
+ (@ac3_encoder == 'eac3' and info[:format] =~ /^(?:E-)?AC3$/)
1173
+
1174
+ if copy or
1175
+ (info[:channels] <= 2.0 and
1176
+ ((@stereo_format == 'aac' and
1177
+ (info[:format] =~ /^AAC/ or (@keep_ac3_stereo and has_ac3))) or
1178
+ (@stereo_format == 'ac3' and has_ac3)))
1123
1179
  encoders << 'copy'
1124
1180
  mixdowns << ''
1125
1181
  else
1126
- @aac_encoder ||= HandBrake.aac_encoder
1127
- encoders << @aac_encoder
1182
+ encoders << stereo_encoder
1128
1183
  mixdowns << (info[:channels] > 2.0 ? @mixdown : '')
1129
1184
  end
1130
1185
 
@@ -1162,7 +1217,7 @@ HERE
1162
1217
  add_stereo.call info, copy
1163
1218
  end
1164
1219
  when :surround
1165
- if @prefer_ac3 or (info[:channels] > 2.0)
1220
+ if (info[:channels] > 2.0)
1166
1221
  add_surround.call info, copy
1167
1222
  else
1168
1223
  add_stereo.call info, copy
@@ -1175,7 +1230,7 @@ HERE
1175
1230
  handbrake_options['audio'] = tracks.join(',')
1176
1231
  encoders = encoders.join(',')
1177
1232
  handbrake_options['aencoder'] = encoders if encoders.gsub(/,/, '') != ''
1178
- handbrake_options['audio-fallback'] = @ac3_encoder unless @copy_audio.empty?
1233
+ handbrake_options['audio-fallback'] = surround_encoder unless @copy_audio.empty?
1179
1234
  bitrates = bitrates.join(',')
1180
1235
  handbrake_options['ab'] = bitrates if bitrates.gsub(/,/, '') != ''
1181
1236
  mixdowns = mixdowns.join(',')
@@ -5,5 +5,5 @@
5
5
  #
6
6
 
7
7
  module VideoTranscoding
8
- VERSION = '0.23.0'
8
+ VERSION = '0.24.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.23.0
4
+ version: 0.24.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: 2019-02-10 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Video Transcoding is a package of tools to transcode, inspect