内蔵AACのエンコード(出力)は実験段階のため、まだ音質は良くないです。
まともに動作するようになるまでは、Nero AAC コーデックを使用した音声AAC動画の作成方法を、こちらの記事に書きましたので、参考にしてください。
また、x264について、一番多く質問が寄せられるエラーの説明を記事にしましたので、思い当たる方は、ぜひご一読ください。
x264のエンコードでエラー(Error while opening encoder for output stream #0.0)
2010/3/3 追記
バグが見つかったため、修正版に差し替えました。
neroAacEncとの組み合わせで、エンコード時にエラーが出る場合は、ダウンロードし直してください。
ffmpeg_bin-22137.zip
ffmpeg_bin_pentium4-22137.zip (Pentium4最適化版)
ffmpeg_bin_core2-22137.zip (Core2最適化版)
ffmpeg_bin_athlon64-22137.zip (Athlon64最適化版)
ffmpeg_bin_phenom-22137.zip (Phenom最適化版)
以下のライブラリをアップデートしました。
lame-3.98.3
x264 rev.1471
今回より、FFmpeg内蔵のnut muxer/demuxerの方がちゃんとメンテナンスされているため、libnutは外しました。
ffprobeという、動画や音声ファイルの種類を調べられるツールが統合されましたが、とりあえずは必要が無いためdisableしています。
バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Duron、Sempronの一部、Pentium3など)をお使いの方は、最適化無し版を使ってみてください。
最適化無し版でもエラーが出る場合は、サポート外とします。
zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
pthreadGC2.dllは不要です。
携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。
FFmpegのコンパイルは、こちらの記事を参考にしてください。
コンパイル環境:MinGW gcc4.4.3
各ライブラリのバージョンは、以下の通りです。
nasm-2.08.01
yasm-0.8.0
pthreads-w32 release 2.9.0
zlib-1.2.3
bzip2-1.0.5
faad2-2.7
gsm-1.0.13
lame-3.98.3
opencore-amr-0.1.2
libogg-1.1.4
libvorbis-1.2.3
libtheora-1.1.1
x264 rev.1471
xvidcore-1.2.2
最適化オプションは、以下のようにしています。
configureのオプションに--enable-smallを付けると、gccのオプションに-Osが付きます。
--enable-smallを付けなければ、gccのオプションに-O3が付きます。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic -fno-strict-aliasing"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse -fno-strict-aliasing"
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse -fno-strict-aliasing"
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse -fno-strict-aliasing"
configureオプションは以下の通りです。
$ ./configure --enable-memalign-hack --enable-postproc --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfaad --disable-decoder=aac --enable-libgsm --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libx264 --disable-ffserver --disable-ffplay --disable-ffprobe --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"
※--extra-cflagsは、最適化の種類により異なります。
configureのメッセージはこちら。
質問したいことがあるのですが、あべちんさんはFFMpegをビルドする際に各オプションのデフォルト値を知ることができるのでしょうか?
FFMpegは汎用性を高めるためにx264本家とはそぐわないデフォルト値になっていると聞きました。でも私はx264本来の値でエンコードしたいのです。
ffmpegのソースの「ffmpeg.c」や「libavcodec/options.c」などを見ればデフォルト値がどうなってるか見ることができますよ。
自分でビルドできるならここを編集することでデフォルト値を好きな値に変えることもできます。
返信ありがとうございます。ビルドはできないのですが、値を知ることができるのはとてもうれしいです。本当にありがとうございました。
こんばんは!
管理人さんちょっと教えて欲しい事が・・・
http://blog.k-tai-douga.com/article/34128581.html
ここの
-flags2 +mbtree : mbtree ON
-flags2 -mbtree : mbtree OFF (default)
で -flags2 mbtree
+ を付けないとONになりますか?
-flags2 mixed_refs+mbtree
こうした場合は+mbtreeだけがONですか?
宜しくお願いします。。。
コンパイルオプションの「mtune=core2」ですが、このオプションを有効にすると-msse4.1や-msse4.2も追加されるのでしょうか?
mbtreeだけだと、"+"がなくてもONになりますが、連結すると、先頭(左側)のフラグがONになっていないみたいですね。
記事の方を修正しておきます。
ありがとうございました。
http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
より、
core2
Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support.
となっており、SSE4.xはサポートされていないようです。
x264のデフォルト値と、FFmpegのオプションの対応は、こちらが参考になると思います。
x264 ffmpeg mapping and options guide
http://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping
FFmpegのデフォルト値は載っていませんが、x264のデフォルト値に合わせてFFmpegのオプションを設定すれば良いと思います。
こんばんは!
って事は単品の場合は + 無しでもON
複数の場合は先頭にも + を付ける。。。
全て + を付ければOKって事ですね!
ありがとですm(_ _)m
上記のflagsオプションの"+"の付け方ですが、変換君ウィキにておそらく正しいと思われる情報を下さった方がいました。
FFmpegには-flags2 fastpskip+reservoirがデフォルトとして設定されており、自分でflags2オプションを指定した場合、先頭に+ありだとデフォルトflags2に追加、+なしだとデフォルトflags2を上書きという形になるらしいです。
確認したところ、+を使用する可能性がありそうなオプションで、暗示的にデフォルト値が設定されているのはflags2だけのようでした。
なるほど、そういうことだったのですね。
先頭の"+"有り無しで、エンコード結果が違う謎が解けました。
ありがとうございました。
> まさみさん
Minoさんのコメントが正解ですので、参考になさってください。
こんにちは!
管理人さん了解しました(=⌒o⌒=)ノ
参考まで・・・
libx264-default.preset
coder=1
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=hex
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=3
refs=3
directpred=1
trellis=1
flags2=+mixed_refs+wpred+dct8x8+fastpskip+mbtree
wpredp=2
こうなってるみたい!
私はCore 2 Quad Q9400を使っています。
http://nattokude.gozaru.jp/nikki/penryn/9_sse4.html
上のページを見るとQ9400が対応しているSSE4.1を使うことでエンコードが少し高速化されるようなので、ちょっと気になっていました。
できれば(SSE4.2にも対応した)Core i7/5/3世代向けに最適化されたバイナリも作って欲しいです。
-march=core2 -msse4.2
などと付けれますが、-march=core2のみと速度は変わりませんでした。
-march=nativeを付けて、自分のPCでビルドする事をオススメします。
> 名無しさん
情報ありがとうございます。
私のPCでは、SSE4.2の確認ができませんので助かりました。
FFmpegのエンコード速度は、libx264やlibxvidなどのライブラリによるところが大きく、FFmpeg本体だけ最適化しても、実はたいして変わりません。
仮に数%速くなるとしても、コンパイルにかかる手間暇を考えると、全く労力に見合わないため、今のところ、バイナリの種類を増やす予定はありません。
ということで、ご理解いただければ幸いです。