other_video_transcoding 0.4.0 → 0.5.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: fa5db474ee387172ee779cd57befc925892dde23348ed6376cd35c416662576f
4
- data.tar.gz: bd15276c43996afe54cf1bd7ad0f52eb55e5f5a6c1d90ebd36721d206eb17205
3
+ metadata.gz: e5caa1866dd6d3035704fb8977f21d682291ebfd46a6496974399a6876b13d33
4
+ data.tar.gz: b7c206ee00b2162bfea7b9c27f7566c879225a32efcfbf7a09fd7a9fc88f8200
5
5
  SHA512:
6
- metadata.gz: 577dcc59ee2b7b2304ad59243abd5999851ed5a0407934eccfd25e59d320145428b40a86eb3f6938b30e6c45d2343cc20aa2b62f474e7b4d0c1dd9a99d8dc43e
7
- data.tar.gz: 053d07452a33c7d04239e8dee324ec954e08682607871cf8c79e2cdbf0cb6bbca0dff202e8464e2fe49f80c6e7a4adb50c3a9f815636e0fe786e7ac86829ddd6
6
+ metadata.gz: d1c667e8c485d1ab70a4c035aa53915365aa6225cab6487f0488c37fa99eb7632e1ffc262ab3f256a55d8e43c71caaa20ed1d8dd64194a275972dbc1c65dee38
7
+ data.tar.gz: a47799076252ff46103419e41def057edfc4e63ec299b477f2360f7aad0ed866c14d0ff5f5ac2f8a3d1aeaf7a40fc47a2e3f4d203bc88c128cd0ce893f6fd22d
@@ -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
@@ -16,7 +16,7 @@ module Transcoding
16
16
  class Command
17
17
  def about
18
18
  <<-HERE
19
- ask-ffmpeg-log 0.4.0
19
+ ask-ffmpeg-log 0.5.0
20
20
  Copyright (c) 2019-2020 Don Melton
21
21
  HERE
22
22
  end
@@ -18,7 +18,7 @@ module Transcoding
18
18
  class Command
19
19
  def about
20
20
  <<-HERE
21
- other-transcode 0.4.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
- @decoder_type = nil
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
- if arg == 'none'
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 '--cuvid' do
527
- Kernel.warn '**********'
528
- Kernel.warn 'Using deprecated option: --cuvid'
529
- Kernel.warn '**********'
530
- @decoder_type = :cuvid
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' and @decoder_type != :cuvid
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 '--[no-]nvenc-spatial-aq' do |arg|
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 = arg
653
+ @nvenc_spatial_aq = true
662
654
  end
663
655
 
664
- opts.on '--[no-]nvenc-temporal-aq' do |arg|
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 = arg
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
- if cuvid_decoder.nil?
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
- media_width = width
1647
- media_height = height
1648
- width = crop[:width]
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
- if cuvid_decoder.nil?
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 cuvid_decoder.nil?
1694
- if (@decode_scope == :vc1 and video['codec_name'] == 'vc1') or @decode_scope == :all
1695
- if @encoder =~ /vaapi$/
1696
- decode_options = [
1697
- '-hwaccel', 'vaapi',
1698
- '-hwaccel_device', '/dev/dri/renderD128',
1699
- '-hwaccel_output_format', 'vaapi'
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
- decode_options += ['-hwaccel', @decode_method]
1639
+ decode_method = @decode_method
1703
1640
  end
1704
- end
1705
- else
1706
- Kernel.warn "video decoder = #{cuvid_decoder}"
1707
1641
 
1708
- decode_options += [
1709
- '-c:v', cuvid_decoder
1710
- ] + cuvid_options
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')
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'other_video_transcoding'
3
- s.version = '0.4.0'
3
+ s.version = '0.5.0'
4
4
  s.required_ruby_version = '>= 2.0'
5
5
  s.summary = 'Other tools to transcode videos.'
6
6
  s.description = <<-HERE
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.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-02 00:00:00.000000000 Z
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: