音声の勉強
mac標準アプリのquicktimeから音声を録音してみると、m4a
という拡張子のファイルが吐かれた。
M4Aファイルとは、音声データを記録するファイル形式の一つで、MPEG-4規格で定められたMP4ファイル形式を音声用に米アップル(Apple)社が独自に拡張したもの。
m4a
を馴染みのあるmp3
に変換してみる。実際mp3のほうが汎用性が高いらしい。
変換には、動画と音声を記録・変換・再生するためのツールであるffmpegを使う。
homebrewからインストール。
$brew install ffmpeg
$ffmpeg -version
ffmpeg version 5.0 Copyright (c) 2000-2022 the FFmpeg developers
-- 略---
$ffmpeg -i ~/Desktop/sample.m4a -ab 256k ~/Desktop/sample.mp3
コマンドから再生してみる。
ffplay ~/Desktop/sample.mp3
ついでにHLS用のファイルにも変換してみる。
HLS(=HTTP Live Streaming)は、Web上で動画や音声のストリーミング配信・再生を行なうためのプロトコル。HTTPベース。
動画や音声を10秒ごとのMPEG-2 TS(Transport Stream)形式のファイルに分割し、再生順などを記したプレイリスト形式のインデックスファイル(.m3u8ファイル)を作成する。
早速変換してみる。
ffmpeg -i sample.mp3 -c:a copy -f hls -segment_time 60 -hls_segment_filename "sample%5d.ts" sample.m3u8
sampple.m3u8がインデックスファイルで、**.tsが一定間隔で分割されたファイルたち。
ffmpeg -i baby.m4a -c:v copy -c:a copy -f hls -hls_list_size 0 -hls_time 5 baby.m3u8
-hls_time
でセグメントごとの秒数を指定。
ffplay baby.m3u8
で再生されてる様子も見れる。
[hls @ 0x7fb33271e980] Opening 'baby2.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby3.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby4.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby5.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby6.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby7.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby8.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby9.ts' for reading 0B f=0/0
[hls @ 0x7fb33271e980] Opening 'baby10.ts' for reading 0B f=0/0
m3u8の中身を見てみる。
cat baby.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.013333,
baby0.ts
#EXTINF:4.992000,
baby1.ts
#EXTINF:5.013333,
baby2.ts
#EXTINF:4.992000,
baby3.ts
#EXTINF:4.992000,
baby4.ts
#EXTINF:5.013333,
baby5.ts
#EXTINF:4.992000,
baby6.ts
#EXTINF:4.992000,
baby7.ts
#EXTINF:5.013333,
baby8.ts
#EXTINF:4.992000,
baby9.ts
#EXTINF:1.493333,
baby10.ts
#EXT-X-ENDLIST
EXTは共通の頭文字。
M3Uはm3u というプレイリストを格納するファイルフォーマットでそれのutf-8に対応したものがm3u8。
M3Uファイルは、一つ、または複数のメディアファイルのパスをプレーンテキスト(テキストファイル)で記述したものである。このファイルを、".m3u"または".m3u8"の拡張子で保存する。 M3UファイルのエンコードはWindows-1252の場合が多いものの、CP932に対応しているものも存在する。エンコードがUTF-8であることを明示するとき、拡張子M3U8を使用する。
EXT-X-VERSION :バージョン、
EXT-X-TARGETDURATION :セグメントファイルの秒数
EXT-X-MEDIASEQUENCE :何番目のコンテンツか
EXTINF :セグメントの秒数長さとファイルの位置