SmallPeaches/DanmakuRender

[V5]容易出现“Failed to create Direct3D device” “Device creation failed”的问题

Closed this issue · 6 comments

系统环境
OS: Windows Server 2022
CPU: AMD 4650GE
GPU: 核显AMD Radeon Graphics
FFmpegVer. N-112728-g409b29d3f9-20231110
控制台输出:

frame=216001 fps=169 q=-0.0 Lsize= 2776475kB time=01:00:00.00 bitrate=6318.0kbits/s dup=1 drop=0 speed=2.82x
[2024-08-05 13:06:50,613][INFO]: 渲染完成: 直播回放\药儿哟-2024年08月04日23点27分.flv -> 直播回放(弹幕版)\药儿哟-2024年08月05日01点15分(弹幕版).mp4
[2024-08-05 13:06:50,614][INFO]: 正在渲染: 直播回放\药儿哟-2024年08月05日00点27分.flv
ffmpeg version N-112728-g409b29d3f9-20231110 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13.2.0 (crosstool-NG 1.25.0.232_c175b21)
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20231110
  libavutil      58. 32.100 / 58. 32.100
  libavcodec     60. 33.100 / 60. 33.100
  libavformat    60. 17.100 / 60. 17.100
  libavdevice    60.  4.100 / 60.  4.100
  libavfilter     9. 13.100 /  9. 13.100
  libswscale      7.  6.100 /  7.  6.100
  libswresample   4. 13.100 /  4. 13.100
  libpostproc    57.  4.100 / 57.  4.100
[Parsed_subtitles_0 @ 000001f941480b40] libass API version: 0x1701000
[Parsed_subtitles_0 @ 000001f941480b40] libass source: commit: e64390522d9501a2c7e6a51c31a5b2a1f3a35cd1-dirty
[Parsed_subtitles_0 @ 000001f941480b40] Shaper: FriBidi 1.0.13 (SIMPLE) HarfBuzz-ng 8.2.2 (COMPLEX)
[Parsed_subtitles_0 @ 000001f941480b40] Using font provider directwrite (with GDI)
Input #0, flv, from '直播回放\药儿哟-2024年08月05日00点27分.flv':
  Metadata:
    displayWidth    : 1920
    displayHeight   : 1080
    fps             : 60
    profile         :
    level           :
    videocodecreal  : 0
    cdn_ip          : 117.135.222.209
    Server          : Tengine
    Rawdata         :
    encoder         : Lavf60.17.100
  Duration: 00:47:43.52, start: 0.020000, bitrate: 4654 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080, 10240 kb/s, 60 fps, 60 tbr, 1k tbn
  Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp, 327 kb/s
[AVHWDeviceContext @ 000001f9435fca00] Failed to create Direct3D device
Device creation failed: -1313558101.
[2024-08-05 13:06:54,244][ERROR]: [WinError 2] 系统找不到指定的文件。: '直播回放(弹幕版)\\药儿哟-2024年08月05日00点27分(弹幕版).mp4'
Traceback (most recent call last):
  File "G:\AA弹幕投稿\render_only.py", line 125, in <module>
    main()
  File "G:\AA弹幕投稿\render_only.py", line 116, in main
    status, info = target_render.render_one(video=video, output=task['output'])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\AA弹幕投稿\DMR\Render\dmrender.py", line 101, in render_one
    output_info.size = os.path.getsize(output)
                       ^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen genericpath>", line 50, in getsize
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '直播回放(弹幕版)\\药儿哟-2024年08月05日00点27分(弹幕版).mp4'
渲染错误, [WinError 2] 系统找不到指定的文件。: '直播回放(弹幕版)\\药儿哟-2024年08月05日00点27分(弹幕版).mp4'

Plus,功能请求:希望能添加渲染错误重试的功能!

谢谢!

你把hwaccel args设置为空看看?

你把hwaccel args设置为空看看?

这个会导致极大的CPU消耗吗?看样子是相当于纯粹用cpu解码了诶qwq

应该不会,主要资源消耗还是在编码器,如果你想看看有什么其他可用解码器请参考这个:ffmpeg -codecs

应该不会,主要资源消耗还是在编码器,如果你想看看有什么其他可用解码器请参考这个:ffmpeg -codecs

编码我用的集成显卡进行编码,集显能有180fps到200fps的编码速度(

参数设置

    # 视频编码器,NVIDIA设置为h264_nvenc,AMD设置为h264_amf,CPU设置为libx264
    vencoder: hevc_amf
    # 视频编码器参数,默认恒定码率15Mbps
    vencoder_args: [-preset, veryslow, -crf, 16, -b:v, 6M]
    # 音频编码器
    aencoder: copy
    # 音频编码器参数,默认恒定码率320Kbps
    aencoder_args: [-b:a, 192K]

上cpu解码我看开销不小啊()

你可以先试下看看,或者找一下A卡有没有自带的硬件解码单元。

貌似找到办法了,hwaccel设置为d3d11va,不要设置为dxva(也就是hwaccels设置为auto的默认值)
新点的显卡可以试试d3d12va,调用DirectX12说不定会快点
占用方面,用auto(也就是dxva)编码速度本来是180fps(1080p,hevc_amf,5500Kbps),单个ffmpeg的cpu占用30%左右
用了d3d11va后,占用下降到了10%左右,效果显著