2009/10/13

Everioの動画をMPEG4にお手軽変換できるワークフロー

動画撮影にはHDDビデオカメラのビクターEverio(GZ-MG77)を使っているのだが、これで撮れるMPEG2形式の動画ファイル、実はMacではそのまま扱えない。QuickTimeで再生できないし、当然、iMovieで使う事もできない。Apple純正のQuickTime用「MPEG2再生コンポーネント」なるものはあるが、EverioのMPEG2ファイルに関しては再生ができても音が出ないそうだ。Everioの音声コーデックに非対応ならしい。

というわけで、WindowsからMacに乗り換えて数ヶ月、動画を撮り貯めるばかりで、編集する事はもちろん、再生する事すらもできていなかったのだが、ようやく最近になって、このEverioの動画ファイルを扱える環境をMac上に整えた。と言っても、再生のためにVLCを、iMovieで読み込めるMPEG4への変換のためにffmpegXを、それぞれインストールしただけ。こんなに簡単ならもっと早く使い始めておけばよかった。

これらのツール、対応する動画/音声のフォーマットが豊富で、UIはシンプルで使いやすく、とにかく素晴らしく便利。そこで今回は、便利ついでにAutomatorでワークフローを作ってみた。
Automator画面
このワークフローでは、ffmpegXのアプリパッケージに含まれているffmpegというコマンドを利用している(っていうか、そもそもffmpegXはffmpegのGUIラッパーなので、ffmpegこそが本体なんだけど)。「選択されたFinder項目を取得」の後ろに、ffmpegを実行するための「シェルスクリプトを実行」をつないで、Finder用のプラグインとして保存。Finderで選択した動画ファイルをMPEG4に自動変換してくれる。
ちなみに、シェルスクリプトの中身を書き下すと以下のような感じ。
for f in "$@"
do
/Applications/ffmpegX.app/Contents/Resources/ffmpeg -i "$f" \
-vcodec mpeg4 -s 640x480 -aspect 4:3 -r 29.97 -b 4000k -qmin 2 -qmax 9 \
-acodec aac -ab 96k "$f".mp4
done
ffmpegにはかなり豊富なコマンドオプションが用意されているので、特に出力の各種パラメータについては色々とカスタマイズの余地がありそうだが、これで変換がお手軽にできるようになった。

ワークフローを作るのは初めてだったが、ちょー便利だな、これ。


[2010/03/22追記]
ちなみに、ワイド(16:9)で撮った動画を変換するために、
for f in "$@"
do
/Applications/ffmpegX.app/Contents/Resources/ffmpeg -i "$f" \
-vcodec mpeg4 -s 720x405 -aspect 16:9 -r 29.97 -b 4000k -qmin 2 -qmax 9 \
-acodec aac -ab 96k "$f".mp4
done
と、スクリプトの縦横比関連の指定("-s"と"-aspect")を変えたものも別途用意して使っている。

2009/10/05

Wiiリモコンでラジコン制御

Wiiリモコンを使ってArduinoを載せたラジコンを無線制御できるようにしてみた。
ラジコンとWiiリモコン
基板部分のアップ
と言っても直接つないでいる訳ではなく、MacBookを介して、Wiiリモコン⇔MacBookはBluetoothで、MacBook⇔ラジコン上のArduinoはXBee(Zigbee)で、それぞれつないでいる。プログラム上の問題がまだ色々とあるものの、実際に走行させてみる事もできた。Wiiハンドルを握って操作してると、『リアルマリオカート』な気分になれるかも。;-)

※走行させているシーンではないが、こんな感じで操作できる。


ちなみに、写真にある通り、GPS受信機や各種センサ(加速度、ジャイロ、デジタルコンパス)など、『操作』には必要ないものも色々と載せてあるが、これらのデータはMacBookで記録できるようにしてある。今後、走行させた時のデータを色々と取ってみる予定。目指せ『自動制御』!

2009/10/03

Arduino 0017で、Megaのアナログ入力ピン8〜15が使えないバグ

Arduino Megaでは16本のアナログ入力が使えるはずなのだが、自分の環境では何故か0番から7番のピンしか正常に使えなかった。8番から15番のピンを読み取った結果を見てみると、ただのノイズ、という感じ。
Arduino Forumを調べてみたら、ばっちり同じ問題に関する書き込みがあった。結局、Arduino IDE 0017のバグだったようだ。
Sorry guys, this will be fixed in Arduino 0018. In the meantime, you can edit hardware/cores/arduino/wiring_analog.c and change:

ADMUX = (analog_reference << 6) | (pin & 0x0f);

to:

ADMUX = (analog_reference << 6) | (pin & 0x07);

Arduino Forum - Trouble with Mega Anolog in port.
上記の通り修正したら問題なく使えるようになった。