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
無事動いた.やったね