配置文件音频设置,选择了不正确的音效选项

我遇到一個奇怪的聲音問題:傳給 handbrake CLI 的聲音參數與設定檔不符。

這是我的設定檔:
[HEVC MKV - HB x265 10bit Q21med AC3 640]
Description=HEVC in MKV (H.265/AC3) conversion. Creates a smaller file (50% smaller than H.264) with comparable quality but very slow.
order=handbrake
handbrake-VideoOptimized=true
handbrake-general=–loose-anamorphic --verbose=2
handbrake-video=–start-at duration:0 -e x265_10bit --encoder-preset medium -q 21 --encoder-profile main10 --cfr
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 640 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=false

這是我在 log 裡看到 mcebuddy 實際傳給 CLI 的內容:

–loose-anamorphic --verbose=2 --start-at duration:0 -e x265_10bit --encoder-preset medium -q 21 --encoder-profile main10 --cfr -E ffac3 -R auto -B 192 -D 0 -a 1 -6 6ch

我已勾選「multi channel audio」,因此 AC3 已啟用,6ch 旗標也確實存在,但位元率卻取自 2 聲道的設定。我試過各種數值,結果都是:CLI 拿到的是 2 聲道的位元率,AC3 的位元率完全被忽略。

所以,在啟用多聲道的情況下:
handbrake-audio=-E ffac3 -R auto -B 640 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 129 -D 0 -a 1,2,3,4,5

實際會產生 6 聲道 AC3 音軌,位元率 640。CLI 收到的 -B 確實是 640;不論我怎麼改 AC3 的數值,都沒有影響,似乎完全被忽略。

奇怪的是,這個設定檔前幾週都跑得好好的。我為了找出畫質與檔案大小的甜蜜點,調整過各種參數,跑了約 50 部 Blu-ray remux 都正常。這幾天我大量實驗,可能不小心把錯誤的預設值寫進 HandBrake 或 FFmpeg,或者……我也不知道。我已升級到最新的 4.11 穩定版,並做了完整移除重裝(含 HB CLI),問題依舊。

我也試過 FFmpeg,但碰到 7.1 聲道就立即出錯;2 聲道在 8 與 10bit x265 下則正常。

又玩了一下 ffmpeg —— 還是一樣的問題。

ffmpeg-audio=-acodec ac3 -ab 256k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 640k -map 0:a

會卡住並報錯。Log 顯示傳給 ffmpeg 的參數變成錯誤的 bitrate -ab256 和 -ac 8,而 ac3 無法處理。

ffmpeg-audio=-acodec ac3 -ab 256k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 640k -map 0:a -ac 6

結果一樣,命令列裡還是 256 和 -ac 8。

ffmpeg-audio=-acodec ac3 -ab 640k -map 0:a -ac 6
ffmpeg-audioac3=-acodec ac3 -ab 640k -map 0:a

可以正常執行。

转换日志请

已發送。

[HEVC MKV - HB x265 10bit Q21med AC3 640 movie test]
Description=HEVC in MKV (H.265/AC3) conversion. Creates a smaller file (50% smaller than H.264) with comparable quality but very slow.
order=handbrake
handbrake-general=–loose-anamorphic --verbose=2
handbrake-video=–start-at duration:0 --encoder x265_10bit --encoder-preset fast -q 30 --encoder-profile main10 --cfr
handbrake-audio=-E eac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E eac3 -R auto -B 640 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=false

只是為了快速通過才用了這個,但幾乎立刻就終止了任務。

–loose-anamorphic --verbose=2 --start-at duration:0 --encoder x265_10bit --encoder-preset fast -q 30 --encoder-profile main10 --cfr --crop 0:0:0:0 -E eac3 -R auto -B 192 -D 0 -a 1,2,3,4,5 -6 6ch

這是日誌顯示傳給 CLI 的內容。

INFORMATION> 2019-06-09T00:59:13 MCEBuddy.Transcode.ConvertWithHandbrake → Setting up audio conversion parameters : -E eac3 -R auto -B 192 -D 0 -a 1,2,3,4,5

看起來它辨識到了多聲道音訊的勾選,但卻讀取了錯誤行的位元率。

[HEVC MKV - HB x265 10bit Q21med AC3 640 movie test]
Description=HEVC in MKV (H.265/AC3) conversion. Creates a smaller file (50% smaller than H.264) with comparable quality but very slow.
order=handbrake
handbrake-general=–loose-anamorphic --verbose=2
handbrake-video=–start-at duration:0 --encoder x265_10bit --encoder-preset fast -q 30 --encoder-profile main10 --cfr
handbrake-audio=-E eac3 -R auto -B 488 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E eac3 -R auto -B 640 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=false

產生的是這個。

–loose-anamorphic --verbose=2 --start-at duration:0 --encoder x265_10bit --encoder-preset fast -q 30 --encoder-profile main10 --cfr --crop 0:0:0:0 -E eac3 -R auto -B 488 -D 0 -a 1,2,3,4,5 -6 6ch

以及

INFORMATION> 2019-06-09T01:14:47 MCEBuddy.Transcode.ConvertWithHandbrake → Setting up audio conversion parameters : -E eac3 -R auto -B 488 -D 0 -a 1,2,3,4,5

您的文件包含的是 dts 音频而非 ac3 音频

音频编解码器 → dts

根据文档,当原始文件包含 ac3 音轨时,才会使用 <encoder>-audioac3 设置。由于当前并非 ac3 音轨,因此使用的是配置文件中 <encoder>-audio 这一行。

好的,这说得通。

我之前以为这是一个“万能”的环绕声设置。也就是说,如果没勾选“多声道”,就会使用 handbrake-audio 里的立体声设置;勾选了,就会把 handbrake-audioac3 里针对环绕声的设置传给 HandBrake。我没意识到音轨本身必须是 AC3 才起作用。

那……既然我的音频不是 AC3,到底是谁把 -6 6ch 标志写进去的?是 HandBrake 的默认行为,还是从 GUI 传过去的?如果音频不是 AC3,这个“多声道”复选框还有用吗?

多声道音频选项用于保留多声道音轨(无论使用何种音频编解码器),如果禁用该选项,音频将被下混为立体声。