かなり長く眠っていた地デジチューナFriioを引っ張り出して録画サーバにしようとあれこれやってみました。とりあえず録画は無事出来たのですが、若干音ずれがあるので先人たちに感謝しつつ忘れないようにMacやLinuxで修正してh264に変換するためのメモ。
使ったもの
- ffmpeg
- mp4creator
- mp4box
インストール
- Ubuntuではmedibuntuのリポジトリを追加して"apt-get install ffmpeg gpac mpeg4ip-server mpeg4ip-utils"
- MacOSXでは macportsを使って"port install ffmpeg mpeg4ip"してから"gpac"を手動インストール
- svn co https://gpac.svn.sourceforge.net/svnroot/gpac gpac
- cd cpac
- ./configure --disable-wx
- make
- sudo make install
使い方
かなり適当ですが以下の用な感じ。 shellかmakefileにしておくと便利
recfriio --b25 xx xx foo.ts
ffmpeg -threads 2 -i foo.ts -vcodec libx264 -vpre iphone -b 1200k -r 30000/1001 -map 0.0:0.0 -s 720x400 -aspect 16:9 -an tmp.mp4
ffmpeg -i foo.ts -acodec copy -map 0.1:0.0 -vn audio.aac
mp4creator -aac-profile=4 -create=audio.aac audio.mp4
ffmpeg -i audio.mp4 -acodec libfaac -ab 128k -ar 48000 audio-tmp.mp4
mp4box -add tmp.mp4#video:delay=300 -add audio-tmp.mp4#audio -new result.mp4
rm -f audio.aac audio.mp4 audio-tmp.mp4 tmp.mp4
ffmpeg -threads 2 -i foo.ts -vcodec libx264 -vpre iphone -b 1200k -r 30000/1001 -map 0.0:0.0 -s 720x400 -aspect 16:9 -an tmp.mp4
ffmpeg -i foo.ts -acodec copy -map 0.1:0.0 -vn audio.aac
mp4creator -aac-profile=4 -create=audio.aac audio.mp4
ffmpeg -i audio.mp4 -acodec libfaac -ab 128k -ar 48000 audio-tmp.mp4
mp4box -add tmp.mp4#video:delay=300 -add audio-tmp.mp4#audio -new result.mp4
rm -f audio.aac audio.mp4 audio-tmp.mp4 tmp.mp4
映像が先行している時は映像に逆なら音声にmp4boxのdelayオプションでmsを指定して適当に遅らせて微調整。音ずれがない時はmp4creatorでの出力先をtmp.mp4にする。人間というのは良くできているもので音と映像が数フレームでもずれると違和感を覚えるんですよね。
本当は映像もcopyで分離してmp4を作って使い慣れたHandBrakeを使いたかったのですが、ffmpegのバグで映像のcopyがソースによって失敗、音声もエンコードに失敗してしまうことがあるようです。
しかし音ずれ対策は自動では出来ないのかな。。。
ffmpegのプリセット
vpreのiphoneは古いiPod touchでも再生できるようにレベル低めで調整中。かなり適当ですが以下のような感じで~/.ffmpeg/libx264-iphone.ffpresetを作成。
coder=0
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8+partp4x4
me_method=full
subq=7
me_range=16
g=150
keyint_min=25
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=0
refs=1
directpred=1
trellis=0
flags2=-wpred-dct8x8+mbtree
wpredp=0
level=30
maxrate=1400k
bufsize=14000k
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8+partp4x4
me_method=full
subq=7
me_range=16
g=150
keyint_min=25
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=0
refs=1
directpred=1
trellis=0
flags2=-wpred-dct8x8+mbtree
wpredp=0
level=30
maxrate=1400k
bufsize=14000k
PCで見るために画質を追求するならビットレートを上げたりCABACの設定をした方がいいですが、とりあえずiPhone/iPadやPCでもちょっと視る程度にはワンセグよりも綺麗だし、AirVideoのディレクトリに放り込んでおけば外出先で低ビットレートに変換しながら見れます。
サーバにしているSheevaPlugでFriioを動かすのも少しはまったのですが、それは後日。ARM 1.2Ghzの実力を見てみたいのでffmpegでの変換にもいずれ挑戦。
追記: SheevaPlugにx264を入れffmpegをリコンパイルしてエンコードをしてみました。mpeg4で2.5fps, x264で0.4fps。ちょっと実用的な範囲を超えてしまっているようです。チューニングもですがFPUがないのはいたい模様。