いつも便利に使わせていただいております。
ver5.25でも駄目だったのでこのバージョン特有ではありませんが、trimオプションで設定した終端フレームを超えてエンコードされてしまいます。対策をご教示いただければ幸いです。ソースは77760フレームのtsファイル(stream=0:Video,1:Audio,2:Audio,3:Subtitle)です。ログでは74780フレームしか出力されていないように見えますが、出来上がった映像を見るとソースの終わりまでエンコードされています。
<オプション>
--vbrhq 0 --vbr-quality 29.5 --preset quality --lookahead 32 -c hevc --output-depth 10 --weightp --bref-mode each -b 3 --ref 6 --aq --aq-temporal --aq-strength 0 --input-analyze 60 -f mp4 --ssim --trim 360:77242 --input-res 1920x1080 --interlace auto --vpp-pmd apply_count=2,strength=90,threshold=120 --vpp-deband range=25,thre=10,dither=10 --vpp-yadif --avsync cfr --vpp-delogo LogoFdata.lgd,auto_fade=true,auto_nr=true,nr_value=3,nr_area=1
<ログ出力>
weighted prediction with B frames unsupported.
NVEncC (x64) 5.26 (r1786) by rigaya, Jan 31 2021 18:10:19 (VC 1928/Win/avx2)
OS Version Windows 10 x64 (18363)
CPU Intel Core i7-7700 @ 3.60GHz [TB: 4.15GHz] (4C/8T)
GPU #0: GeForce GTX 1650 (896 cores, 1635 MHz)[PCIe3x16][460.89]
NVENC / CUDA NVENC API 11.0, CUDA 11.2, schedule mode: auto
Input Buffers CUDA, 44 frames
Input Info avcuvid: MPEG2, 1920x1080, 30000/1001 fps
Trim 360-77242 [offset: 2]
AVSync vfr
Vpp Filters cspconv(nv12 -> yv12(16bit))
delgo:LogoFdata, auto_fade, auto_nr, nr_value=3, nr_area=1
yadif: mode auto
denoise(pmd): strength 90, threshold 120, apply 2, exp 1
deband: mode 1, range 25, threY 10, threCb 10, threCr 10
ditherY 10, ditherC 10, blurFirst no, randEachFrame no
cspconv(yv12(16bit) -> p010)
ssim (yv12(10bit))
Output Info H.265/HEVC main10 @ Level auto
1920x1080p 1:1 29.970fps (30000/1001fps)
avwriter: hevc => mp4
Encoder Preset quality
Rate Control VBR
Multipass 2pass-full
Bitrate 0 kbps (Max: 11520 kbps)
Target Quality 29.50
Initial QP I:20 P:23 B:25
VBV buf size auto
Lookahead on, 32 frames, Adaptive I, B Insert
GOP length 300 frames
B frames 3 frames [ref mode: each]
Ref frames 6 frames, MultiRef L0:auto L1:auto
AQ on
CU max / min auto / auto
Others mv:auto
Output #0, mp4, to 'Output.mp4':
Metadata:
encoding_tool : NVEncC (x64) 5.26
encoder : Lavf58.49.100
Stream #0:0: Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 29.97 fps, 240k tbn
[mpegts @ 000001fef766a1c0] PES packet size mismatch
[mpegts @ 000001fef766a1c0] Packet corrupt (stream = 1, dts = 288756962).
[mpegts @ 000001fef766a1c0] PES packet size mismatch
[mpegts @ 000001fef766a1c0] Packet corrupt (stream = 2, dts = 288756962).
[mp4 @ 000001fe96094680] Starting second pass: moving the moov atom to the beginning of the file
encoded 74780 frames, 119.69 fps, 1299.24 kbps, 386.45 MB
encode time 0:10:24, CPU: 11.0%, GPU: 51.3%, VE: 92.1%, VD: 27.0%, GPUClock: 2006MHz, VEClock: 1856MHz
frame type IDR 325
frame type I 325, avgQP 23.04, total size 12.07 MB
frame type P 21420, avgQP 23.15, total size 243.98 MB
frame type B 53035, avgQP 25.13, total size 130.41 MB
ssim/psnr/vmaf: SSIM YUV: 0.992127 (21.038637), 0.993517 (21.882319), 0.993217 (21.685948), All: 0.992540 (21.272870), (Frames: 74780)
--trim 360:77242だと76883フレームなので、74780フレームになってしまうのは確かに変ですね。
いただいたコマンドを試してみましたが、下記のように76883フレームエンコードされており、問題ない動作のように思います。
なんらかの理由で途中のフレームが落ちてしまっており、77242フレームに達するまでにファイルの終端に達していると思われます。途中、videoのstream0ではありませんが、"PES packet size mismatch; Packet corrupt"とでているのでこのあたりのせいかもしれません。
もしかすると、CPUでデコードするとよいかもしれませんので、一度--avswをつけてみていただけないでしょうか。(同じかもしれませんが…
[mpeg2video @ 000001afd767c480] Invalid frame dimensions 0x0.
[mpeg2video @ 000001afd767c480] Invalid frame dimensions 0x0.
weighted prediction with B frames unsupported.
NVEncC (x64) 5.27 (r1807) by rigaya, Feb 11 2021 19:05:54 (VC 1928/Win/avx2)
OS Version Windows 10 x64 (19042)
CPU Intel Core i9-7980XE @ 2.60GHz [TB: 4.50GHz] (18C/36T)
GPU #0: GeForce RTX 2070 (2304 cores, 1710 MHz)[PCIe3x16][461.40]
NVENC / CUDA NVENC API 11.0, CUDA 11.2, schedule mode: auto
Input Buffers CUDA, 44 frames
Input Info avcuvid: MPEG2, 1920x1080, 30000/1001 fps
Trim 360-77242 [offset: 4]
AVSync vfr
Vpp Filters cspconv(nv12 -> yv12(16bit))
delgo:BS11 1920x1080 v3, auto_fade, auto_nr, nr_value=3, nr_area=1
yadif: mode auto
denoise(pmd): strength 90, threshold 120, apply 2, exp 1
deband: mode 1, range 25, threY 10, threCb 10, threCr 10
ditherY 10, ditherC 10, blurFirst no, randEachFrame no
cspconv(yv12(16bit) -> p010)
ssim (yv12(10bit))
Output Info H.265/HEVC main10 @ Level auto
1920x1080p 1:1 29.970fps (30000/1001fps)
avwriter: hevc => mp4
Encoder Preset performance
Rate Control VBR
Multipass 2pass-full
Bitrate 0 kbps (Max: 11520 kbps)
Target Quality 29.50
Initial QP I:20 P:23 B:25
VBV buf size auto
Lookahead on, 32 frames, Adaptive I, B Insert
GOP length 300 frames
B frames 3 frames [ref mode: each]
Ref frames 6 frames, MultiRef L0:auto L1:auto
AQ on
CU max / min auto / auto
Others mv:auto
encoded 76883 frames, 347.54 fps, 2595.05 kbps, 793.60 MB
encode time 0:03:41, CPU: 3.1%, GPU: 71.8%, VE: 90.0%, VD: 74.3%, GPUClock: 1874MHz, VEClock: 1739MHz
frame type IDR 454
frame type I 454, avgQP 23.75, total size 35.97 MB
frame type P 21871, avgQP 24.21, total size 483.32 MB
frame type B 54558, avgQP 26.06, total size 274.30 MB
ssim/psnr/vmaf: SSIM YUV: 0.989078 (19.617173), 0.988851 (19.527787), 0.990350 (20.154660), All: 0.989253 (19.686938), (Frames: 76883)
こんなに早くお返事いただき、ありがとうございます。avswでやってみたところ、結果が微妙に変わるものの最後までエンコされることに変わりはありませんでした。avsyncでcfrを指定したのにvfrになってしまうのは、rigayaさんがご指摘の音声の破損が影響を与えているのでしょうか。ちなみに、当然ですがtrimを施したAvsを読み込めば正確に切り取ってくれるのですが、速度が半分ぐらいになってしまうんですよね・・・。
weighted prediction with B frames unsupported.
NVEncC (x64) 5.27 (r1807) by rigaya, Feb 11 2021 19:05:54 (VC 1928/Win/avx2)
OS Version Windows 10 x64 (18363)
CPU Intel Core i7-7700 @ 3.60GHz [TB: 4.20GHz] (4C/8T)
GPU #0: GeForce GTX 1650 (896 cores, 1635 MHz)[PCIe3x16][460.89]
NVENC / CUDA NVENC API 11.0, CUDA 11.2, schedule mode: auto
Input Buffers CUDA, 44 frames
Input Info avsw: mpeg2video(yv12)->nv12 [AVX2], 1920x1080, 30000/1001 fps
Trim 360-77242 [offset: 0]
AVSync vfr
Vpp Filters copyHtoD
cspconv(nv12 -> yv12(16bit))
delgo:LogoFdata, auto_fade, auto_nr, nr_value=3, nr_area=1
yadif: mode auto
denoise(pmd): strength 90, threshold 120, apply 2, exp 1
deband: mode 1, range 25, threY 10, threCb 10, threCr 10
ditherY 10, ditherC 10, blurFirst no, randEachFrame no
cspconv(yv12(16bit) -> p010)
ssim (yv12(10bit))
Output Info H.265/HEVC main10 @ Level auto
1920x1080p 1:1 29.970fps (30000/1001fps)
avwriter: hevc => mp4
Encoder Preset quality
Rate Control VBR
Multipass 2pass-full
Bitrate 0 kbps (Max: 11520 kbps)
Target Quality 29.50
Initial QP I:20 P:23 B:25
VBV buf size auto
Lookahead on, 32 frames, Adaptive I, B Insert
GOP length 300 frames
B frames 3 frames [ref mode: each]
Ref frames 6 frames, MultiRef L0:auto L1:auto
AQ on
CU max / min auto / auto
Others mv:auto
Output #0, mp4, to 'Output.mp4':
Metadata:
encoding_tool : NVEncC (x64) 5.27
encoder : Lavf58.49.100
Stream #0:0: Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 29.97 fps, 240k tbn
[mpegts @ 000001bdf850a1c0] PES packet size mismatch
[mpegts @ 000001bdf850a1c0] Packet corrupt (stream = 1, dts = 288756962).
[mpegts @ 000001bdf850a1c0] PES packet size mismatch
[mpegts @ 000001bdf850a1c0] Packet corrupt (stream = 2, dts = 288756962).
[mp4 @ 000001bd972a4680] Starting second pass: moving the moov atom to the beginning of the file
encoded 74778 frames, 90.92 fps, 1297.36 kbps, 385.88 MB
encode time 0:13:42, CPU: 16.3%, GPU: 76.9%, VE: 74.3%, VD: 5.6%, GPUClock: 2015MHz, VEClock: 1865MHz
frame type IDR 325
frame type I 325, avgQP 23.05, total size 12.09 MB
frame type P 21424, avgQP 23.16, total size 243.65 MB
frame type B 53029, avgQP 25.13, total size 130.14 MB
ssim/psnr/vmaf: SSIM YUV: 0.992152 (21.052338), 0.993534 (21.893564), 0.993233 (21.695985), All: 0.992562 (21.285660), (Frames: 74778)
avswでもダメでしたか…。avhw/avswは入力ファイルの破損にはほとんど対応できていないので、その影響かもしれないです。
なお、avsyncでcfrを指定したのにvfrになってしまうのは、avhw/avsw時に音ずれするという報告が多かったので、cfr指定時には、原則はcfrとしつつ、大きくずれそうな場合にvfrになるよう制御しているためです。
速度が半分になってしまうとのことで申し訳ありませんが、いまのところこうしたケースではavs経由で渡すほうが無難かと思います。
rigayaさま、色々とお付き合いいただきありがとうございました。tsファイルはMurdoc Cutterでチェックしてもエラーが検出されないので、NVencのログに出てくる音声の破損メッセージは何かの誤検出では?と期待したのですが残念です。avs読み込みでしのごうと思います。