other_video_transcoding 0.4.0 → 0.5.0
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/bin/ask-ffmpeg-log +1 -1
- data/bin/other-transcode +68 -105
- data/other_video_transcoding-0.4.0.gem +0 -0
- data/other_video_transcoding.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5caa1866dd6d3035704fb8977f21d682291ebfd46a6496974399a6876b13d33
|
4
|
+
data.tar.gz: b7c206ee00b2162bfea7b9c27f7566c879225a32efcfbf7a09fd7a9fc88f8200
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1c667e8c485d1ab70a4c035aa53915365aa6225cab6487f0488c37fa99eb7632e1ffc262ab3f256a55d8e43c71caaa20ed1d8dd64194a275972dbc1c65dee38
|
7
|
+
data.tar.gz: a47799076252ff46103419e41def057edfc4e63ec299b477f2360f7aad0ed866c14d0ff5f5ac2f8a3d1aeaf7a40fc47a2e3f4d203bc88c128cd0ce893f6fd22d
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
This single document contains all of the notes created for each [release](https://github.com/donmelton/other_video_transcoding/releases).
|
4
4
|
|
5
|
+
## [0.5.0](https://github.com/donmelton/other_video_transcoding/releases/tag/0.5.0)
|
6
|
+
|
7
|
+
Tuesday, November 24, 2020
|
8
|
+
|
9
|
+
* Add `--qsv-decoder` and `--qsv-device` options to `other-transcode`, both of which enable the scoped use of the Intel Quick Sync Video (QSV) decoder instead of the generic hardware decoder. These options can significantly speed operation of the QSV encoder, invoked via `--qsv`. It's recommended that `--decode all` be included when using these options to decode all video input formats. The `--qsv-device` option allows selection of specific hardware by number or path depending on platform. Please note that deinterlacing, cropping, scaling or using other filters will disable QSV's format-specific decoders.
|
10
|
+
* Remove all deprecated options and arguments from `other-transcode`.
|
11
|
+
|
5
12
|
## [0.4.0](https://github.com/donmelton/other_video_transcoding/releases/tag/0.4.0)
|
6
13
|
|
7
14
|
Sunday, November 1, 2020
|
data/bin/ask-ffmpeg-log
CHANGED
data/bin/other-transcode
CHANGED
@@ -18,7 +18,7 @@ module Transcoding
|
|
18
18
|
class Command
|
19
19
|
def about
|
20
20
|
<<-HERE
|
21
|
-
other-transcode 0.
|
21
|
+
other-transcode 0.5.0
|
22
22
|
Copyright (c) 2019-2020 Don Melton
|
23
23
|
HERE
|
24
24
|
end
|
@@ -102,6 +102,10 @@ Video options:
|
|
102
102
|
instead of generic hardware decoder
|
103
103
|
(default: enabled when using Nvidia video encoder,
|
104
104
|
disabled when using other encoders)
|
105
|
+
--qsv-decoder enable scoped use of Intel Quick Sync video decoder
|
106
|
+
instead of generic hardware decoder
|
107
|
+
--qsv-device DEVICE
|
108
|
+
enable scoped use of QSV decoder for specific device
|
105
109
|
HERE
|
106
110
|
end
|
107
111
|
|
@@ -310,7 +314,7 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
310
314
|
@preset = nil
|
311
315
|
@decode_scope = :vc1
|
312
316
|
@decode_method = nil
|
313
|
-
@
|
317
|
+
@qsv_device = nil
|
314
318
|
@target_2160p = nil
|
315
319
|
@target_1080p = nil
|
316
320
|
@target_720p = nil
|
@@ -498,15 +502,7 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
498
502
|
end
|
499
503
|
|
500
504
|
opts.on '--preset ARG' do |arg|
|
501
|
-
|
502
|
-
Kernel.warn '**********'
|
503
|
-
Kernel.warn 'Using deprecated `--preset` argument: none'
|
504
|
-
Kernel.warn '**********'
|
505
|
-
@preset = nil
|
506
|
-
else
|
507
|
-
@preset = arg
|
508
|
-
end
|
509
|
-
|
505
|
+
@preset = arg
|
510
506
|
@encoder = nil if @encoder == 'copy'
|
511
507
|
end
|
512
508
|
|
@@ -523,11 +519,13 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
523
519
|
@decode_method = arg ? 'cuda' : 'auto'
|
524
520
|
end
|
525
521
|
|
526
|
-
opts.on '--
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
522
|
+
opts.on '--qsv-decoder' do
|
523
|
+
@decode_method = 'qsv'
|
524
|
+
end
|
525
|
+
|
526
|
+
opts.on '--qsv-device ARG' do |arg|
|
527
|
+
@qsv_device = arg
|
528
|
+
@decode_method = 'qsv'
|
531
529
|
end
|
532
530
|
|
533
531
|
opts.on '--target ARG' do |arg|
|
@@ -584,7 +582,7 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
584
582
|
@deinterlace = true
|
585
583
|
@detelecine = false
|
586
584
|
@enable_filters = false
|
587
|
-
@encoder = nil if @encoder == 'copy'
|
585
|
+
@encoder = nil if @encoder == 'copy'
|
588
586
|
end
|
589
587
|
|
590
588
|
opts.on '--rate ARG' do |arg|
|
@@ -650,26 +648,14 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
650
648
|
@vt_allow_sw = true
|
651
649
|
end
|
652
650
|
|
653
|
-
opts.on '--
|
654
|
-
unless arg
|
655
|
-
Kernel.warn '**********'
|
656
|
-
Kernel.warn 'Using deprecated option: --no-nvenc-spatial-aq'
|
657
|
-
Kernel.warn '**********'
|
658
|
-
end
|
659
|
-
|
651
|
+
opts.on '--nvenc-spatial-aq' do
|
660
652
|
@encoder = @hevc ? 'hevc_nvenc' : 'h264_nvenc'
|
661
|
-
@nvenc_spatial_aq =
|
653
|
+
@nvenc_spatial_aq = true
|
662
654
|
end
|
663
655
|
|
664
|
-
opts.on '--
|
665
|
-
unless arg
|
666
|
-
Kernel.warn '**********'
|
667
|
-
Kernel.warn 'Using deprecated option: --no-nvenc-temporal-aq'
|
668
|
-
Kernel.warn '**********'
|
669
|
-
end
|
670
|
-
|
656
|
+
opts.on '--nvenc-temporal-aq' do
|
671
657
|
@encoder = @hevc ? 'hevc_nvenc' : 'h264_nvenc'
|
672
|
-
@nvenc_temporal_aq =
|
658
|
+
@nvenc_temporal_aq = true
|
673
659
|
end
|
674
660
|
|
675
661
|
opts.on '--nvenc-lookahead ARG', Integer do |arg|
|
@@ -1563,38 +1549,10 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1563
1549
|
end
|
1564
1550
|
|
1565
1551
|
def get_video_options(media_info, video, burn_subtitle, crop)
|
1566
|
-
if @decoder_type == :cuvid
|
1567
|
-
cuvid_decoder = case video['codec_name']
|
1568
|
-
when 'mpeg1video'
|
1569
|
-
'mpeg1_cuvid'
|
1570
|
-
when 'mpeg2video'
|
1571
|
-
'mpeg2_cuvid'
|
1572
|
-
when 'mjpeg'
|
1573
|
-
'mjpeg_cuvid'
|
1574
|
-
when 'mpeg4'
|
1575
|
-
'mpeg4_cuvid'
|
1576
|
-
when 'h264'
|
1577
|
-
'h264_cuvid'
|
1578
|
-
when 'vc1'
|
1579
|
-
'vc1_cuvid'
|
1580
|
-
when 'vp8'
|
1581
|
-
'vp8_cuvid'
|
1582
|
-
when 'vp9'
|
1583
|
-
'vp9_cuvid'
|
1584
|
-
when 'hevc'
|
1585
|
-
'hevc_cuvid'
|
1586
|
-
end
|
1587
|
-
else
|
1588
|
-
cuvid_decoder = nil
|
1589
|
-
end
|
1590
|
-
|
1591
|
-
cuvid_options = []
|
1592
|
-
|
1593
1552
|
if burn_subtitle.nil?
|
1594
1553
|
overlay_filter = nil
|
1595
1554
|
else
|
1596
1555
|
overlay_filter = "[0:#{burn_subtitle['index']}]overlay"
|
1597
|
-
cuvid_decoder = nil
|
1598
1556
|
end
|
1599
1557
|
|
1600
1558
|
deinterlace = @deinterlace
|
@@ -1613,11 +1571,7 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1613
1571
|
frame_rate_filter = nil
|
1614
1572
|
|
1615
1573
|
if deinterlace
|
1616
|
-
|
1617
|
-
frame_rate_filter = 'yadif=deint=interlaced' unless @encoder == 'copy'
|
1618
|
-
else
|
1619
|
-
cuvid_options += ['-deint:v', 'adaptive']
|
1620
|
-
end
|
1574
|
+
frame_rate_filter = 'yadif=deint=interlaced' unless @encoder == 'copy'
|
1621
1575
|
end
|
1622
1576
|
|
1623
1577
|
unless rate.nil?
|
@@ -1628,7 +1582,6 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1628
1582
|
|
1629
1583
|
if @detelecine
|
1630
1584
|
frame_rate_filter = 'fieldmatch=order=tff:combmatch=none,decimate'
|
1631
|
-
cuvid_decoder = nil
|
1632
1585
|
end
|
1633
1586
|
|
1634
1587
|
width = video['width'].to_i
|
@@ -1643,21 +1596,9 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1643
1596
|
if crop.nil? or (crop == {:width => width, :height => height, :x => 0, :y => 0})
|
1644
1597
|
crop_filter = nil
|
1645
1598
|
else
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
height = crop[:height]
|
1650
|
-
|
1651
|
-
if cuvid_decoder.nil?
|
1652
|
-
crop_filter = "crop=#{width}:#{height}:#{crop[:x]}:#{crop[:y]}"
|
1653
|
-
else
|
1654
|
-
crop_filter = nil
|
1655
|
-
top = crop[:y]
|
1656
|
-
bottom = media_height - (top + height)
|
1657
|
-
left = crop[:x]
|
1658
|
-
right = media_width - (left + width)
|
1659
|
-
cuvid_options += ['-crop:v', "#{top}x#{bottom}x#{left}x#{right}"]
|
1660
|
-
end
|
1599
|
+
width = crop[:width]
|
1600
|
+
height = crop[:height]
|
1601
|
+
crop_filter = "crop=#{width}:#{height}:#{crop[:x]}:#{crop[:y]}"
|
1661
1602
|
end
|
1662
1603
|
|
1663
1604
|
if @hevc
|
@@ -1672,14 +1613,8 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1672
1613
|
scale = [(max_width.to_f / width), (max_height.to_f / height)].min
|
1673
1614
|
width = ((width * scale).ceil / 2) * 2
|
1674
1615
|
height = ((height * scale).ceil / 2) * 2
|
1675
|
-
|
1676
|
-
|
1677
|
-
scale_filter = "scale=#{width}:#{height}"
|
1678
|
-
scale_filter += ':flags=bicubic' unless overlay_filter.nil?
|
1679
|
-
else
|
1680
|
-
scale_filter = nil
|
1681
|
-
cuvid_options += ['-resize:v', "#{width}x#{height}"]
|
1682
|
-
end
|
1616
|
+
scale_filter = "scale=#{width}:#{height}"
|
1617
|
+
scale_filter += ':flags=bicubic' unless overlay_filter.nil?
|
1683
1618
|
else
|
1684
1619
|
scale_filter = nil
|
1685
1620
|
end
|
@@ -1690,24 +1625,52 @@ Requires `ffprobe`, `ffmpeg` and `mkvpropedit`.
|
|
1690
1625
|
decode_options = []
|
1691
1626
|
end
|
1692
1627
|
|
1693
|
-
if
|
1694
|
-
if
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1628
|
+
if (@decode_scope == :vc1 and video['codec_name'] == 'vc1') or @decode_scope == :all
|
1629
|
+
if @encoder =~ /vaapi$/
|
1630
|
+
decode_options = [
|
1631
|
+
'-hwaccel', 'vaapi',
|
1632
|
+
'-hwaccel_device', '/dev/dri/renderD128',
|
1633
|
+
'-hwaccel_output_format', 'vaapi'
|
1634
|
+
]
|
1635
|
+
else
|
1636
|
+
if @decode_method == 'qsv' and @encoder != 'h264_qsv'
|
1637
|
+
decode_method = 'auto'
|
1701
1638
|
else
|
1702
|
-
|
1639
|
+
decode_method = @decode_method
|
1703
1640
|
end
|
1704
|
-
end
|
1705
|
-
else
|
1706
|
-
Kernel.warn "video decoder = #{cuvid_decoder}"
|
1707
1641
|
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1642
|
+
decode_options += ['-hwaccel', decode_method]
|
1643
|
+
|
1644
|
+
if decode_method == 'qsv' and
|
1645
|
+
overlay_filter.nil? and
|
1646
|
+
frame_rate_filter.nil? and
|
1647
|
+
crop_filter.nil? and
|
1648
|
+
scale_filter.nil?
|
1649
|
+
qsv_decoder = case video['codec_name']
|
1650
|
+
when 'av1'
|
1651
|
+
'av1_qsv'
|
1652
|
+
when 'h264'
|
1653
|
+
'h264_qsv'
|
1654
|
+
when 'hevc'
|
1655
|
+
'hevc_qsv'
|
1656
|
+
when 'mjpeg'
|
1657
|
+
'mjpeg_qsv'
|
1658
|
+
when 'mpeg2video'
|
1659
|
+
'mpeg2_qsv'
|
1660
|
+
when 'vc1'
|
1661
|
+
'vc1_qsv'
|
1662
|
+
when 'vp8'
|
1663
|
+
'vp8_qsv'
|
1664
|
+
when 'vp9'
|
1665
|
+
'vp9_qsv'
|
1666
|
+
else
|
1667
|
+
nil
|
1668
|
+
end
|
1669
|
+
|
1670
|
+
decode_options += ['-qsv_device', @qsv_device] unless @qsv_device.nil?
|
1671
|
+
decode_options += ['-c:v', qsv_decoder] unless qsv_decoder.nil?
|
1672
|
+
end
|
1673
|
+
end
|
1711
1674
|
end
|
1712
1675
|
|
1713
1676
|
if @encoder =~ /vaapi$/ and not decode_options.include?('-hwaccel')
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: other_video_transcoding
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.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: 2020-11-
|
11
|
+
date: 2020-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: " Other Video Transcoding is a package of tools to transcode videos.\n"
|
14
14
|
email: don@blivet.com
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- other_video_transcoding-0.3.0.gem
|
32
32
|
- other_video_transcoding-0.3.1.gem
|
33
33
|
- other_video_transcoding-0.3.2.gem
|
34
|
+
- other_video_transcoding-0.4.0.gem
|
34
35
|
- other_video_transcoding.gemspec
|
35
36
|
homepage: https://github.com/donmelton/other_video_transcoding
|
36
37
|
licenses:
|