当前位置: 首页>>技术教程>>正文


conversion – 如何将声音文件转换为 Opus

,

问题描述

为了测试,我想将我必须的 MP3 和 WAV 文件转换为 Opus,这样做的步骤是什么?

最佳思路

在较新的 Ubuntu 版本中,Opus 编解码器包含在 libavcodec 库中,将与 ffmpeg 一起安装。然后完成音频编码

ffmpeg -i infile.ext <options> outfile.opus

opus-tools 附带的音频转换器可以将音频转换为原始、波形或 AIFF 格式。最小语法使用默认设置:

opusenc input.wav output.opus

我们可能希望使用选项 --bitrate N.nnn 添加更好的比特率作为默认的 96 kbps(对于所有选项,请参阅 opusenc 的联机帮助页)。

“即时”转换 mp3。即在不创建临时文件的情况下,我们可以将 ffmpeg 的输出通过管道传输到 opusenc,如下所示:

ffmpeg -i input.mp3 -f wav - | opusenc --bitrate 256 - output.opus

次佳思路

Ubuntu 14.04 和 Debian 8 在其存储库中附带了版本 9 的 libav-tools,它通过包 libopus0 对 Opus 提供了 内置 支持。

示例 1:将音频文件重新编码为作品

安装第 9 版 libav-toolslibopus0 后,您可以简单地执行以下操作:

avconv -i file.mp3 -map 0:a -codec:a opus -b:a 100k -vbr on file.opus

选项的作用

  • -i file.mp3 设置输入文件。

  • -map 0:a 将从输入文件 0 中选择所有音频流 (a)。在 https://libav.org/avconv.html#Advanced-options 上阅读有关 -map 的更多信息

  • -codec:a opus 为音频流选择 opus 编码器 ( a )。在 https://libav.org/avconv.html#Main-options 上阅读有关 -codec 的更多信息。

  • -b:a 100k 将音频的比特率设置为 100 kbit/s。在 https://libav.org/avconv.html#Codec-AVOptions 上阅读有关 -b 的更多信息

  • -vbr on 打开可变比特率。这是一个特定于 libopus 的选项。以下是 libopus 的所有选项:

    $ avconv -h full | grep opus -A 11
    avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
      built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
    libopus AVOptions:
    -application       <int>   E..A. Intended application type
       voip                    E..A. Favor improved speech intelligibility
       audio                   E..A. Favor faithfulness to the input
       lowdelay                E..A. Restrict to only the lowest delay modes
    -frame_duration    <float> E..A. Duration of a frame in milliseconds
    -packet_loss       <int>   E..A. Expected packet loss percentage
    -vbr               <int>   E..A. Variable bit rate mode
       off                     E..A. Use constant bit rate
       on                      E..A. Use variable bit rate
       constrained             E..A. Use constrained VBR
    
  • file.opus 设置输出文件。

示例 2:从视频文件中获取音频并将其编码为作品

取第一个输入( -map 0:1 )的第二个流,即音频流。使用 libopus 以 100 kbit/s 的速度对其进行编码,并开启可变比特率:

$ avconv -stats -i linuxactionshowep309-432p.mp4 -map 0:1 -c libopus -b 100k linuxactionshowep309-432p-audio-only.opus
avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
  built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'linuxactionshowep309-432p.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100
  Duration: 01:14:48.45, start: 0.042667, bitrate: 466 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 768x432 [PAR 1:1 DAR 16:9], 330 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s
Output #0, ogg, to 'linuxactionshowep309-432p-audio-only.opus':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.20.3
    Stream #0.0(und): Audio: libopus, 48000 Hz, stereo, flt, 100 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (aac -> libopus)
Press ctrl-c to stop encoding
size=   54360kB time=4488.47 bitrate=  99.2kbits/s    
video:0kB audio:53875kB global headers:0kB muxing overhead 0.900602%

安装包 mediainfo 后:

$ mediainfo linuxactionshowep309-432p-audio-only.opus
General
Complete name                            : linuxactionshowep309-432p-audio-only.opus
Format                                   : OGG
File size                                : 53.1 MiB
Duration                                 : 1h 14mn
Overall bit rate                         : 99.2 Kbps
Writing application                      : Lavf54.20.3
major_brand                              : isom
minor_version                            : 512
compatible_brands                        : isomiso2avc1mp41

Audio
ID                                       : 2104437746 (0x7D6F2BF2)
Format                                   : Opus
Duration                                 : 1h 14mn
Channel(s)                               : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 48.0 KHz
Compression mode                         : Lossy
Writing library                          : Lavf54.20.3

第三种思路

作品于 12.04

然而,在 12.04(精确)上,安装 opus 编解码器和工具存在依赖性问题,所以我发现迄今为止最好的解决方案是最近可用的解决方案:编译 opus 音频编码器和解码器 as noted here 并构建ffmpeg 通过将 --enable-opus 添加到 ffmpeg 的配置选项(如 compilation guide 中所列)来支持 opus。

我知道 ffmpeg 在 Ubuntu 中已被弃用,取而代之的是 Libav ,但编译是将功能齐全的 opus 编码器/解码器集成到 ffmpeg 本身的好方法。然后,您可以使用它来转换文件(首先转换为 wav),然后转换为 .opus 。与 libopus 和 ffmpeg 一起安装的文档将揭示可用于转换文件的所有选项。

编译后使用 ffmpeg 转换文件时,必须指定 -acodec libopus 否则 ffmpeg 将不使用 opus 编解码器:

ffmpeg -i pc.wav -ar 48000 -ac 2 -acodec libopus -ab 256k man.opus

然后,您可以测试使用创建的文件

ffplay man.opus

编译提示

此处无需完整复制 guide,但需要注意一两件事:

  • 您应该首先安装列出的依赖项(我从列表中省略了 yasm:请参阅我的第二点):

     sudo apt-get -y install autoconf build-essential checkinstall git libass-dev libfaac-dev libgpac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev librtmp-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev
    
  • 有一个问题需要指出: git build 似乎想要 yasm-1.2 ,而那是不可用的,因此您必须从 the official site 编译源代码,但这很简单。只需删除所有已安装的 yasm 版本,然后将下载的存档 cd 解压缩到文件夹中,运行 ./configure && make 然后运行 ​​sudo checkinstall 。如果任何其他构建需要早期版本,您可以删除此版本并安装存储库版本。

  • 在开始编译之前,必须删除任何现有的 libavffmpegx264libvpxfdk-aac 包。

  • 在构建 ffmpeg 之前编译和安装 x264fdk-aaclibvpxopus 至关重要,因为这些库将在构建中使用。

  • 运行 ffmpeg 编译时,不要忘记将 --enable-opus 添加到配置选项中。

  • opus编译的版本是1.1alpha,所以以后有新版本发布时可能需要再次re-compile opus库和ffmpeg。

  • 您可以使用 ffplay 播放您创建的任何作品文件。

第四种思路

我就是这样做的:

  • 首先,在音频文件所在的同一目录中打开一个终端。

  • 然后,键入以下命令:

$ opusenc --bitrate 320 --max-delay 10 "18 - Soul Asylum - Runaway Train (Album Version).flac" "18 - Soul Asylum - Runaway Train (Album Version).opus"

编辑:

对于发烧友:

$ opusenc --bitrate 510 --max-delay 10 "18 - Soul Asylum - Runaway Train (Album Version).flac" "18 - Soul Asylum - Runaway Train (Album Version).opus"

无需指定 --maxdelay 10 选项,因为 opusenc 默认执行此操作。

此文件转换的控制台输出 ( --bitrate 320 ):

    Encoding using libopus 1.1.2 (audio)
    -----------------------------------------------------
       Input: 44.1kHz 2 channels
      Output: 2 channels (2 coupled)
          20ms packets, 320kbit/sec VBR
     Preskip: 356

    Encoding complete   
    -----------------------------------------------------
           Encoded: 4 minutes and 22.4 seconds
           Runtime: 8 seconds
                    (32.8x realtime)
             Wrote: 10955530 bytes, 13120 packets, 13124 pages
           Bitrate: 317.691kbit/s (without overhead)
     Instant rates: 1.2kbit/s to 510.4kbit/s
                    (3 to 1276 bytes per packet)
          Overhead: 4.89% (container+metadata)

它超级快!少于 8 秒,复杂度为 10(编码计算复杂度(0-10,默认值:10)。零表示编码速度最快但质量较低,而 10 表示质量最高但编码速度较慢),最大延迟时间为 10 毫秒(以毫秒为单位的最大容器延迟(0-1000,默认值:1000)),因此如果您在一首歌曲中跳过时间,剪辑效果将持续 10 毫秒,因此无法察觉(尝试使用 1000 并用您的老鼠)。比特率默认为 VBR。 320kbps 对我有用,所以是可选的,玩这个数字:--bitrate N.nnn =>以 kbit/sec 为单位的目标比特率(每通道 6-256)

顺便说一句,从 MP3 编码到 OPUS 不是一个好主意,听起来不会更好,它们的压缩算法太不同了。但对于 FLAC 或 WAV 或任何其他无损音频格式,那就是另一回事了。

注意:要对另一个文件进行编码,只需在同一终端中按向上箭头以调用最后一个命令并更改输入和输出文件的名称。如果您正在寻找 ffmpeg/avconv GUI,也许 TraGtor 是您需要的。

您还可以使用 SpekAudacity 检查高比特率下无损和有损格式之间的频谱图差异。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12433.html,未经允许,请勿转载。