C言語でYUV動画を読み書き

1ヶ月分ぐらい定点でインターバル撮影したんだけど, 夜の間真っ暗なところをカットしたかったのでやった. ちなみに最初はPythonでやったんだけど,あまりにも遅かったのでCにした.

YUV

テレビの黄色コンポジット端子で扱われる色空間のことで 輝度信号Yと2つの色差信号からなる.

もともと白黒放送が輝度信号のみであったため, カラー放送移行時に後方互換性のことを考えて生まれたものらしい.

ffmpegやlivavで動画の出力にYUV形式を選ぶと, フレームごとに切り出して,YUVをひたすら書き出してくれる. 結構単純なので,プログラムからでも簡単に扱える.

YUV動画のパースもRGBへの変換も英語版Wikipediaにすべて書かれている. (ffmpegやlivavの出力するYUVはY'UV420p形式)

参考: http://en.wikipedia.org/wiki/YUV

セットアップ

sudo apt-get install libav-tools
sudo apt-get install gcc

コード

gcc trim.c -o trim

使う

動画→YUV動画

avconv -i movie.avi movie.yuv

トリミング

第1引数と第2引数が動画のヨコタテ,第3引数でしきい値指定(0-255)

./trim movie.yuv movie_trim.yuv 1280 720 50

YUV動画→動画

avconv -s 1280x720 -r 60 -i movie_trim.yuv movie_trim.avi

無事動いた.やったね