玩式草子─ソフトウェアとたわむれる日々

第74回 「らじる☆らじる」をrtmpdumpで

この記事を読むのに必要な時間:およそ 5.5 分

番組情報書き込み機能の修正

録音ファイルをMP3形式からMP4形式に変更するに伴い,番組情報をタグに書きこむ処理にも修正が必要になりました。従来使っていたeyeD3というコマンドはMP3形式のタグ(ID3タグ)専用で,MP4形式のタグ(正確にはメタ・データ)は扱えません。そのため,新たにMP4形式のタグを操作するツールを調べてみたところ,灯台下暗し,Plamo Linuxにも収録しているmp4v2というソフトウェアに含まれているmp4tagsというコマンドが使えることに気づきました。

mp4tagsは文字通り,MP4形式のタグを操作するためのツールです。

$ mp4tags
mp4tags: You must specify at least one MP4 file.
usage mp4tags OPTION... FILE...
Adds or modifies iTunes-compatible tags on MP4 files.

      -help            Display this help text and exit
      -version         Display version information and exit
  -A, -album       STR  Set the album title
  -a, -artist      STR  Set the artist information
  -b, -tempo       NUM  Set the tempo (beats per minute)
  -c, -comment     STR  Set a general comment
  ...
  -z, -artistid    NUM  Set the artist ID
  -Z, -composerid  NUM  Set the composer ID
  -r, -remove      STR  Remove tags by code (e.g. "-r cs"
                        removes the comment and song tags)

ざっと確認したところ,eyeD3とほぼ同じ情報が書き込めるようなので,以前はradiru_id3.pyとしていたタグファイル書き込み用のコマンドをradiru_tag.pyに改名してMP4形式のタグを書き込むようにしました。mp4tagsは外部コマンドなのでsubprocessモジュール経由で利用しています。

48    def set_tag(file, tag):
49        import subprocess
50        mp4file = file.replace('.flv','.m4a')
51        filename = os.path.basename(mp4file)
52        date = filename.split("_")
53        mytitle = date[0] + '_' + tag['title'].encode('utf-8')
54        title = " -song '{}' ".format(mytitle)
55        album = " -album'{}' ".format(tag['album'].encode('utf-8'))
56        artist = " -artist '{}' ".format(tag['act'].encode('utf-8'))
57        if len(tag['contents']) > 0:
58            comment = " -comment '{}' ".format(tag['contents'].encode('utf-8'))
59            cmdlist = ['mp4tags ', file, title, album, artist, comment, mp4file]
60        else:
61            cmdlist = ['mp4tags ', file, title, album, artist, mp4file]
62    
63        cmd = "".join(cmdlist)
64        p = subprocess.call(cmd, shell=True)

録音ファイルの確認

これらの修正を加えたradiru_rec.pyとradiru_tag.pyを使って,⁠らじる☆らじる」の番組を録音してみました。

VLCでタグファイルの情報を確認すると,番組タイトルや出演者,楽曲情報等が正しく記録されているようです。

図1 VLCで録音したファイルのメディアデータを表示

図1 VLCで録音したファイルのメディアデータを表示

これらの情報は,mp4v2パッケージに含まれているmp4infoコマンドでも確認できます。

$ mp4info 2015-09-29-06-00_古楽の楽しみ-ヴィヴァルディの音楽-_002.m4a 
mp4info version 2.0.0
2015-09-29-06-00_古楽の楽しみ-ヴィヴァルディの音楽-_002.m4a:
Track	Type	Info
1	audio	MPEG-4 AAC LC, 3300.010 secs, 48 kbps, 48000 Hz
 Name: 古楽の楽しみ -ヴィヴァルディの音楽-(2)
 Encoded with: Lavf56.4.101
 Comments: 今谷和徳
- ヴィヴァルディの音楽 -(2)「バイオリンと弦楽合奏および通奏低音のための協奏曲 二長調
作品8 第11 RV.210」ヴィヴァルディ作曲
(11分50秒)
(バイオリン)エンリコ・カサッツァ
(合奏)ラ・マニフィカ・コムニタ
 ...

しばらく新しいスクリプトを使ってみたところ,予約状況をチェックするradiru_check.pyや予約を取り消すradiru_del.pyにも修正が必要なことがわかり,それらも合わせて更新して,⁠らじる☆らじる」録音用ツールのrtmpdump化が完了しました。

Adobe Flashでは音声の圧縮にHE-AAC形式を利用しています。HE-AACはMP3よりも後発のCODECで,MP3よりも圧縮率が高く,低いビットレートでも高音質なことを売りにしています。実際,15分の語学番組を録音したファイルのサイズを比べてみたところ,1/3程度にまで小さくなっているようです。

$ ls -lh
-rw-r--r-- 1 kojima users  15M  8月 28日  07:01 2015-08-28-06-45_ラジオ英会話_2015_08_020.mp3
-rw-r--r-- 1 kojima users 5.3M  9月  4日  07:01 2015-09-04-06-45_ラジオ英会話_2015_09_005.m4a

また,WMAで録音していた際に悩まされていた配信の遅延もほぼ無くなる共に,rtmpdumpには何分記録するかを指定するオプション(--stop)も用意されているので,mplayerのようにFIFOを使って外から終了させるような処理も不要になって,録音スクリプトの信頼性も高まったように感じます。

これならもっと早くに乗り替えててもよかったな,と思う反面,⁠壊れていないものを直すな」という考え方もあるので,判断は難しいところです(苦笑⁠⁠。

なお,今回紹介したradiru_rec.py等のスクリプトや処理に必要なrtmpdumpの新しいパッケージは筆者の日記のページに添付しておきますので,ご興味のある方はダウンロードしてお試しください。

OSC 2015 Tokyo/Fallへの出展のお知らせ

最後に少し話題が変りますが,10/24-25に東京,日野市の明星大学で開催されるオープンソースカンファレンス2015 Tokyo/FallにPlamo Linuxメンテナグループが出展することになりましたことを紹介します。

ブース展示には両日とも出展し,MacBookで動くPlamo Linuxの展示やlxc-plamoの紹介,インストールメディアの配布等を行う予定です。また初日(10/24)の11時からは,メンテナの松木さんがPlamo Linuxに関するセミナーを行います。

Plamo Linuxの主要メンテナも顔を揃えますし,配布するメディアには新バージョンとなるPlamo-6.0を収めようと鋭意作業を進めていますので,Plamo Linuxに興味ある方はぜひご来訪くださいませ。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html