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

第62回 お家通信カラオケシステムを作ろう[その1]

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

前回までにノイズだらけのVHDカラオケをキャプチャするため,Windows環境でしか動かないUSBキャプチャボックスをLinux環境から遠隔操作する話をしてきました。

年経たVHDシステムは劣化も進んでいて再生不能なディスクがいくつもあったものの,USB経由にしたおかげでVHDプレイヤからのノイズがPCに影響することがなくなり,キャプチャ作業も安定に進むようになりました。

そうなると今度は,どんどん溜っていく動画ファイルをどう整理,活用したものかに頭を悩ますことになります。今回キャプチャしているのはビデオカラオケの動画なので,このデータを使って自前で通信カラオケのような仕組みが作れないかなぁ……,と考えてみることにしました。

楽曲ファイルの切り出し

今回のキャプチャではVHDの片面1時間を1つの動画ファイルにしているので,カラオケのように使うにはこの動画ファイルを曲単位に分割する必要があります。この手の動画編集ソフトはWindowsの方が揃っているだろうなぁ,と思いつつ,使いなれているLinux環境で処理した方が便利だろうと考えて,avidemuxというツールを使ってみました。

図1 avidemuxの画面

図1 avidemuxの画面

avidemuxはGPLで公開されているフリーソフトウェアで,Linuxだけでなく,たいていのUNIX系OSやWindowsでも動作する動画編集ソフトウェアです。ざっとイジってみたところ,それほど凝った編集機能は無いものの,読みこんだ動画ファイル内に任意の始点と終点を指定して,その間を別ファイルに切り出す,といった作業は十分こなせます。また,ファイルのCODECを変えない「コピーモード」で切り出せば,始点,終点のみを再エンコードするだけで,切り出し作業も軽快に進みます。

MPEG形式に代表される非可逆圧縮の動画データの場合,画面の完全な情報は場面が大きく書き変わる「キーフレーム」のみに記録し,その他の画面はキーフレームとの差分情報のみを記録するような手法を用いてデータを圧縮しています。そのため,キーフレームとは異なるタイミングで切り貼りしようとすると,画面を構成するために必要な情報を前後のキーフレームから探して再構成する必要があります。昔は,そのあたりの処理にずいぶん時間がかかって,単純な切り出し作業すら苦痛に感じるような動画編集ソフトもありました。

VHDカラオケをキャプチャした動画ファイルは,"8140-1.mpg"のように各ディスクのID番号に表裏を示す数字を付加したファイル名にしています。この動画ファイルから一曲目を切り出して,"8140-1-01_むらさき雨情.mpg"というファイルにしようとしたところ,ファイル名の文字コードはUTF-8になってしまいました。

図2 保存したファイル名がUTF-8になる

図2 保存したファイル名がUTF-8になる

あれれ,と思って,avidemuxの設定メニュー等を調べてみても,ファイル名の文字コードを指定するような機能は無さそうです。いざとなったらシェルスクリプトでファイル名の文字コードを変えるか…,と思いつつ,ざっとavidemuxのソースコードを眺めてみることにしました。

ソースコードをざっと調べたところ,avidemuxはLinuxやBSD UNIXさらにはWindowsでも動くように設計されているため,汎用的な処理をする部分とOS環境に依存するユーザインターフェイス部,さまざまな動画フォーマットに対応するためのCODEC処理部等が分離され,大規模なものの見通しのよい作りになっていました。

"filename"等をキーワードにソースコードをgrepしてみたところ,avidemux/common/gui_main.cppというファイルが動画ファイルの読み書き等の主要な処理を行っているようです。

このソースコードをより詳しく眺めたところ,どうやらファイル名の文字コードをlocaleの設定に合わせて変換するような機能は存在していません。

その手の機能は実際のGUI画面を作る方にまかせているのだろうか…,と,GUIを操作するQt用のコードも調べてみましたが,こちらにもUTF-8からQt用の内部コードであるQStringに変換する処理しか用意されていないようです。

確かにファイルシステムの文字コードをUTF-8に決め打ちすれば,ファイル名をやりとりする際にlocaleを考慮する手間はなくなります。しかし,Plamo Linuxでは過去のしがらみからファイルシステムの文字コードはEUC-JPのままなので,iconvを使ってファイル名の文字コードをEUC-JPに変換するようなパッチをでっちあげました。

図3 ファイル名の文字コードをEUC-JPにするパッチ

図3 ファイル名の文字コードをEUC-JPにするパッチ

例のごとくの「とりあえず」パッチなものの,切り出したファイル名が文字化けせずに扱えると効率もあがり,作業が順調に進むようになりました。

このパッチ自体はファイル名の文字コードをEUC-JPに変換するだけというきわめてずさんな仕様のため公開しませんが,同様の問題に悩んでる人やよりよいパッチを作ってやろうと思っている人に協力を惜しむつもりはありませんで,興味ある方は筆者まで問い合わせてください。

集めた楽曲ファイルをカラオケシステムとして利用するには,曲名や歌手名から目的の楽曲ファイルに到達する必要があります。そのため,動画ファイルの切り出しと平行して,各楽曲のタイトルや歌手名をリスト化する作業も始めました。

VHDカラオケでは,各楽曲の冒頭に曲名と作詞者,作曲者の名前が表示され,末尾に歌手名が表示されます。切り出し作業と平行してそれらのデータをテキストファイルに拾っていくことにしました。

8140 & 1 & 01 & むらさき雨情 & 三浦康照 & 山口ひろし & 藤あや子 
8140 & 1 & 03 & あなたの隣を歩きたい & 坂口照幸 & 三木たかし & 都はるみ 
8140 & 1 & 04 & 虞美人草 & 鳥井実 & 深谷昭 & 長保有紀 
8140 & 1 & 06 & 酒がたり & 里村龍一 & 三木たかし & 山本譲二 
8140 & 1 & 07 & 陽だまり & 高村圭 & 山崎一稔 & マルシア 
 ...

各楽曲を切り出したファイルとそれらのデータを記録したファイルを,VHDカラオケ1枚ごとに用意したディレクトリに整理していきます。

$ ls 8140
8140-1-01_むらさき雨情.mpg            8140-2-03_おさえきれない_この気持.mpg
8140-1-03_あなたの隣りを歩きたい.mpg  8140-2-04_SAYONARA.mpg
8140-1-04_虞美人草.mpg                8140-2-05_Forever_My_Love.mpg
...
8140-2-02_時の扉.mpg                  8140.dat

方針が決まればあとはコツコツと作業を進めるだけです。再生状態の悪いディスクに悪態を吐きつつ,半年ほどで百数十枚のVHDディスクを整理することができました。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入