video_transcoding 0.20.1 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -0
- data/bin/transcode-video +39 -78
- data/lib/video_transcoding/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eee67d682d1fca2bcf4fc34cf8fe9e3c5d907af8a92bfb31f5d260378992f14c
|
4
|
+
data.tar.gz: a4dbf00b048a9e123d519dffe6b2ffdd99a7d44019ce39f4c95be83e5e5156e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91d460a5108997257acbbfab99d4249a492928d2b449314ad18f82159206332bc48283866c7e1f079ac766faf63ef4d00f3a5f6b87e8cb059c8a44f454896076
|
7
|
+
data.tar.gz: 1b23cf95baea10e7fa91f3fd88602de7864a2c33716a180cc9fa04e32cc4a87a7ea1654c053cc48c06489785289f89bef407e539f8315185a8c5ca06aaafc59a
|
data/README.md
CHANGED
@@ -689,6 +689,15 @@ For a few problematic videos, I have to apply options like `--force-rate 23.976
|
|
689
689
|
|
690
690
|
## History
|
691
691
|
|
692
|
+
### [0.21.0](https://github.com/donmelton/video_transcoding/releases/tag/0.21.0)
|
693
|
+
|
694
|
+
Friday, November 9, 2018
|
695
|
+
|
696
|
+
* Modify `transcode-video` to create "sparse" `.log` files by removing overwritten progress information, often making those files an order of magnitude (i.e. `10x`) smaller. Via [ #213](https://github.com/donmelton/video_transcoding/issues/213).
|
697
|
+
* Replace code in `transcode-video` which used `mkvpropedit` or `mp4track` in a post-transcoding step to sanitize audio titles containing commas, with much simpler code leveraging a comma escaping mechanism only available in `HandBrakeCLI` version 1.0.0 or later.
|
698
|
+
* Fix bug in `transcode-video` where the level was not set when using the `x264_10bit` encoder.
|
699
|
+
* Remove support the non-existent `x265_16bit` encoder in `transcode-video`. This might have been available last year in some development builds of `HandBrakeCLI`, but it's definitely not in any release.
|
700
|
+
|
692
701
|
### [0.20.1](https://github.com/donmelton/video_transcoding/releases/tag/0.20.1)
|
693
702
|
|
694
703
|
Sunday, October 21, 2018
|
data/bin/transcode-video
CHANGED
@@ -801,13 +801,12 @@ HERE
|
|
801
801
|
handbrake_options['title'] = title.to_s unless title == 1
|
802
802
|
encoder_options = {}
|
803
803
|
prepare_video(media, handbrake_options, encoder_options)
|
804
|
-
|
805
|
-
prepare_audio(media, handbrake_options, renamed_audio)
|
804
|
+
prepare_audio(media, handbrake_options)
|
806
805
|
prepare_subtitle(media, handbrake_options)
|
807
806
|
prepare_srt(media, handbrake_options)
|
808
807
|
prepare_options(handbrake_options, encoder_options)
|
809
808
|
transcode(handbrake_options)
|
810
|
-
adjust_metadata(handbrake_options['output']
|
809
|
+
adjust_metadata(handbrake_options['output'])
|
811
810
|
|
812
811
|
unless @dry_run
|
813
812
|
seconds = Time.now.tv_sec - seconds
|
@@ -901,7 +900,18 @@ HERE
|
|
901
900
|
end
|
902
901
|
|
903
902
|
encoder = @handbrake_options.fetch('encoder', 'x264')
|
904
|
-
return unless encoder =~ /^x264(?:_10bit)?$/ or encoder =~ /^x265(?:_1[
|
903
|
+
return unless encoder =~ /^x264(?:_10bit)?$/ or encoder =~ /^x265(?:_1[02]bit)?$/
|
904
|
+
|
905
|
+
case encoder
|
906
|
+
when 'x264'
|
907
|
+
handbrake_options['encoder-profile'] = 'high'
|
908
|
+
when 'x264_10bit'
|
909
|
+
handbrake_options['encoder-profile'] = 'high10'
|
910
|
+
when 'x265'
|
911
|
+
handbrake_options['encoder-profile'] = 'main'
|
912
|
+
when 'x265_10bit', 'x265_12bit'
|
913
|
+
handbrake_options['encoder-profile'] = 'main10'
|
914
|
+
end
|
905
915
|
|
906
916
|
if width > 1920 or height > 1080
|
907
917
|
encoder_level = '5.1'
|
@@ -917,19 +927,8 @@ HERE
|
|
917
927
|
bitrate = @target_bitrate_480p
|
918
928
|
end
|
919
929
|
|
920
|
-
|
921
|
-
when 'x264'
|
922
|
-
handbrake_options['encoder-profile'] = 'high'
|
923
|
-
|
924
|
-
if @handbrake_options.fetch('rate', '30').to_f <= 30.0
|
930
|
+
if encoder =~ /^x264(?:_10bit)?$/ and @handbrake_options.fetch('rate', '30').to_f <= 30.0
|
925
931
|
handbrake_options['encoder-level'] = encoder_level
|
926
|
-
end
|
927
|
-
when 'x264_10bit'
|
928
|
-
handbrake_options['encoder-profile'] = 'high10'
|
929
|
-
when 'x265'
|
930
|
-
handbrake_options['encoder-profile'] = 'main'
|
931
|
-
when 'x265_10bit', 'x265_12bit', 'x265_16bit'
|
932
|
-
handbrake_options['encoder-profile'] = 'main10'
|
933
932
|
end
|
934
933
|
|
935
934
|
if @target_bitrate.nil?
|
@@ -955,7 +954,7 @@ HERE
|
|
955
954
|
encoder_options['vbv-maxrate'] = ((bitrate * 1.5).to_i).to_s
|
956
955
|
encoder_options['vbv-bufsize'] = ((bitrate * 2).to_i).to_s
|
957
956
|
encoder_options['nal-hrd'] = 'vbr' if encoder =~ /^x264(?:_10bit)?$/
|
958
|
-
encoder_options['hrd'] = '1' if encoder =~ /^x265(?:_1[
|
957
|
+
encoder_options['hrd'] = '1' if encoder =~ /^x265(?:_1[02]bit)?$/
|
959
958
|
else
|
960
959
|
handbrake_options['quality'] = '1'
|
961
960
|
encoder_options['vbv-maxrate'] = bitrate.to_s
|
@@ -1011,7 +1010,7 @@ HERE
|
|
1011
1010
|
end
|
1012
1011
|
end
|
1013
1012
|
|
1014
|
-
def prepare_audio(media, handbrake_options
|
1013
|
+
def prepare_audio(media, handbrake_options)
|
1015
1014
|
return if @handbrake_options.fetch('audio', '') == 'none' or media.info[:audio].empty?
|
1016
1015
|
main_track = resolve_main_audio(media)
|
1017
1016
|
@audio_width[main_track] ||= @audio_width[:main]
|
@@ -1077,14 +1076,7 @@ HERE
|
|
1077
1076
|
name = ''
|
1078
1077
|
end
|
1079
1078
|
|
1080
|
-
name = @audio_name.fetch(track, name)
|
1081
|
-
|
1082
|
-
if name =~ /,/
|
1083
|
-
sanitized_name = name.gsub(/,/, '_')
|
1084
|
-
renamed_audio[sanitized_name] = name
|
1085
|
-
name = sanitized_name
|
1086
|
-
end
|
1087
|
-
|
1079
|
+
name = @audio_name.fetch(track, name).gsub(/,/, '","')
|
1088
1080
|
names << name
|
1089
1081
|
|
1090
1082
|
case @audio_width.fetch(track, @audio_width[:other])
|
@@ -1266,7 +1258,8 @@ HERE
|
|
1266
1258
|
end
|
1267
1259
|
|
1268
1260
|
Console.debug handbrake_command.inspect
|
1269
|
-
|
1261
|
+
log_file_path = handbrake_options['output'] + '.log'
|
1262
|
+
log_file = @log ? File.new(log_file_path, 'wb') : nil
|
1270
1263
|
Console.info 'Transcoding with HandBrakeCLI...'
|
1271
1264
|
|
1272
1265
|
begin
|
@@ -1286,9 +1279,27 @@ HERE
|
|
1286
1279
|
|
1287
1280
|
log_file.close unless log_file.nil?
|
1288
1281
|
fail "transcoding failed: #{handbrake_options['input']}" unless $CHILD_STATUS.exitstatus == 0
|
1282
|
+
|
1283
|
+
unless log_file.nil?
|
1284
|
+
timestamp = File.mtime(log_file_path)
|
1285
|
+
content = ''
|
1286
|
+
|
1287
|
+
begin
|
1288
|
+
File.foreach(log_file_path) do |line|
|
1289
|
+
content += line
|
1290
|
+
end
|
1291
|
+
rescue SystemCallError => e
|
1292
|
+
raise "reading failed: #{e}"
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
log_file = File.new(log_file_path, 'wb')
|
1296
|
+
log_file.print content.gsub(/^.*\r(.)/, '\1')
|
1297
|
+
log_file.close
|
1298
|
+
FileUtils.touch log_file_path, :mtime => timestamp
|
1299
|
+
end
|
1289
1300
|
end
|
1290
1301
|
|
1291
|
-
def adjust_metadata(output
|
1302
|
+
def adjust_metadata(output)
|
1292
1303
|
return if @dry_run
|
1293
1304
|
media = Media.new(path: output, allow_directory: false)
|
1294
1305
|
Console.debug media.info.inspect
|
@@ -1316,56 +1327,6 @@ HERE
|
|
1316
1327
|
|
1317
1328
|
fail "forcing subtitle: #{output}" if $CHILD_STATUS.exitstatus == 2
|
1318
1329
|
end
|
1319
|
-
|
1320
|
-
return if renamed_audio.empty?
|
1321
|
-
|
1322
|
-
media.info[:audio].each do |track, info|
|
1323
|
-
original_name = renamed_audio[info[:name]]
|
1324
|
-
|
1325
|
-
unless original_name.nil?
|
1326
|
-
if media.info[:mkv]
|
1327
|
-
Console.info 'Renaming audio with mkvpropedit...'
|
1328
|
-
|
1329
|
-
begin
|
1330
|
-
IO.popen([
|
1331
|
-
MKVpropedit.command_name,
|
1332
|
-
'--edit', "track:a#{track}",
|
1333
|
-
'--set', "name=#{original_name}",
|
1334
|
-
output,
|
1335
|
-
], 'rb', :err=>[:child, :out]) do |io|
|
1336
|
-
io.each do |line|
|
1337
|
-
Console.debug line
|
1338
|
-
end
|
1339
|
-
end
|
1340
|
-
rescue SystemCallError => e
|
1341
|
-
raise "renaming audio failed: #{e}"
|
1342
|
-
end
|
1343
|
-
|
1344
|
-
fail "renaming audio: #{output}" if $CHILD_STATUS.exitstatus == 2
|
1345
|
-
elsif media.info[:mp4]
|
1346
|
-
Console.info 'Renaming audio with mp4track...'
|
1347
|
-
|
1348
|
-
['hdlrname', 'udtaname'].each do |property|
|
1349
|
-
begin
|
1350
|
-
IO.popen([
|
1351
|
-
MP4track.command_name,
|
1352
|
-
'--track-index', track.to_s,
|
1353
|
-
"--#{property}", original_name,
|
1354
|
-
output,
|
1355
|
-
], 'rb', :err=>[:child, :out]) do |io|
|
1356
|
-
io.each do |line|
|
1357
|
-
Console.debug line
|
1358
|
-
end
|
1359
|
-
end
|
1360
|
-
rescue SystemCallError => e
|
1361
|
-
raise "renaming audio failed: #{e}"
|
1362
|
-
end
|
1363
|
-
|
1364
|
-
fail "renaming audio: #{output}" unless $CHILD_STATUS.exitstatus == 0
|
1365
|
-
end
|
1366
|
-
end
|
1367
|
-
end
|
1368
|
-
end
|
1369
1330
|
end
|
1370
1331
|
|
1371
1332
|
def terminate
|
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.
|
4
|
+
version: 0.21.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-
|
11
|
+
date: 2018-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
Video Transcoding is a package of tools to transcode, inspect
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
66
|
rubyforge_project:
|
67
|
-
rubygems_version: 2.7.
|
67
|
+
rubygems_version: 2.7.7
|
68
68
|
signing_key:
|
69
69
|
specification_version: 4
|
70
70
|
summary: Tools to transcode, inspect and convert videos.
|