将 Opus 转换为 AAC 的推荐设置

将 Opus 转换为 AAC 的推荐设置

我正在从 Youtube 下载一些音乐,似乎在大多数情况下(热门视频),质量最好的音频是 opus 文件。

我知道(1)Opus 是最新、更高效的编解码器,并且 (2) 不建议从一种有损编解码器转换为另一种有损编解码器。

但是,因为我想在 Windows/iOs/car 上使用同一个文件,即使用同一个容器,所以我想转换为 AAC 或 MP3。

我读过了这里您可以通过对目标编解码器使用更高的比特率在一定程度上减轻生成损失。

那么您会推荐使用什么设置(例如 ffmpeg)将 opus 文件转换为 AAC 以保持相同的音频质量(我知道这是主观的......)?

根据youtube-dl -F数据显示它是160kbs,但是下载时,MediaInfo 给出的是127Kbps的总比特率和48Khz的采样率。

对于 AAC 文件来说,192kbs 是个好选择吗?(我认为 AAC 无论如何都是比 MP3 更好的选择?)我知道对于 CD 或无损文件,VBR 是最推荐的,但对于从 Opus 转码,CBR 会更好吗?我应该保留 opus 文件的 48khz 采样率,还是将采样率降低到 AAC 的通常 44.1khz?

最后,youtube-dl 还可以下载 128 kbs 的 AAC 文件。鉴于 opus 更高效/更好,在相同比特率下质量会更高。但是将 opus 转码为 AAC(例如 192kbs/212kbs)是否会保持这种质量差异,或者转码(甚至更高的比特率)是否会引起伪影,从而导致 192kbs AAC 文件的音频质量实际上比 AAC 128kbs 文件更差?

编辑

让我解释一下为什么我在“概念上”难以理解如何确定转码的优化设置。

在大多数情况下,您从无损文件(例如 50Mb wav)开始,然后选择编码器设置以进行质量 (VBR) 或所需比特率 (CBR/ABR)。然后编码器会根据您选择的设置执行其魔术(丢弃听不见的信息、压缩等),然后为您提供较小的有损文件。为了便于讨论,假设 128kbs MP3 可能为 3Mb,顶级质量 VBR(即 lame 或 qaac 的最高设置)可能为 5-6Mb,320kbs CBR 可能为 7-8Mb。

但在本例中,源文件是 5Mb 128kbs 的 opus 文件。转码的第一步是先解码文件(解码为 PCM 流?),然后再以新格式进行编码。

那么我的理解是否正确,即最大信息文件中的数据不超过 5Mb,因此为了进行编码(如果不需要减小文件大小),我应该使用尽可能高质量的 VBR,或者可能使用高 CBR(256 或 320)来捕获 opus 文件中仍然存在的几乎所有信息。无论如何,生成的文件不会大于 5Mb,因为我假设在此过程中不会发明/生成任何新信息(我将在周末做一些实验来测试这一点)。

给出的第一个答案似乎暗示了这一点。

答案1

更一般地,我建议看一下FFmpeg 维基有关 AAC 编码的页面。在这里,您可以找到有关如何实现最佳质量的提示,其中包括:

  • 使用libfdk_aac编码器而不是内置编码器(编码器可以产生巨大的质量差异!)
  • 使用 VBR — 无需限制速率或浪费比特
  • 关闭高通滤波器,因为默认情况下,转换过程中会丢失一些高频

因此,下面的方法可以工作:

ffmpeg -i input.opus -c:a libfdk_aac -vbr 5 -cutoff 18000 output.m4a

这对任何人来说都应该是绝对透明的。你甚至可以使用它来-vbr 4检查是否可以检测到差异。我猜你不会。


更具体地说,你问:

最后,youtube-dl 还可以下载 128 kbs 的 AAC 文件。(…) 但将作品转码为 AAC (…) 是否会保持这种质量差异,或者转码 (…) 是否会产生伪影,从而使音频质量 (…) 实际上会更差?

这个问题问得好,但如果不进行正式的听力测试,我不知道该如何回答。

但是,如果你假设 128 kbps 的立体声 AAC 至少好的质量(但不是极好),如果听起来不错,您可以放弃任何转换并直接使用它。我想我会听听您直接下载的原始 Opus 和 AAC 样本,并尝试进行盲测 — 您能可靠地检测到差异吗?如果没有,那么只需使用 AAC 并省去转换。

附言:我用 Opus 和 AAC 两种格式听了 YouTube 上的几个音乐片段,我个人更喜欢 Opus——它似乎具有更多的高频空间感。但不要认为这是一个科学合理的结论!


最后,一个线程讨论类似的问题,在这里,一位用户认为 VBR 编码中存在更激进的心理声学整形,这可能会在再次编码有损文件时增强已经存在的伪影。他得出结论,高比特率的 ABR 可能更适合此类任务。

答案2

我只是问了自己同样的问题:

  1. 下载时,最佳质量是 Opus。强制使用其他格式将导致不可逆转的损失(如 Spek 中观察到的)
  2. 但是我的旧 MP3 仅支持 AAC,不支持 Opus
  3. 然后,简单地使用带有 -map_metadata 的 ffmpeg 将 Opus 转换为 AAC 同时保留 Youtube-dl 检索到的元数据将在 Windows 10 上失败,因为元数据是由 youtube-dl 写入 opus 文件的“流”部分,而不是“格式”部分。
  4. 因此,如果您想在 Windows 10 上将紧凑、高分辨率 Opus 库转换为可适合旧 MP3 的 AAC 库,您只能手动添加元数据。

除非...你使用以下批处理文件

@Echo off
SetLocal EnableDelayedExpansion
Set _InputPath=Opus\*.opus
Set _OutputPath=M4A_from_Opus
For %%A in (%_InputPath%) Do (
    FOR /F "tokens=* USEBACKQ" %%F IN (`ffprobe -v error -show_format -show_streams "%%A" ^| FINDSTR artist`) DO (
        SET ArtistLine=%%F
    )
    FOR /F "tokens=* USEBACKQ" %%F IN (`ffprobe -v error -show_format -show_streams "%%A" ^| FINDSTR title`) DO (
        SET TitleLine=%%F
    )
    FOR /F "tokens=* USEBACKQ" %%F IN (`ffprobe -v error -show_format -show_streams "%%A" ^| FINDSTR album`) DO (
        SET AlbumLine=%%F
    )
    for /F "tokens=2 delims==" %%b in ("!ArtistLine!") do (
        Set Artist=%%b
    )
    for /F "tokens=2 delims==" %%b in ("!TitleLine!") do (
        Set Title=%%b
    )
    for /F "tokens=2 delims==" %%b in ("!AlbumLine!") do (
        Set Album=%%b
    )
    Echo Converting %%A...
    ffmpeg -i "%%A" -c:a aac -b:a 160k -metadata artist="!Artist!" -metadata title="!Title!" -metadata album="!Album!" "%_OutputPath%/%%~nA".m4a
)
SET "_OutputPath="
SET "_InputPath="
SET ArtistLine=
SET AlbumLine=
SET TitleLine=
SET Artist=
SET Album=
SET Title=

答案3

与其说这是一个答案,不如说这是一个“专家”意见,不管它值不值得[我是一名音响工程师,但不是编码/算法专家]

对于 iOS/car,您只需让 iTunes 以 128k AAC 重新采样 - 该选项在 iTunes 本身中,它将为您的设备创建新版本 - 您永远不会听到差异,当然是在车内,并且只有在安静的环境中戴着非常昂贵的耳机从手机上听不到差异。

为了节省空间,窗户被压倒了……

在此处输入图片描述

如果要以“最大”尺寸存档,请使用 Apple 无损 [ALAC]。
它不会恢复已丢失的内容,但不会再丢失任何内容。

顺便说一句,iOS 本身现在可以播放 Opus 文件 [自 iOS 11 起] - 但我不知道这是通过 iTunes 还是仅作为流格式。

相关内容