最新FFmpeg


最新FFmpeg

ここでは携帯動画変換君への最新のFFmpegの導入とそのオプションについて説明します。 現在FFmpegは積極的に開発が進められており、近年開発された新しいフォーマットに対応したバージョンがリリースされています。 これによりポータブルデバイスに標準的に利用されるつつあるH.264コーデックの詳細なオプションを指定したエンコードや、 動画配信サイトなどのFLVフォーマットに利用されるvp6コーデックのデコードなどが可能になりました。 しかし変換君に同梱されている従来のFFmpegとはコマンドの仕様が異なるため、入れ替えるだけでは導入することが出来ません。

導入にあたってはまず携帯動画変換君は最新のFFmpegに対応していないことが前提であることをご理解下さい。 またこのページの内容はメリットが理解できない人、やり方が理解でいない人にはお勧めしません。導入は自己責任でお願いします。

なお、最新版のFFmpegは、こちらこちら などでビルド済みのバイナリを入手するか、 ソースコードを拾って自分でビルドしてください。 コンパイル方法は 猫とモブログと動画ブログのブログM. a. Factory社長日誌 や、お気に入りの動画を携帯で見よう に詳しい。

なおLAMEは同梱のlibtoolのバグでホームディレクトリのパスに空白文字があるとメイクできないので注意。

また、libavcodec, libavformat, libxvid, libx264 等の個別のオプションについては、 ここのMPlayerのオプション一覧 に同じ効果を持つオプションの説明がある場合も多いので、こちらも参照してください。

(このページのメニュー)

(以下別ページ)

〜作者さんの意向で、各ページの最大サイズは8388608バイト規制となっているため、各オプションごとにページを分けてあります。〜

導入のメリットと注意点

導入のメリット

  • 旧FFmpegに比べてより高度で詳細なオプションを設定することが出来ます。
  • 入力・出力フォーマットが多数追加されました。

導入のデメリット

  • 新FFmpegでは既存の携帯電話などの動画エンジンで一般普及している仕様でのmpeg4などをエンコードできません。
  • オプションや引数の仕様が変更されたため、変換君デフォルトのエンコード設定が使用できません。
  • 変換君に同梱されている ffmpeg は、作者さんによって 独自の機能追加等 がされており携帯機器向けの変換や 変換君との連携に使いやすいように修正されています。この機能が使えなくなります。

特に、FFmpegは携帯電話やポータブルデバイスなどのための専用エンコードツールではないことを理解してください。 まず原則として携帯動画変換君は最新のFFmpegに対応していません

最新FFmpegで利用可能なフォーマット

最新FFmpegではデコードおよびエンコードできるフォーマットが多数追加されたため、それにともない 多くファイルフォーマットおよびコーデックの名称が変更されました。 この一覧はFFmpeg.exeの本体があるディレクトリでDOSコマンド「ffmpeg -formats」を実行することで確認出来ます。 変更されているのはファイルフォーマット(FFmpegのコマンド-fの引数)およびコーデック (FFmpegのコマンド-vcodecおよび-acodecの引数)。 また、変換君同梱ffmpegの固有オプションも使用できなくなります。

※-formatsコマンドは旧FFmpegも同様に使用できます。新FFmpegのコマンドは別ページのメインオプションを参照してください。

例)ファイルフォーマット名の変更

-f psp → -f libx264 など (pspは変換君同梱ffmpegの固有オプションのため)
-f ipod → -f libx264 など (ipodは変換君同梱ffmpegの固有オプションのため)  

※特定のポータブルデバイス向けの動画にするには、対応するフォーマットオプション (-f mp4, -f 3gp 等) でまず変換を行い、 作成されたファイルを必要に応じて外部プログラム (NicMP4Box, ATOMChanger 等) で加工 (ヘッダ情報の書き換え等) することになります。 もちろん ffmpeg が生成するファイルそのままで利用するポータブルデバイスが認識できればそれ以上の加工は必要ありません

例)コーデック名の変更

-vcodec xvid → -vcodec libxvid
-vcodec h264 → -vcodec libx264
-acodec mp3 → -acodec libmp3lame
-acodec aac → -acodec libfaac

※lib・・・libavcodec、lame・・・Lame mp3エンコーダ の意味で、  GPL準拠の内臓している外部エンコーダ・デコーダの利用を明記する形で名称を変更しているようです

最新FFmpegでの重要な変更点

  • オプションの使用方法 旧FFmpegとオプションの使用方法が大幅に変更されています。特に同梱のiniに多数利用されていると思われる -maxfr, -fixaspect などのオプションはすべて変換君付属ffmpegに固有のため、 オリジナル版である新ffmpegではデフォルト設定のほとんどのオプションが使用できません。 新FFmpegのオプションの詳細は別ページのメインオプションやFFmpegリリースノートなどを参照して下さい。

例)オプションの仕様変更・追加・削除

-bitexact → -flags bitexact へ変更
-maxfr → 削除 (変換君付属ffmpegに固有のオプションのため)
-title → オプション自体は利用可能だが日本語タイトルは使用不可
          (変換君同梱ffmpeg の日本語タイトル対応は作者さん独自の拡張です)
  • ビットレートの指定方法 旧FFmpegではVideoビットレート(FFmpegの-bの引数)およびAudioビットレート(FFmpegの-abの引数)で k(キロ)を省略する形で表記しますが(単位がkbps)、最新FFmpegではこれを省略しないで表記します(単位がbps)。

例)ビットレートの指定

-b 400 → -b 400k
-ab 128 → -ab 256k

※音声がステレオ2chの場合(FFmpegの-acの引数が2の場合)、Audioビットレートは2倍の数値を引数にして下さい。これは仕様のようです。

最新FFmpegを使用したTranscoding.iniのカスタマイズ

ここでは最新FFmpegの導入とTranscoding.iniのカスタマイズ方法を紹介します。 方法は数種類ありますが、旧・新両方のFFmpegを変換君のcoreフォルダに共在させる方法を推奨します。 これは既存の携帯電話の技術的仕様に対する利便性が旧・新の両方にあるためです。 自己責任でご利用ください。

  1. 最新(使用したいバージョン)のffmpeg.exeと付属のpthreadGC2.dllを入手します。  この際必ずpthreadGC2.dllが同梱しているパッケージを入手してください。
  2. 新しいffmpeg.exeをリネームします。  (例)ffmpeg11870.exe、ffmpeg2.exeのように好きな名前で結構です。
  3. 変換君のcoreフォルダにリネームした新しいffmpeg.exeとpthreadGC2.dllをコピーします。
  4. coreフォルダにffmpeg(旧ver.)とffmpeg2(リネームした新ver.)とpthreadGC2.dllが入った状態で準備完了です。

※pthreadGC2.dllの方はcoreフォルダに共在させることができないので、互換性により複数の新FFmpegを使用したい場合は  この方法は利用出来ません。変換君の本体丸ごとリネームして別の環境を用意してください。

(例1) AVI (xvid+mp3) の2passエンコード (新FFmpeg→ffmpeg2)

  • [Item0] Title=新FFmpeg - AVI(xvid+mp3) 2pass Command0=""<%AppPath%>\cores\ffmpeg2" -bitexact -y -i "<%InputFile%>" -pass 1 -passlogfile "<%TemporaryFile%>" -timestamp "<%TimeStamp%>" -vcodec libxvid -s 320x240 -r 30 -b 400k -acodec libmp3lame -ac 2 -ar 44100 -ab 256k -f avi "<%TemporaryFile%>.avi"" Command1=""<%AppPath%>\cores\ffmpeg2" -bitexact -y -i "<%InputFile%>" -pass 2 -passlogfile "<%TemporaryFile%>" -timestamp "<%TimeStamp%>" -vcodec libxvid -s 320x240 -r 30 -b 400k -acodec libmp3lame -ac 2 -ar 44100 -ab 256k -f avi "<%OutputFile%>.avi"" Command2="rm "<%TemporaryFile%>-0.log"" Command3="rm "<%TemporaryFile%>.avi""
  • xvidコーデックを2passエンコードで使用すると、コーデックの仕様でWindowsのTempフォルダに「xvidff.n」(n=0,1,2,・・・)という テキスト形式のログファイルが作成されます。対策は別ページ(動画を2パスエンコードする) を参照してください。

(例2) iPod 向け MP4(H.264+AAC) の1passエンコード (新FFmpeg→ffmpeg2) マルチスレッド対応

  • [Item0] Title=新FFmpeg - MP4(H.264+AAC) 1pass crf23 Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -threads 0 -s 320x240 -vcodec libx264 -crf 23.0 -level 30 -coder vlc -qmin 10 -acodec libfaac -ab 128k -ac 2 -ar 48000 -f mp4 "<%TemporaryFile%>.mp4"" Command1=""<%AppPath%>\cores\NicMP4Box" -add "<%TemporaryFile%>.mp4" -new "<%OutputFile%>.mp4"" Command2="rm "<%TemporaryFile%>.mp4""
  • NicMP4BoxによるH.264のエンコードについては別ページ(iPod)を参照して下さい。
  • -threads 0 で CPU コア数に応じてスレッド数を自動的に決定してマルチスレッド化 ただし、0 指定は -vcodec libx264 指定時のみ有効なので、他のコーデックを使うときは "-threads 3" のように適当な数字 (CPUのコア数+α) を直接指定する
  • H.264のオプションに関する詳しい情報は別ページ(コーデック)のH.264を参照してください。

(例3) WMV8 (wmv2+wmav2) の1passエンコード (新FFmpeg→ffmpeg2)

  • [Item0] Title=WMV8 wmv2+wmav2 Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -vcodec wmv2 -qscale 4 -re -s 320x180 -acodec wmav2 -ab 96k -ac 2 -ar 44100 -f asf "<%TemporaryFile%>.wmv"" Command1=""<%AppPath%>\cores\asfbin" -y -i "<%TemporaryFile%>.wmv" -sionly -y -o "<%OutputFile%>.wmv"" Command2="rm "<%TemporaryFile%>.wmv""
  • ffmpegを利用してasfをエンコードし、asfbinを利用してwmvコンテナに収納するiniです。近年ポータブルデバイスに導入されつつある wmv、wmaフォーマットの動画をエンコードできます。
  • asfbinはWindowsのSDK(開発キット)の機能を使わずにasfファイルを編集できるコマンドベースのソフトウェアです。 非営利目的の使用に限りフリーウェアとして利用できます。詳細はRadioactive Pageをご覧下さい。(日本語ページもあり、ただしソフトの更新が遅い) ダウンロードはこちらから、「コマンドラインバージョン」を選択してください。
  • 「-vn」オプションを使用してwmaフォーマットを作成できます。wma9に比べて圧縮率は下がりますが、AviSynthとの併用により 多彩な入力フォーマットに対応でき、かつffmpegの多くのオプションを利用できる利点があります。

参考:旧FFmpegとの追加・変更オプション

-b                         kbit/s表記からbit/s表記に
-ab                        kbit/s表記からbit/s表記に

-flags             <flags> 
   mv4                     E.V.. use four motion vector by macroblock (mpeg4)
   obmc                    E.V.. use overlapped block motion compensation(h263+)
   qpel                    E.V.. use 1/4 pel motion compensation
   loop                    E.V.. use loop filter
   gmc                     E.V.. use gmc
   mv0                     E.V.. always try a mb with mv=<0,0>
   part                    E.V.. use data partitioning
                           data partitioning を使用する 
   gray                    EDV.. only decode/encode grayscale
   psnr                    E.V.. error[?] variables will be set during encoding
   naq                     E.V.. normalize adaptive quantization
   ildct                   E.V.. use interlaced dct
   low_delay               EDV.. force low delay
   alt                     E.V.. enable alternate scantable (mpeg2/mpeg4)
   trell                   E.V.. use trellis quantization
                           格子量子化を有効にする。 
   bitexact                EDVAS use only bitexact stuff (except (i)dct)
   aic                     E.V.. h263 advanced intra coding / mpeg4 acprediction
                           高度なイントラコーディングを有効にする
   umv                     E.V.. use unlimited motion vectors
                           無制限モーションベクターを有効にする
   cbp                     E.V.. use rate distortion optimization for cbp
   qprd                    E.V.. use rate distortion optimization for qp selection
   aiv                     E.V.. h263 alternative inter vlc
   slice                   E.V..
   ilme                    E.V.. interlaced motion estimation
   scan_offset             E.V.. will reserve space for svcd scan offset user data
   cgop                    E.V.. closed gop クローズドGOP

-flags2            <flags> 
   fast                    E.V.. allow non spec compliant speedup tricks
   sgop                    E.V.. strictly enforce gop size
   noout                   E.V.. skip bitstream encoding
   local_header            E.V.. place global headers at every keyframe insteadof in extradata
   bpyramid                E.V.. allows B-frames to be used as references for predicting
   wpred                   E.V.. weighted biprediction for b-frames (H.264)
   mixed_refs              E.V.. one reference per partition, as opposed to onereference per macroblock
   dct8x8                  E.V.. high profile 8x8 transform (H.264)
   fastpskip               E.V.. fast pskip (H.264)
   aud                     E.V.. access unit delimiters (H.264)
   brdo                    E.V.. b-frame rate-distortion optimization
                           Bフレームのレート歪みを最適化
   skiprd                  E.V.. RD optimal MB level residual skipping
   ivlc                    E.V.. intra vlc table
   drop_frame_timecode         E.V..
   non_linear_q            E.V.. use non linear quantizer

-partitions        <flags> E.V.. macroblock subpartition sizes to consider マクロブロックのサイズを決定
   parti4x4                E.V.. 低解像度時に使用
   parti8x8                E.V..
   partp4x4                E.V.. 低解像度時に使用
   partp8x8                E.V..
   partb8x8                E.V..
:-flags、-flags2、-partitionsを複数指定する場合には、引数と引数の間に+を入れてください
(例): -flags obmc+qpel

-refs              <int>   E.V.. reference frames to consider for motion compensation (Snow)
Bフレームの参照フレーム数、実写映像では6程度から効果が激減、アニメなどはもう少しいけるかも

-bf (1〜16)
Bフレームの最大連続数 最新版では16フレームまで連続可能

-trellis           <int>   E.VA. rate-distortion optimal quantization

-オプション
   -me <int>               記述例 -me umh
   dia                     ダイヤモンドサーチ、半径 1 (高速)
   hex                     六角形サーチ、半径 2 (デフォルト)
   umh                     不等複数六角形サーチ
   esa                     徹底サーチ (超低速、umhより全く良くなるところが無い:フルピクセルの動き補償アルゴリズム選択。


コメント欄

コメントはありません。 コメント/最新FFmpeg?