opus
Posted 朱韦刚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opus相关的知识,希望对你有一定的参考价值。
(一):先给个opus的官网链接:https://www.opus-codec.org/。
其中有三部分:libopus 1.3.1,Opus-tools,Opusfile。
1:libopus :是opus编解码的源码和可执行文件。(注意:这里编码出来的opus文件是播放不了的,并且解码也必须用那种播放不了的opus文件,后面解释为什么)。
2:Opus-tools:是个工具包含了opus编码解码所需的东西还有最重要的是(里面包含了libogg):
https://www.opus-codec.org/docs/opus-tools/opusenc.html。(opusenc (.wav to .opus))。将wav编码并转成可播放的opus。
https://www.opus-codec.org/docs/opus-tools/opusdec.html。(opusdec (.opus to .wav))。将可播放的opus转换成wav。
3:Opusfile:是个能把可播放的opus文件解码成wav的工具。并且能分析出这个可播放的opus文件的信息(里面包含了libogg)。
(二):这里先看个格式(ogg)
什么是ogg呢?一句话概括 它是一个自由且开放标准的多媒体文件格式,由Xiph.Org基金会所维护。Ogg格式并不受到软件专利
的限制,并设计用于有效率地流媒体和处理高质量的数字多媒体。“Ogg”意指一种文件格式,可以纳入各式各样自由和开放源代码的
编解码器,包含音效、视频、文字(像字幕)与元数据的处理。
百科上这短短的几句话,就把ogg概括了,通俗一点说,他就是一种可以任意单位或个人使用的免费的多媒体格式。这里所说的多媒体,就是指所有可以传播信息的载体,强大,真够强大的。
它这种容器都支持什么编码格式呢?下面的百科表很清晰的给出了答案
音频
有损
Speex:以低比特率处理语音数据(〜2.1-32 kbit / s /通道)
Vorbis:处理中高级可变比特率(每通道≈16-500kbit / s)的一般音频数据
Opus:以低和高可变比特率处理语音,音乐和通用音频(每通道≈6-510kbit / s)
无损
FLAC:处理文件和高保真音频数据。
未压缩
OggPCM:处理未压缩的PCM音频。它与WAV大致相当[5]。
视频
有损
Theora:基于On2的VP3,它的目标是与MPEG-4视频(例如,使用DivX或Xvid编码),RealVideo或Windows Media Video进行竞争。
Daala:正在开发的视频编码格式。
Dirac:由BBC开发的免费开放视频格式。使用小波编码[6]。
Tarkin:实验项目,现在过时的视频编解码器在2000年,2001年和2002年开发利用离散小波变换的三个维度的宽度,高度和时间。[7][8][9]。在Theora成为视频编码的主要焦点之后,已被搁置(2002年8月)[10]。
无损
Dirac:Dirac规范的一部分涵盖无损压缩。
Daala:正在开发的视频编码格式。
文本
Writ:用于嵌入字幕或字幕的文本编解码器的草稿不完整,于2007年停止[11]。
CMML:用于定时元数据,字幕和格式的文本/应用编解码器。
Annodex:CSIRO开发的免费开源标准,用于注释和索引网络媒体。
OggKate:最初设计用于卡拉OK和文本的重叠编解码器,可以在Ogg中复用。
参考链接:
1 https://www.cnblogs.com/dylancao/p/8303418.html
2 https://zh.wikipedia.org/wiki/Ogg
3 https://www.xiph.org/
4 https://www.xiph.org/downloads/
(三)可播放opus和不可播放opus文件问题
1:通过上面的ogg格式的了解可以看出,ogg文件里面包含了opus编码的音频,相当于MP4里面包含了aac。
2:那不可播放的opus就是只有编码层opus数据的音频,可播放的就是只有opus编码的音频外部套用了一层ogg的封装。
3:后缀名的问题,分为两种:可播放的opus文件后缀名可以是.opus,也可以是.ogg。不可播放的opus文件后缀名也是.opus。只能通过能否播放和mediainfo来查看。
不能播放的opus文件(没有ogg封装的只经过libopus编码的)
可以播放的opus文件(经过ogg封装的,Opus-tools编码的文件)
了解完上面的信息至今未发现能直接播放没有ogg包装的opus文件的播放器。未经过ogg包装的opus文件里面的编码信息网上也比较多,后续再做解析。
(四) opus_encode:opus_decode:length is frame_size*channels*sizeof(opus_int16),编码成s16的;输入的pcm也得是s16的;
opus_encode_float:opus_decode_float: length is frame_size*channels*sizeof(float),编码成float的。输入的pcm也得是float的;
如有错误请指正:
交流请加QQ群:62054820
QQ:379969650.
以上是关于opus的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 opus API 将 opus-fltp 转换为 opus-s16(或)将 opus-fltp 解码为 pcm