[IT] フリーのオーディオフォーマット「Opus」 で遊んでみた / Win32
[IT] フリーのオーディオフォーマット「Opus」 で遊んでみた / Win32
同僚からオーパスが RFC 6716 になったよ!とチャター経由で教えて貰ってから妄想が膨らみ、帰宅直後に遊んでみました。
[amazon_enhanced asin=”4844329278″ container=”” container_class=”” price=”All” background_color=”FFFFFF” link_color=”000000″ text_color=”0000FF” /] [amazon_enhanced asin=”4873114829″ container=”” container_class=”” price=”All” background_color=”FFFFFF” link_color=”000000″ text_color=”0000FF” /] [amazon_enhanced asin=”4822296121″ container=”” container_class=”” price=”All” background_color=”FFFFFF” link_color=”000000″ text_color=”0000FF” /] [amazon_enhanced asin=”4774150673″ container=”” container_class=”” price=”All” background_color=”FFFFFF” link_color=”000000″ text_color=”0000FF” /]
詳細はコチラをどうぞ → http://sourceforge.jp/magazine/12/09/13/1237230
rfc http://tools.ietf.org/html/rfc6716
メモ:ナローバンド(狭帯域)なので、 無線通信にも使えそうと妄想したが、
The Opus codec scales from 6 kbit/s narrowband mono speech to 510 kbit/s fullband stereo music, with algorithmic delays ranging from 5 ms to 65.2 ms. At any given time, either the LP layer, the MDCT layer, or both, may be active. It can seamlessly switch between all of its various operating modes, giving it a great deal of flexibility to adapt to varying content and network conditions without renegotiating the current session. The codec allows input and output of various audio bandwidths, defined as follows: +----------------------+-----------------+-------------------------+ | Abbreviation | Audio Bandwidth | Sample Rate (Effective) | +----------------------+-----------------+-------------------------+ | NB (narrowband) | 4 kHz | 8 kHz | | | | | | MB (medium-band) | 6 kHz | 12 kHz | | | | | | WB (wideband) | 8 kHz | 16 kHz | | | | | | SWB (super-wideband) | 12 kHz | 24 kHz | | | | | | FB (fullband) | 20 kHz (*) | 48 kHz | +----------------------+-----------------+-------------------------+
なので、そうでもなかった。
—
■環境
- Windows 7 x64 Ultimate SP1
- CCYGWIN_NT-6.1-WOW64 1.7.15(0.260/5/3) 2012-05-09 10:25 i686 Cygwin
- WAV (PCM-Wave) ファイル作成:44.1KHz / 16bit / Stereo
→ 「お腹空いたね、ご飯食べに行こ!」とオッサンが囁く。( 620 KB (635,410 バイト) / 無圧縮) - オーパス入手: https://ftp.mozilla.org/pub/mozilla.org/opus/win32/opus-tools-0.1.5-win32.zip
—
■遊んでみた
0.導入時メモ
Wed Sep 19 19:18:06 /cygdrive/c/Users/yukio/Downloads/opus-tools-0.1.5-win32
yukio@Lets-note:$ sha256sum -c SHA256SUMS.txt
COPYING.txt: OK
opusdec.exe: OK
opusdec.html: OK
opusenc.exe: OK
opusenc.html: OK
opusinfo.exe: OK
opusinfo.html: OK
README.txt: OK
ハッシュ値は問題なし!
↓
yukio@Lets-note:$ gpg –verify SHA256SUMS.txt.asc
gpg: WARNING: using insecure memory!
gpg: please see http://www.gnupg.org/faq.html for more information
gpg: Signature made Wed Sep 5 03:08:00 2012 JST using RSA key ID B1441DEF
gpg: Can’t check signature: public key not found
うわ!署名整合なしwwww
遊ぶだけなら、別にいいか、な。(自己責任でやってね!
—
1.まずはオプション引数なしで実行した。
yukio@Lets-note:$ ./opusenc.exe gohan.wav gohan.opus ← エンコード 入力ファイル名 出力ファイル名
Encoding using libopus 1.0.1-rc3 (audio)
—————————————————–
Input: 44.1kHz 2 channels
Output: 2 channels (2 coupled)
20ms packets, 96kbit/sec VBR
Preskip: 356
Encoding completee+004x realtime, 99.25kbit/s
—————————————————–
Encoded: 3.62 seconds
Runtime: 1e-006 seconds
(3.62e+006x realtime)
Wrote: 46631 bytes, 181 packets, 6 pages
Bitrate: 101.94kbit/s (without overhead)
Rate range: 73.6kbit/s to 164.4kbit/s
(184 to 411 bytes per packet)
Overhead: 1.08% (container+metadata)
—
RFC の定義では、
o 8-12 kbit/s for NB speech, o 16-20 kbit/s for WB speech, o 28-40 kbit/s for FB speech, o 48-64 kbit/s for FB mono music, and o 64-128 kbit/s for FB stereo music.
Opus 引数はそれぞれの目的にあった可変エンコードが推奨されている。
—
2.入出力例
入力ファイル 620 KB (635,410 バイト) に対し、出力ファイル 45.5 KB (46,631 バイト)である。
エンコード情報出力は、パケット数、ページ数も表示される。
通常のエンコードならばビットレートや圧縮率、可変ビットレートなどの情報のはず、
—
3.バイナリエディタでヘッダだけ参照
まずは、WAV ファイル(ものの見事にスカスカ)
↓
次に Opus オーパス形式(どのライブラリで符号化されたのか情報入り)
—
RFC の定義では
table-of-contents (TOC) header
0 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ | config |s| c | +-+-+-+-+-+-+-+-+ Figure 1: The TOC Byte
であるが、そこまで細分化チェックを目的としていないので、すみません。
—
4.OPUS 情報と妥当性チェックを実施。
yukio@Lets-note:$ ./opusinfo gohan.opus
Processing file “gohan.opus”…
New logical stream (#1, serial: 000028f5): type opus
Encoded with libopus 1.0.1-rc3
User comments section follows…
ENCODER=opusenc from opus-tools 0.1.5
Opus stream 1:
Pre-skip: 356
Playback gain: 0 dB
Channels: 2
Original sample rate: 44100Hz
Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min)
Page duration: 1000.0ms (max), 905.0ms (avg), 620.0ms (min)
Total data length: 46631 bytes (overhead: 1.08%)
Playback length: 0m:03.599s
Average bitrate: 103.6 kb/s, w/o overhead: 102.5 kb/s
Logical stream 1 ended
完全に音声パケットとしてのフレーム情報を読んでいるような錯覚になるね。不思議!
—
5.エンコードしたものをデコードしてみよう
(符号化から復号化!)
yukio@Lets-note:$ ./opusdec gohan.opus gohan2.wav ← デコード 入力ファイル名 出力ファイル名
Decoding to 44100 Hz (2 channels)
Encoded with libopus 1.0.1-rc3
ENCODER=opusenc from opus-tools 0.1.5
Decoding complete.
ここでは、当初ファイルと区別するために gohan2.wav を出力してみた。
結果:620 KB (635,084 バイト)
—
6.ここまで遊び結果
元ファイル:「お腹空いたね、ご飯食べに行こ!」とオッサンが囁く。
WAV ( 620 KB (635,410 バイト) / 無圧縮)
標準エンコードファイル:「お腹空いたね、ご飯食べに行こ!」とオッサンが囁く。
OPUS (45.5 KB (46,631 バイト) / 圧縮)
デコードファイル:「お腹空いたね、ご飯食べに行こ!」とオッサンが囁く。
WAV 620 KB (635,084 バイト) 無圧縮?
↓
ヘッダ直後のバイナリデータが変化している。
が、無視できる程度。
—
RFC の定義では
+-----------------------+-----------+-----------+-------------------+ | Configuration | Mode | Bandwidth | Frame Sizes | | Number(s) | | | | +-----------------------+-----------+-----------+-------------------+ | 0...3 | SILK-only | NB | 10, 20, 40, 60 ms | | | | | | | 4...7 | SILK-only | MB | 10, 20, 40, 60 ms | | | | | | | 8...11 | SILK-only | WB | 10, 20, 40, 60 ms | | | | | | | 12...13 | Hybrid | SWB | 10, 20 ms | | | | | | | 14...15 | Hybrid | FB | 10, 20 ms | | | | | | | 16...19 | CELT-only | NB | 2.5, 5, 10, 20 ms | | | | | | | 20...23 | CELT-only | WB | 2.5, 5, 10, 20 ms | | | | | | | 24...27 | CELT-only | SWB | 2.5, 5, 10, 20 ms | | | | | | | 28...31 | CELT-only | FB | 2.5, 5, 10, 20 ms | +-----------------------+-----------+-----------+-------------------+
やはりモード目的別に帯域幅とフレームサイズをプリセットして使用するのが推奨されている。
—
■全然纏まっていないが
decode に関しての man example に興味深いことが掲載されているので取り上げる。
Decode a file input.opus to output.wav
opusdec input.opus output.wavPlay a file input.opus and force output at 48000 regardless of the original sampling rate
(48kHz output may be faster, due to avoiding resampling and some sound hardware produces higher quality output when run at 48kHz)
opusdec –rate 48000 input.opus
Re-encode a high bitrate Opus file to a lower rate
opusdec input.opus – | opusenc –bitrate 64 – output.opusPlay an http stream http://icecast.somwhere.org:8000/stream.opus with the help of curl on a system with pulseaudio
(press ctrl-c to quit)
curl http://icecast.somwhere.org:8000/stream.opus | padsp opusdec –
ということ。パルスオーディオと併用することで、オーパスの真価検証が出来そうな。
ref.) http://www.freedesktop.org/wiki/Software/PulseAudio
今日はここまで。
ではまたー。
以上