Panasonic BL-C131 の録画 (2)

2010/10/04 by happybreeding Leave a reply »

続き。

さて、前回の方法でカメラからの動画と音声が保存できた。あとはこれをマルチプレクサにかけて単体の動画ファイルを得ればよい、というほど甘い話ではない。それでイケるのであれば、openRTSP自体にマルチプレクサが内蔵されているので、それを使えばよいだけの話。

まずは映像。これは普通のMPEG4なので、このままでも適当なプレイヤーソフトで再生できる。できるのだが、何故か微妙に早回しになってしまう。

これは、MPEG4のメタデータとしては、30fpsで記録してあることになっているものの、実際には、22.5fpsでしかないことに起因している。なのでフレームレートを変換してやる必要がある。たとえばmplayer(multimedia/mplayer)で再生するなら次のようにすれば、任意のフレームレートで再生できる。

mplayer -fps 22.5 video-MP4V-ES-2

再生するだけならこれでよいのだが、今回は、最終的に正しい動画ファイルを作成する必要があるので、変換した結果をファイルに落とさなければならない。

そこでFFmpegを使うわけなのだが、FFmpegは、通常の動画ファイルに対してフレームレートの上書きができない。例えば、次のようにしたとしても、フレームレートは変換されないのだ。1

ffmpeg -r 22.5 -i video-MP4V-ES-2 -vcodec mpeg1video -an video-MP4V-ES-2.mpg

ではどうするかというと、一旦rawvideo形式に変換する。rawvideoにしてしまうと、そのファイル中にはフレームレートとかのメタデータが含まれないので、そこから別の形式にエンコードするときには、コマンドラインで指定したものが有効になるからだ。

しかし、rawvideo形式だと、サイズが非常に大きくなるため、本当にファイルを作ってしまうと大変なことになる。そこで、2つのFFmpegをパイプで繋ぎ、一気に目的のフォーマットに再エンコードしてしまうとよい。例えば、x264なmp4にするなら、次のようにする。

ffmpeg -y -i video-MP4V-ES-2 -f rawvideo - | ffmpeg -y -s 640x480 -r 22.5 -f rawvideo -i - -vcodec libx264 -an -f mp4 video-MP4V-ES-2.mp4

2つのコマンドが同時に走るため、画面出力が悲惨なことになるが、とりあえずこれで、正しい動画が作成できた。

さらに続きます。

  1. FFmpegの古いバージョンでは効いたりはするようではある []

コメントを残す