我遇到一个问题:当我远程连接到服务器然后关闭连接时,系统会注销我。这导致我的转换抛出错误,而以前并不会这样。你能帮忙吗?日志示例已附上。
您正在使用硬件编码,而问题出在您的显卡驱动上,它抛出了一个错误:
2019-06-20T22:21:59 MCEBuddy.AppWrapper.FFmpeg → [AVHWDeviceContext @ 000001d98ef0a6c0] Failed to create Direct3D device
2019-06-20T22:21:59 MCEBuddy.AppWrapper.FFmpeg → Device creation failed: -1313558101.
如果它直到最近都正常工作,那听起来像是您的显卡驱动被更新了,现在需要您登录系统才能工作。
2019-06-20T22:21:58 MCEBuddy.AppWrapper.FFmpeg → Starting process as a UISession process with Admin privileges. This requires atleast 1 user to be logged into the system (remote desktop or locally)
ERROR> 2019-06-20T22:21:58 → StartAppWithAdminPrivilegesFromNonUISession WTSQueryUserToken failed (No logged on users) with error 1008. An attempt was made to reference a token that does not exist.
WARNING> 2019-06-20T22:21:58 MCEBuddy.AppWrapper.FFmpeg → Unable to create UI Session process with Admin Privileges from NonUI Session. Is any user logged on?
WARNING> 2019-06-20T22:21:58 MCEBuddy.AppWrapper.FFmpeg → Retrying process creation as a NonUI Session process with Admin privileges
WARNING> 2019-06-20T22:21:58 MCEBuddy.AppWrapper.FFmpeg → Some functions like hardware encoding may not work in this mode
这与 MCEBuddy 无关,而是 Windows 因您的显卡驱动而产生的错误。
由于您使用的是自定义配置文件,并且在配置文件中明确禁用了软件编码器回退,因此当硬件编码器失败时,它不会尝试使用软件编码器:
ffmpeg-UsingHardwareEncoding=True
内嵌的 FFMpeg 版本有更新吗?我记得在尝试把自带的版本替换成最新构建时,也遇到过类似的错误。补充一下,我更新到 2.4.11 后也出现了同样的报错。我的显卡驱动已经很久没更新了……
我在您的日誌中看到完全相同的錯誤。電腦上是否有任何使用者登入?
我懷疑 ffmpeg 的硬體 API 與 handbrake 不同,需要使用者登入系統才能運作。
Handbrake 的硬體 API 似乎從 Windows 8.1 開始就不需要任何登入的使用者即可運作,我懷疑這對 ffmpeg 並不適用。
您可以試著在有使用者登入的情況下看看是否可行嗎?
在用户已登录的情况下运行正常
有一個使用者已登入,但我遠端連進那台機器,當我斷線時,我覺得系統會認為我已經登出了。
只要我一直保持登入,一切運作都很正常。
我想我已經把 Handbrake 設定好了,不過:
[MKV HVEC Beta Profile Constant Quality]
Description=WARNING: Handbrake Constant Quality encoding (26) with Nvidia HVEC.
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v hevc_nvenc -cq 26 -rc vbr -map 0:v
ffmpeg-audio=-acodec ac3 -ab 192k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 384k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=--decomb --denoise="weak" --loose-anamorphic --verbose=2 -T -O
handbrake-video=--start-at duration:0 --encoder nvenc_h265 --encoder-preset slow --quality 26 --vfr
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
Handbrake 不是已經設定好使用 NVENC HEVC 了嗎?
謝謝!Will。
你正在使用哪個作業系統?就 Handbrake 而言,我們知道 Windows XP–7 需要一個作用中的終端機,而 Windows 8–10 即使沒有作用中的終端機也能運作。
FFMPEG 則是另一回事,它使用另一組 API,不幸的是這些 API 需要使用者登入 Windows 並擁有作用中的終端機。
我不會深入技術細節,但這基本上是 Windows 的設計問題,因為其核心最初並非設計來存取硬體 API。微軟已經做出改進,因此 Handbrake 能夠在核心模式運作(MCEBuddy 預設以服務形式在核心模式執行),但 FFMPEG 的 API 仍然需要已登入的使用者與作用中的終端機。因此,如果你使用 MCEBuddy 與 ffmpeg,請確保終端機是作用中且不會登出。我相信 RDP 有個選項可以中斷連線而不登出——我認為那樣可以運作。
是的,但它不像 ffmpeg 那麼穩定,所以 MCEBuddy 不使用它,但你可以自行使用。效果因人而異(YMMV)。歡迎回報使用結果。
我运行的是当前版本的 Windows 10(1903)。我目前通过远程桌面登录到这台机器,一切似乎运行正常。我正在使用一个后处理批处理文件从 Plex 调用 MCEBuddy。
谢谢!Will。
[HEVC MP4]
Description=警告:使用 Nvidia HEVC 的 Handbrake 固定品質編碼(26)
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 9 -c:v hevc_nvenc -cq 26 -rc vbr -map 0:v
ffmpeg-audio=-acodec ac3 -ab 192k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 384k -map 0:a
ffmpeg-ext=.mp4
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=–decomb --denoise=“weak” --loose-anamorphic --verbose=2 -T -O
handbrake-video=–start-at duration:0 --encoder nvenc_h265 --encoder-preset slow --quality 26 --vfr
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mp4
handbrake-audiodelay=skip
我未登入時仍然無法運作。對於我上面使用的設定檔,有任何建議嗎?
我仍然遇到失败,尽管已经登录。我准备用网站上的最新版本替换 FFMpeg。
这是最近一次失败的日志:Microsoft OneDrive
根据 Windows 的反馈,当前没有已登录的用户,它找不到对已登录用户的引用:
StartAppWithAdminPrivilegesFromNonUISession WTSQueryUserToken 失败(没有已登录用户),错误代码 1008。试图引用一个不存在的令牌。
你可以尝试以下操作以确保有用户已登录:从开始菜单以命令行引擎方式启动 MCEBuddy。这将关闭作为服务运行的引擎,并改为从当前用户内部以命令行服务方式启动。如果用户注销,该服务将停止。
现在,作为已登录用户,ffmpeg 应该能够访问所有硬件 API。这将确认问题所在。
请注意,有报告称,如果你通过 RDP 远程登录 Windows,它将无法提供对所有硬件 API 的访问。最好先在本地登录,然后再远程连接到同一已登录用户。
非常感謝你的幫助——我會試試看。你知道有沒有辦法在不關閉 UAC 的情況下,從 shell:startup 執行命令列啟動?
再次感謝!Will。
您可以設定工作排程器在使用者登入時以最高權限啟動命令列引擎。
当然!我总是忘记这件事。谢谢你!