ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

ffmpegで動画をスライドに乗せられるサイズにする

何があった

ハンディカムで撮った動画をスライドに乗せることになったのだけど、22MBはちょっと大きいのでサイズ縮小のためにやったこといろいろをメモ

環境

ffmpegをコンソールからいじれる環境ならどこで共通だとは思いますが、僕はUbuntu 12.04LTSでやってます。

まずは動画の情報を確認

いろいろやるにしてもまずは動画の情報が無いと不便です
ということで

$ffmpeg -i source.MTS

で入力ファイルのみを与えると、ファイルの情報を吐き出してエラーで終了します。
エラーと言っても出力ファイルを指定しろというエラーなので別になんの問題も無いです。
これ以降の処理はこれを使って情報見てオプション与えたり本当にうまくいってるのか確認したりします。

何はともあれaviにする

ハンディカムからコピーしたファイルの拡張子が.MTSなのでaviにする。
aviにするのはターゲット環境がwindowsだから。
コマンドは

$ffmpeg -i source.MTS output.avi

出力ファイルの拡張子を指定すれば勝手にやってくれます。

基本的に

これ以降はオプションのみを書いていきます。
最後に結局どういうコマンドになったのかは乗せます。

ビデオストリームのみにする

ビデオストリーム以外にも音声ストリームや字幕ストリームなどがついてきたのですが、今回は動画だけでいいのでサイズの肥やしはカット。
今回はストリームの0番がビデオストリームだったので

-map 0:0

でOK.

http://ubuntuforums.org/showthread.php?t=1148243

動画の時間を切り詰める

動画の頭とおしりの余分な部分を切り取ります.truncateってやつですね。
今回は開始12秒時点から20秒間の間を残します。
ということで追加するオプションは

-ss "00:00:12" -t "00:00:20"

で-ssが開始時刻で、-tが長さです。

http://quickhowto.blogspot.jp/2011/02/how-to-truncate-video-using-command.html

動画の解像度を下げる

動画が1440x1080っていう結構でかいサイズなんですが、プロジェクターに写したらそんなに解像度あってもしょうがないので、640x480のVGAサイズに落とします

-s 640x480

http://mobilehackerz.jp/archive/wiki/index.php?%BA%C7%BF%B7ffmpeg%2F%A5%D3%A5%C7%A5%AA%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3

コーデックを指定

ここがすごい大事。いろいろやってサイズ削減しても結局再生できないんじゃ意味無いですからね。
まずは使用可能なコーデックに何があるかを調べます。

$ffmpeg -encoders | grep V

今回はビデオエンコーダだけ知りたいのでこれで。
無難にmpeg4あたりでしょうか。
ということで追加するオプションは

-c mpeg4

ブロックノイズがひどい・・・。動画のサイズを800x600にしてもいいかもしれません。

まとめると

こちらのコマンドになります。

ffmpeg -i source.MTS -map 0:0 -c mpeg4 -ss "00:00:12" -t "00:00:20" -s 640x480 output.avi

感想

なんとか1Mには収まったけどブロックノイズが・・・。

追記

素直にmp4にしてコーデック指定を切った方がいいかも。少なくとも、macではmp4じゃないと再生デキないみたいです。