Last update: 2008/04/03
普通に撮影したビデオのファイルを、早回し再生になるように変換したくなった。それなりの編集ソフトを使えば簡単らしいが、手元にはない。調べると FFmpeg を使ってできるとのことだが、最初かなりとまどった。一応成功したので、以下にメモ。参考になれば幸い。
なお、私の場合、音声は使わないので無視してます。
・日記/2007-11-08/ffmpeg で動画の速度変換
http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?%C6%FC%B5%AD%2F2007-11-08%2Fffmpeg%20%A4%C7%C6%B0%B2%E8%A4%CE%C2%AE%C5%D9%CA%D1%B4%B9
・間違いだらけのFFmpegドキュメンテーション
http://www.himco.jp/articles/pdf/FFmpegDoc.swf
動画・音声のフリーの変換ツール。基本的にはコマンド打って使うが、他のアプリの内部で使われていることもある(「携帯動画変換君」:"cores"フォルダに実行ファイルあり)。
以下、入力ファイルを inputfile.mpg として例を示します。mpg じゃなくても対応可能なもの多いはず。そのときは適当に。
オリジナル動画ファイルの画像サイズやビットレートなどの情報が取り除かれる。
ffmpeg -i inputfile.mpg yuvfile.yuv
ffmpeg -s 720x480 -r 299.7 -i yuvfile.yuv -s 640x480 -b 4000k -an outputfile.avi
-i の後ろに 1. で作った yuv ファイルを指定する。この前に以下のオプションを指定するのが重要。
-s inputfile.mpg の画面サイズを指定する。ここが違うと全然ダメ。例はDVDのmpgファイルの場合。
-r オリジナルのフレームレート×早回しの倍数。
例:オリジナルが29.97(fps) のものを10倍早回しにしたければ、299.7 を指定。
入力ファイル名の後のオプションは、出力されるファイルについての指示となる。以下に注意。なお、-an は音声無視するオプション。拡張子をmpgなどにするとなぜか画面にひどいノイズが出た。
-s 出力されるファイルのサイズを指定。DVDの場合、指定しないとアスペクト比が変わる場合あり。
-b 指定しないとビットレートが200kとなり、かなりブロックノイズが出る。
transcoding.ini に適当な記述をすると、「携帯動画変換君」で上記の変換ができます。こんな感じ。
[Item2]
Title=720x480 (DVD) mpgファイルを10倍速再生
TitleE=720x480 (DVD) 10 times fast motion
FileNameMax=59
Command0=""<%AppPath%>\cores\ffmpeg" -i "<%InputFile%>" "<%OutputFile%>.yuv""
Command1=""<%AppPath%>\cores\ffmpeg" -s 720x480 -r 299.7 -i "<%OutputFile%>.yuv" -s 640x480 -b 4000k -an "<%OutputFile%>.avi""
静止画でよくやるトリミング(画面の一部切り出し)もこんな感じでできます。
ffmpeg -i inputfile.mpg -s 800x600 -cropleft 160 -croptop 120 -b 4000k outputfile.avi
カットしたいドット数を下記のオプションで指定する。カット分を見込んで 出力ファイルの -s オプションを指定しないと、オリジナルより画面サイズが小さくなる。上の例では、元画像の上、左それぞれ 1/5 をカットされ(画像の右下 4/5 だけ残る)、最終的に 640x480 の画面サイズのファイルができる。-an オプション入れてないので音声も出ます。
-croptop(上から) -cropbottom(下から) -cropleft(左から) -cropright(右から) カットするドット数を指定
トリミングだけなら yuv にする必要なし。入力ファイルが mpg などサイズ情報をもっているなら、入力側に -s 720x480 などと指定する必要もない。また、出力を mpg にしても大丈夫の模様。
公開: 2008/04/02