FFmpeg最新版(2011/07/31現在)、rev.31700(8400607)のWindows用バイナリを置いておきます。
内蔵AACエンコーダは、まだ実験段階のため、以前使用していたlibfaacや、neroAacEncに比べると音質は良くないです。
まともに動作するようになるまでは、neroAacEncを使用した音声AAC動画の作成方法を、こちらの記事に書きましたので、参考にしてください。
また、x264について、一番多く質問が寄せられるエラーの説明を記事にしましたので、思い当たる方は、ぜひご一読ください。
x264のエンコードでエラー(Error while opening encoder for output stream #0.0)
2011/08/01 追記
rev.31698(3b5ddf0)をアップした後に更新されていたので、差し替えました。
ffmpeg_bin-31700.zip
ffmpeg_bin_pentium4-31700.zip (Pentium4最適化版)
ffmpeg_bin_core2-31700.zip (Core2最適化版)
ffmpeg_bin_athlon64-31700.zip (Athlon64最適化版)
ffmpeg_bin_phenom-31700.zip (Phenom最適化版)
以下のライブラリをアップデートしました。
libvpx-0.9.6-485
x264 rev.2044
今回より、configureオプションを以下のように変更しました。
エンコード速度が、若干速くなりました。
--enable-small 無し
--optflags="-O2 -finline-functions" 追加
バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Duron、Sempronの一部、Pentium3など)をお使いの方は、最適化無し版を使ってみてください。
最適化無し版でもエラーが出る場合は、サポート外とします。
zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。
FFmpegのコンパイルは、以下の記事を参考にしてください。
FFmpegのコンパイル (2011/07/31) w32threads
コンパイル環境:MinGW gcc4.6.1
binutils-2.21
mingwrt-3.18
w32api-3.17
各ライブラリのバージョンは、以下の通りです。
nasm-2.09.10
yasm-1.1.0
zlib-1.2.5
bzip2-1.0.6
gsm-1.0.13
lame-3.98.4
opencore-amr-0.1.2
vo-aacenc-0.1.1
vo-amrwbenc-0.1.1
polarssl-0.99-pre5
rtmpdump-2.4 PolarSSL版
libogg-1.2.2
aoTuV Beta6.03 (libvorbis-1.3.2)
libtheora-1.1.1
speex-1.2rc1
libvpx-0.9.6-485
x264 rev.2044 (make fprofiled)
xvidcore-1.3.2
最適化オプションは、以下のようにしています。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse"
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse"
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse"
configureオプションは以下の通りです。
$ ./configure --enable-gpl --enable-version3 --enable-postproc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libspeex --enable-libvorbis --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libxvid --enable-libvpx --enable-libx264 --disable-ffserver --disable-ffplay --disable-ffprobe --enable-avisynth --enable-w32threads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --optflags="-O2 -finline-functions"
※--extra-cflagsは、最適化の種類により異なります。
2011年07月31日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/47045073
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/47045073
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
質問なのですが、古いffmpeg(20100420 rev22912)ではエンコード可能でしたが、この新しいffmpegに変えたところAvisynthの読込時の「"<%InputFile%>"」で日本語が文字化けしているようで変換できなくなりました。
なお、直接ffmpegでのエンコードは日本語ファイルも問題ありません。
この問題についてご存じでしたら教えていただけるとありがたいです。
ご訪問ありがとうございます。
日本語のファイル名が文字化けするということでしょうか?
ファイル名の問題だけでしたら、ファイル名を変更するというのではダメなのでしょうか。
Avisynth経由でなければならないのは、フィルタをかけたりしているからでしょうか。
もう1年以上も前で、何が変わってしまったのかも分かりませんので、どうしても最新のffmpegを使いたいのであれば、代替の方法を考えた方が手っ取り早いのではないかと思います。
お返事ありがとうございます。
ファイル名はパスとavsに2バイト文字がなければ可能でしたが、変換元のデータに日本語名が多いためそのまま可能な方が都合がよかったためです。
Avisynthはインターレース解除に使用しているため外せないことと、AVS_Skeltonの読込にも影響してしまうため、ffmpegの内部の引数の扱いなどの仕様変更でもあったのではないかと考え質問をさせて頂きました。
やはり一年以上前のこととなると難しいですね。
自分でももう少し調べ直してみて、ダメであれば代わりの方法を考えてみようと思います。
どうもありがとうございました。
ffmpeg29704では正常にエンコードできるファイルが本バージョンではエンコードの途中でerrorを履いて落ちるようになりました。
x264の設定が変わったためでしょうか?
エンコード元は、BDから取り出したTSファイルとDVDから取り出したPSファイルです。
お久しぶりです。
rev.29704からはだいぶ変わっていますし、エンコードの途中で落ちるというのが謎ですね。
エラーメッセージとか、何か手がかりになる情報があると、私がお答えできなくても、どなたか答えてくださるかもしれません。
…って、なんだかいつも同じような返事をしているような?
こだまでしょうか?
いいえ、デジャブです。
変換君でこちらのffmpegを使わせていただき、PSP用に動画をエンコードしているのですが、rev.31632から
[mp4 @ 02b2f4c0] Codec for stream 0 does not use global headers but container format requires global headers
strptime() unavailable on this system, cannot convert the date string.
というメッセージがログに表示されるようになり、エンコードした動画がPSP上で破損ファイルとして認識され、再生できなくなってしまいました。
rev.31420までは正常に再生できました。
ログのメッセージにある「グローバルヘッダ」というものが必要なんでしょうか?
ご訪問ありがとうございます。
また謎なエラーですね。
試しに -flags +loop などとなっていたら、
-flags +loop+global_header
というように、フラグを追加してみてください。
これで変わらなければ、今のところ、他に思い当たる事がありません。
strptime() unavailable on this system, cannot convert the date string.
というのは、いつも出るメッセージなので、気にしなくても良いです。
ここのffmpegを変換君に入れて使わせて頂いています。
r31420までは普通にエンコ出来たのですが、r31632から(r31700も)、ファイルをドロップして開始した時点で、ログの最後に
Missing=
と出てエラーを吐いてしまいます。
r31400からr31632にかけて、有効にするとまずいオプションなどは増えたのでしょうか?
ご回答ありがとうございます。
-flags に +global_header を書き加えたところ、PSP上で正常に再生できました。
余談ですが、rev.31632とrev.31700で +global_header のフラグを追加せずにエンコードした動画は、コーデックチェッカーで、プロファイルなどが読み取れませんでした。
rev.31420まででエンコードした動画、rev.31632とrev.31700で +global_header のフラグを追加してエンコードした動画は問題無いようです。
ありがとうございました。
解決して良かったです。
その後、再確認したところ、
-flags loop
のように、先頭に + を付けないと、デフォルト値がクリアされて「loop」のみが有効になります。
-flags +loop
のように、先頭に + を付けると「デフォルト値+loop」が有効になります。
+global_header はデフォルトで有効になっているので、
-flags +loop
と設定すれば、問題ないようです。
ご訪問ありがとうございます。
Missing というメッセージを出すのはmetadata関連のようですが、その後ろに何か出ていませんでしたか?
何が変わってエラーが出るようになったのかは分かりません。
ログは
Missing=
error:1
エラーが発生しました。中断します。
のような図になっており、殆ど手がかりがありません。
error:1自体、いろいろな原因で発生するらしいので、特定できずにいます。
-flags2 でデフォルト値を使いたくなかったので、先頭の項目に + を付けていなかったのですが、どうやら -flags では同じことはせずに + を付けた方が無難そうですね。
-flags の先頭の項目に + を付けてエンコードした動画も、PSP上で問題なく再生できました。
どうもありがとうございました。
入力ファイルを変えてみるとか、あやしいオプションを1個ずつ削除して、エラーの原因を特定するしかなさそうですね。
一番あやしいオプションは -metadata ですが、使用していなければ、見当が付きません。
やはりしらみつぶししかないですか〜
では、やってみます。
ありがとうございました。
もしかしたらもう解決しているかもしれませんが、
「-timestamp 〜」を使っていたら削ってみてください。
最近僕も同じエラーでハマって上のオプションを削ることで回避できました。
コメントありがとうございます。
その後、あいななさんは解決できたのでしょうかね?
他にも、同じエラーで困っていた方もいらっしゃると思いますので、どこかで、優さんのコメントが役に立っていると思います。
こんばんは
ご無沙汰してます
自分も
Missing=
error:1
で困ってたんですが
優さんの書き込みをみて
「-timestamp 〜」を削除したら
うまくいきました
ありがとうございました!!
お久しぶりです!
お返事が遅くなってすみません。
いろいろ試して、エラーが再現できなかったので確認できなかったのですが、思ったより、困っている方が大勢いるのかもしれませんね。
ご報告ありがとうございました。