重要要求:错误报告必须 ZIP/附件上传转换日志(见下文)
请求类型:
BUG
MCEBuddy 版本及类型(32 位或 64 位):
2.4.7 x64
操作系统及类型(32 位或 64 位):
Windows 10 x64
问题或建议概述:
我有一批 MKV 文件,仅含一条 DTS 音轨。因使用 H264_NVENC 编码器,必须调用 ffmpeg 将这条 DTS 5.1 源码转码/下混为 AAC 2.0 与 AC3 5.1 两条输出音轨。
已在 profiles.conf 中配置相应 ffmpeg 音频参数:
ffmpeg-audio=-filter_complex "[0:a]asplit[2ch][6ch];[2ch]pan=stereo|FL=FC+0.6FL+0.2BL|FR=FC+0.6FR+0.2BR[aac]" -map [aac] -map [6ch] -c:a:0 libfdk_aac -cutoff 18000 -metadata:s:a:0 title="Stereo" -disposition:a:0 default -c:a:1 ac3 -metadata:s:a:1 title="Surround" -disposition:a:1 none
调试日志显示转换失败:
[AVFilterGraph @ 0000028a2c3d62e0] Unable to parse graph description substring: " -map"
复杂滤镜值必须放在引号内,这似乎是转换失败的原因。
复现步骤:
配置转换任务,通过 ffmpeg 将源 .MKV(单条非 AC3 的 5.1 音轨)转为 MP4,并转码/下混为两条输出音轨。示例 profiles.conf 任务设置(见“ffmpeg-audio=”部分):
[TV MP4 Video HQ NVENC]
Description=High profile, good quality 1 pass MP4 (H.264/Audio) NVENV (Constant Quality) conversion.
order=ffmpeg
ffmpeg-general=-threads 0
ffmpeg-video=-vcodec nvenc_h264 -profile:v main -level:v 4.0 -preset hq -rc vbr -qmin 10 -qmax 51 -refs 4 -bf 4 -g 300 -b:v 2500k -maxrate 3000k -bufsize 6000k -map 0:v -sws_flags lanczos -map_chapters -1 -map_metadata -1 -movflags +faststart -metadata:s:v title="" -sn
ffmpeg-audio=-filter_complex "[0:a]asplit[2ch][6ch];[2ch]pan=stereo|FL=FC+0.6FL+0.2BL|FR=FC+0.6FR+0.2BR[aac]" -map [aac] -map [6ch] -c:a:0 libfdk_aac -cutoff 18000 -metadata:s:a:0 title="Stereo" -disposition:a:0 default -c:a:1 ac3 -metadata:s:a:1 title="Surround" -disposition:a:1 none
ffmpeg-audioac3=-map 0:a -c:a:1 copy -metadata:s:a:1 title="Surround" -disposition:a:1 none -map 0:a -c:a:0 libfdk_aac -ab 128k -ar 48000 -ac 2 -cutoff 18000 -metadata:s:a:0 title="Stereo" -disposition:a:0 default
ffmpeg-ext=.mp4
ffmpeg-audiodelay=skip
PreConversionCommercialRemover=true
已附转换调试日志及示例源 MKV 的 mediainfo 输出(单条 DTS 音轨)(Salvation - S01E02 - Another Trip around the Sun.mkv.txt)
截图:
Salvation - S01E02 - Another Trip around the Sun.mkv-TV MP4 VBR Clip-2017-07-23T17-50-20.0727306-07-00.log.zip (677.7 KB)
Salvation - S01E02 - Another Trip around the Sun.mkv.txt (6.1 KB)
RBoy
(RBoy)
2
我拿了你的配置文件并进行了复现,这里没有遇到类似的问题,运行正常:
2017-07-24T16:20:13 MCEBuddy.AppWrapper.FFmpeg → Stream #0:0 → #0:0 (h264 (native) → h264 (nvenc_h264))
2017-07-24T16:20:13 MCEBuddy.AppWrapper.FFmpeg → Stream #0:1 → #0:1 (ac3 (native) → aac (libfdk_aac))
2017-07-24T16:20:13 MCEBuddy.AppWrapper.FFmpeg → Stream #0:1 → #0:2 (copy)
我认为你的问题在于你的文件编辑器没有以正确的字符编码(UTF-8)保存 profiles.conf,或者在保存时把你的某些字符转换成了 Unicode 扩展字符。
本质上,是你的文件编辑器出了问题。
我已確認我的 profiles.conf 檔案是 UTF-8 編碼。
在你的測試中,你是否使用了僅含一條非 AC3、6 聲道音軌的來源檔案(例如 DTS、DTS-HD 等)?你提供的日誌輸出顯示你的來源含有 AC3 音軌。在這種情況下,你的測試會參考設定檔中的「ffmpeg-audioac3=」設定,而非「ffmpeg-audio=」設定,而後者才是我目前遇到的問題所在。
作為參考,透過 CLI 執行 ffmpeg 會產生下列串流對應,正確使用 profiles.conf 中指定的濾鏡(即 ffmpeg-audio=-filter_complex “[0:a]asplit[2ch][6ch];[2ch]pan=stereo|FL=FC+0.6FL+0.2BL|FR=FC+0.6FR+0.2BR[aac]” -map [aac] -map [6ch] -c:a:0 libfdk_aac -cutoff 18000 -metadata:s:a:0 title=“Stereo” -disposition:a:0 default -c:a:1 ac3 -metadata:s:a:1 title=“Surround” -disposition:a:1 none)
Stream #0:1 (dca) -> asplit (graph 0)
Stream #0:0 -> #0:0 (h264 (native) -> h264 (nvenc_h264))
pan (graph 0) -> Stream #0:1 (libfdk_aac)
asplit:output1 (graph 0) -> Stream #0:2 (ac3)
RBoy
(RBoy)
4
既然你有非常特定的進階設定檔,我猜你可能不希望 MCEBuddy 去動你的參數。我建議你在設定檔裡試試這三個選項
ffmpeg-VideoOptimized=true
ffmpeg-AudioOptimized=true
ffmpeg-UsingHardwareEncoding=true
查看文件了解它們的運作方式。
好,我改用了一個 AAC 多聲道音訊檔案做測試(只改了一處:從 nvenc 換成軟體編碼器),結果得到另一個錯誤,看起來跟編碼器設定有關,但我仍然無法重現你原本那個像是 Unicode 錯誤的問題。在我的測試中,profiles.conf 檔案是以 UTF-16LE 格式儲存的。
這是我得到的:
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → Stream mapping:
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → Stream #0:0 (aac) → asplit (graph 0)
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → Stream #0:2 → #0:0 (h264 (native) → h264 (libx264))
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → pan (graph 0) → Stream #0:1 (libfdk_aac)
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → asplit:output1 (graph 0) → Stream #0:2 (ac3)
2017-07-25T11:18:21 MCEBuddy.AppWrapper.FFmpeg → Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
編輯:我用了雙音軌、非 AC3 的音訊檔案,會再試一次單音軌、非 AC3 的多聲道音訊檔案。
你的原始命令裡某處藏了一個非 ASCII 字元,清掉它錯誤就會消失。
RBoy
(RBoy)
5
使用单轨多声道音频文件时,无法复现同样的错误。该错误很可能是由于配置文件问题导致的;在我的示例视频中,视频是轨道 1,音频是轨道 0:
输入:
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Stream #0:00x100: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 5.1, fltp, 159 kb/s
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Stream #0:1[0x101]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
输出:
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Stream mapping:
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Stream #0:0 (aac) → asplit (graph 0)
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Stream #0:1 → #0:0 (h264 (native) → h264 (libx264))
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → pan (graph 0) → Stream #0:1 (libfdk_aac)
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → asplit:output1 (graph 0) → Stream #0:2 (ac3)
2017-07-25T11:33:08 MCEBuddy.AppWrapper.FFmpeg → Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
如果你仍然遇到与最初帖子相同的错误,请检查你的文件编码。
如建議所述,我已將「ffmpeg-AudioOptimized=true」加入我的設定檔。我的轉換任務中,凡是使用「ffmpeg-audio=」的(即任何非 AC3 音訊來源)現在都能正常運作。
今天上午的進一步測試發現,原始問題仍然存在於使用「ffmpeg-audioac3=」的轉換任務(AC3 來源媒體串流)。
RBoy
(RBoy)
7
您的命令行中包含扩展的非 ASCII 字符。请使用在线工具(如 http://www.ubertoolz.com/demo/CleanUp.php)清理这些非 ASCII 字符,即可正常运行。