(2011.12.17)
機 能 | 構 文 | 用 例 |
---|---|---|
基本構文 | ffmpeg -i [in-file] {options} [out-file] | ffmpeg -i mymovie.wmv mymovie.mpg |
情報表示 | -i [file] | ffmpeg -i mymovie.mpg |
ビットレート指定 | -b (video) / -ab (audio) | ffmpeg -i mymovie.wmv -b 8000k mymovie.mpg |
無劣化変換 | -sameq | ffmpeg -i mymovie.wmv -sameq mymovie.mpg |
コーデック指定 | -vcodec (video) / -acodec(audio) | ffmpeg -i mymovie1.mpg -acodec ac3 mymovie2.mpg |
画面サイズ指定 | -s [width]x[height] | ffmpeg -i mymovie1.mpg -s 800x450 mymovie2.mpg |
事の起こりは、avidemuxで複数のwmvファイルを連結すると、音声チャンネルが壊れるという現象にぶち当たったこと。原因は不明なのだが、少なくとも、私が使用しているavidemuxでは、wma形式の音声を正常に扱えないようなのだ。単体ファイルの編集・変換ですら音ずれが発生するのだが、それよりも深刻なのは複数のwmvファイルを一本にまとめる場合。完全に音声が壊れて何を言っているのか全然わからないこともあるし、1本目の音声がずっと反復されることもある。いろいろ試してみたが、コーデックやオプション指定でどうにかなる問題ではないようだ。しょうがないので、avidemuxでの編集の前にmpegに変換して、mpegファイルを連結することにした。が、1本1本手作業では面倒でたまらない。何とか一括変換できないだろうか…?
変換ツールはいくつか出ているが、不安定だったり、使いにくかったり、変換結果に問題があったりで、私の基準からすると実用レベルにあるものはない。MediaCoderで作成したmpegファイルはavidemuxで開こうとするとクラッシュするし、@SUPERはUIが使いにく上にすぐにハングする。まあ、使用環境やオプション指定の問題もあるだろうから、対処法はあるような気がするが、そうまでして使いたいツールではないなぁ…というのが実感。
で、結局行きついたのがLinux系のコマンドラインツールffmpeg。てか、ほとんどの変換ソフトが、この手のコマンドラインツールのUIシェルだったわけで、ハナからffmepgを使っておけばよかったのであった。Win版の入手方法は面倒だが(どれがバイナリだかわからなくて何度もソースをDLしてしまったし、7zip必須だし)、使用方法は簡単。
ffmpeg -i mymovie.wmv mymovie.mpgただし、デフォルトのビットレートは低いので、このままだとかなり画質が劣化する。ビットレート指定は-bオプションで、
ffmpeg -i mymovie.wmv -b 8000k mymovie.mpgのようにすれば良い(オーディオのビットレートは-abオプション)。ただし、アスペクト比なんかは引き継がれるとしても、コーデックがどうなっているのか(mpeg-1かmpeg-2か)はよくわからん。オーディオなんかも形式不明(-iで確認できるが)。ビットレートも可変か固定か不明。が、要はavidemuxでauto append可能なmpeg形式にできれば良いのであって、内部の形式はとりあえず不問。でもって、この方法で問題なくavidemuxで編集できた。
画質劣化を防ぎたいときは、上記のようにビットレートを明示的に指定するのではなく、
ffmpeg -i mymovie.wmv -sameq mymovie.mpgのようにしてもよい。「-sameq」は同一クオリティでの変換。この方法ならば、状況に応じてビットレートを加減する必要がなくて便利。ただし、ファイルサイズが3〜5倍程度に膨らむ。原因は知らない。が、とりあえず、ファイルサイズを気にせずに変換&結合してから、必要に応じて適宜ビットレートを変更して、サイズを小さくすると良いだろう。
画面サイズを変更したいときは -sオプションで指定する。サイズはドット単位で、アスペクト比は維持されない。したがって、元動画のアスペクト比に合わせてサイズ指定をする必要がある。
ffmpeg -i mymovie.wmv -s 800x600 mymovie.mpg
もう一つ問題があって、それは入出力ファイルの指定にワイルドカードが使えない点。しょうがないので、スクリプトで一括処理する事にした。やや意外だったのは、WinXPのDOSバッチの言語仕様がかなり拡張されていたこと(盲点だった)。たとえば、test1.wmv〜test4.wmvをmpegに変換したければ、
for /l %%i in (1,1,4) do ( ffmpeg -i test%%i.wmv test%%i.mpg )というようにすればよい。四則演算や条件分岐、入力処理なんかもできるようだが、REXXと比較すれば遥かに貧弱で、複雑な処理は無理そうだ。まあ、active scriptを使うか、OS/2版のffmpeg(入手済み)を使ってREXXで処理するのが正解だろう。あっと、Perlとか、なぁ……動画編集はどうしてもWinベースで作業するから、Perlは考えてもいいな。