内蔵AACのエンコード(出力)は実験段階のため、まだ音質は良くないです。
まともに動作するようになるまでは、Nero AAC コーデックを使用した音声AAC動画の作成方法を、こちらの記事に書きましたので、参考にしてください。
また、x264について、一番多く質問が寄せられるエラーの説明を記事にしましたので、思い当たる方は、ぜひご一読ください。
x264のエンコードでエラー(Error while opening encoder for output stream #0.0)
ffmpeg_bin-22912.zip
ffmpeg_bin_pentium4-22912.zip (Pentium4最適化版)
ffmpeg_bin_core2-22912.zip (Core2最適化版)
ffmpeg_bin_athlon64-22912.zip (Athlon64最適化版)
ffmpeg_bin_phenom-22912.zip (Phenom最適化版)
以下のライブラリをアップデートしました。
yasm-1.0.0
x264 rev.1542
rtmpdump-2.2c
今回より、gcc4.5.0を自前でビルドして使用しています。
バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Duron、Sempronの一部、Pentium3など)をお使いの方は、最適化無し版を使ってみてください。
最適化無し版でもエラーが出る場合は、サポート外とします。
zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
pthreadGC2.dllは不要です。
携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。
FFmpegのコンパイルは、こちらの記事を参考にしてください。
コンパイル環境:MinGW gcc4.5.0
binutils-2.20.1-2
mingwrt-3.18
w32api-3.14
各ライブラリのバージョンは、以下の通りです。
nasm-2.08.01
yasm-1.0.0
pthreads-w32 release 2.9.0
zlib-1.2.4
bzip2-1.0.5
faad2-2.7
gsm-1.0.13
lame-3.98.4
opencore-amr-0.1.2
openssl-0.9.8n
rtmpdump-2.2c
libogg-1.2.0
libvorbis-1.3.1
libtheora-1.1.1
x264 rev.1542
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-librtmp --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は、最適化の種類により異なります。
突然ですが、前々から間違ったフレームレートが読み込まれます。Avisynthを使うと余計ひどくなります。QuickTimeもffshowも最新で昔のFFmpegなら、何ともありません。最新に換えると変になってしまい、新しいものが使えません。できればアドバイスをお願いします。
今回のバイナリから、h.264へのエンコード中にエラーが発生するようになってしまいました。
エラーは、処理の途中で発生します。
環境は、windows7 x64で、使用したバイナリは、ffmpeg_bin_phenom-22912.zip です。
今までのバイナリでは発生しませんでした。
エンコードのオプションは、
ffmpeg" -y -i "<%TemporaryFile%>.aac" -acodec copy -i "<%InputFile%>" -timestamp "<%TimeStamp%>" -vcodec libx264 -threads 0 -crf 24 -level 30 -g 200 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -f mp4 "<%OutputFile%>.mp4""
です。
取り急ぎご報告まで。
昔のFFmpegというのは、携帯動画変換君に同封されているもののことでしょうか。
FFmpegは、各種の映像と音声コーデックが個別に開発されていて、特定のものだけダメだったりすることがあります。
入力ファイルの形式をできるだけ詳しく、FFmpegの設定などを示していただけると、ご存じの方が答えてくれるかもしれません。
音声のズレ方も、
最初から最後まで同じタイミングでずれる
最初は合っていてだんだんズレが大きくなる
などで、対策が違います。
あとは、MobileHackerzさんのKnowledgebase Wikiで解決済みだったりすることもありますので、探してみてください。
解決になっていなくてすみません。
ご報告ありがとうございました。
V36さんの環境が変わっていないとすれば、一番あやしいのは、コンパイラをバージョンアップしたことですね。
次は、GCC 4.5.0と4.4.3の両方でビルドしてみます。
エラーの内容を確認していなかったので、確認しようと思い、
なんどもエンコードを実行しましたが、エラーが再現しません。
記憶では、なにかのruntimeエラーだったと思います。
昨晩は2度エラーが発生し、再起動後も再度、エラーが出ました。
今朝も電源投入後に2度エラーを確認していましたが、今晩はな
んどやってもエラーが出ません。私特有の環境による問題かもし
れません。お騒がせしてすみません。
なにかわかったら、また報告させて頂きます。
エラー内容は、
Microsoft Visual C++ Runtime Library
Runtime Error!
abnormal program termination
というものでした。
エラー表示をアップしました。
http://fx.104ban.com/up/src/up16047.jpg
Microsoft Visual C++ Runtime Libraryといえば、
C:\WINDOWS\system32\msvcrt.dll
が、何かインストールした時に、古いバージョンに置き換わってしまったということはありませんか?
私の環境ではエラーが再現できないので、なかなか難しい問題ですね。
返信ありがとうございます。
msvcrt.dllのバージョンを確認してみました。
ファイルバージョン:7.0.7600.16385
でした。windows7標準品の様です。
しばらく様子をみます。
エラーの頻度た高ければ、また報告させて頂きます。
msvcrt.dllは新しいバージョンのようですね。
何か他のソフトが動作した時にエラーになるという可能性もあります。
イベントビューアに、エラーが出た時のログが残っているかもしれません。
gcc 4.4.3と4.5.0両方でFFmpegをビルドしてアップしようかと思ったのですが、かなり面倒なので、しばらくgcc 4.5.0で行こうと思います。