2009年02月01日

FFmpeg rev.16905 ダウンロード

FFmpeg最新版(2009/1/31現在)、rev.16905のWindows用バイナリを置いておきます。

今回は、libavcodec/libmp3lame.c の不具合で、音声にlameを指定するとエンコードの最後に落ちるという問題と、
AACのデコードにlibfaacが使用されず、FFmpeg内蔵のデコーダーが使用されて、HE-AACが正常にデコード出来ないという問題を修正しました。

Craving Explorerのサポート掲示板の情報と、Craving ExplorerのWiki「同梱ffmpegのlameエンコードの不具合」を参考にさせていただきました。

その他、使い方は今までと変わりません。

ffmpeg_bin-16905.zip
ffmpeg_bin_pentium4-16905.zip (Pentium4最適化版)
ffmpeg_bin_core2-16905.zip (Core2最適化版)
ffmpeg_bin_athlon64-16905.zip (Athlon64最適化版)

2013/02/09 削除しました。

以下のライブラリをアップデートしました。
x264 rev.1096

今回より、自前でビルドしたMinGW gcc4.3.3を使用しています。

バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Sempronの一部など)をお使いの方は、最適化無し版を使ってみてください。

zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
pthreadGC2.dllは不要です。

携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。

携帯動画変換君の設定は、こちらの記事を参考にしてください。

FFmpegのコンパイルは、こちらの記事を参考にしてください。

コンパイル環境:MinGW gcc4.3.3

各ライブラリのバージョンは、以下の通りです。
nasm-2.05.1
yasm-0.7.2
pthreads-w32 release 2.9.0
zlib-1.2.3
a52dec-0.7.5-cvs
amrnb-7.0.0.2 (3GPP 26104-700)
amrwb-7.0.0.3 (3GPP 26204-700)
faac-1.26
faad2-2.6.1
gsm-1.0.12
lame-398-2
libnut-661
libogg-1.1.3
libvorbis-1.2.0
libtheora-1.0
x264 rev.1096
xvidcore-1.2.1

最適化オプションは、以下のようにしています。
configureのオプションに--enable-smallを付けると、gccのオプションに-Osが付き、-O4にしても無駄なことが分かりましたので、-O4は外しました。
--enable-smallを付けなければ、gccのオプションに-O3が付きます。

最適化無し版
--extra-cflags="-mtune=generic -mno-sse2"

Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse"

Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse"

Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"

configureオプションは以下の通りです。
$ ./configure --enable-memalign-hack --enable-postproc --enable-swscale --enable-gpl --enable-libfaac --disable-decoder=aac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-ffserver --disable-ffplay --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"

※--extra-cflagsは、最適化の種類により異なります。

configureのメッセージはこちら
posted by あべちん at 04:54 | Comment(26) | TrackBack(0) | FFmpegダウンロード
この記事へのコメント
管理人様、いつもお世話になっております
ffmpeg修正お疲れ様です!
今回も大事に使わせていただきます

私も何度かffmpegのコンパイルに挑戦しているのですが、ところどころエラーになってしまい、完成には至っておりません(笑
今後、自力でコンパイルできるようにがんばってみます!
Posted by yuhei at 2009年02月03日 00:45
以下のパッチをあててもらえませんでしょうか?
avi を変換するときにエラーが出るもので。

http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-December/057353.html

http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081212/61335cf7/attachment.txt


Posted by kyojee at 2009年02月03日 12:18
管理人さんffmpegの更新お疲れ様です。とても重宝しています。

動画変換君でflvからの変換で動画だけ変換して音声はコピーしたいのですが音声のコマンドを-acodec copyとしてもerror 1とでてうまくいきません。
コマンドはどのようにすればいいのでしょうか?
Posted by ま〜ちゃる at 2009年02月04日 21:23
ま〜ちゃるさん。
FLVからの変換ということですが、-acodec copy なら 音声はmp3になりますよね。
変換するつもりの形式は何でしょうか?
おそらく、そこが原因だとおもいます。
Posted by kei at 2009年02月05日 21:23
keiさん返信ありがとうございます。

変換はflvからH.264(mp4)へなのですが、音声をなるべく劣化させないでmp4にしたいのです。
そこでflvから映像だけを変換して音声は変換なしにしたかったのですが、うまくいかなかったので質問させていただきました。

 もしかして"音声と映像を分離して映像を変換し音声と合成"という手順じゃないと無理なんでしょうか?
Posted by at 2009年02月05日 23:55
横から失礼します…
ま〜ちゃるさん
flvの音声部分はmp3で、H.264(mp4)の音声部分はaac(m4a)という決まりがあるので、h.264の動画にmp3の音声という組み合わせは不可能なのです。
エラーが出るのはそれが原因です。
Posted by TOMO at 2009年02月06日 06:27
TOMOさん、説明ありがとうございます。
ま〜ちゃるさん
そういうことなので音声をaacに変換するしかありません。
音質を劣化させたくない気持ちはわかりますが。
Posted by kei at 2009年02月06日 07:12
keiさん、TOMOさんご教授ありがとうございます。

なるほど、H.264(mp4)の音声はmp3では無理なんですね。勉強になりました。
Posted by ま〜ちゃる at 2009年02月06日 19:59
管理人様、はじめまして。
ダウンロードさせていただき
無事操作することができました。
ありがとうございました!
Posted by rie at 2009年02月09日 01:00
2passで変換するとエラーが出てしまいます。
なにかおかしいんでしょうか?
これなんですが
Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -pass 1 -passlogfile "<%OutputFile%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -8000 -cqp 20 -maxrate 1500k -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Command1=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -pass 2 -passlogfile "<%OutputFile%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -8000 -cqp 20 -maxrate 1500k -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Posted by test type at 2009年02月09日 23:45
test typeさん
エンコードの設定よりも、出てきたエラーを貼った方が原因がわかりやすいと思いますよ…
で、エラーの内容を読めばそこに解決方法もあると思います。
Posted by nns at 2009年02月10日 06:26
わかりました。下のように出てきてしまいます。ビットレートがなんとかって意味なのはわかるんですが…
Error while opening codec for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Posted by test type at 2009年02月10日 18:40
yuheiさん、こんにちは。管理人です。
いつもコメントしていただき、ありがとうございます。

コンパイルの手順を見直して、記事を書き直しましたので、参考にしてみてください。

上手くいくと良いのですが…。
Posted by あべちん at 2009年02月12日 00:39
kyojeeさん、こんにちは。管理人です。
コメントありがとうございます。

リンク先の記事を読んでみたのですが、いまいち理解できませんでした。

エラーの状況なども不明ですので、パッチの適用はしばらく様子見とさせてください。

よろしくお願いします。
Posted by あべちん at 2009年02月12日 00:41
ま〜ちゃるさん、keiさん、TOMOさん、こんにちは。管理人です。
なかなかお返事できず、申し訳ありません。

FLVでも音声がMP3でない場合があり、その場合、-acodec copyだと失敗します。
変換後、音が出なくなったりします。
error 1の原因は分かりません…。

音声を再エンコしても良いのであれば、-acodec libmp3lameを指定して、H.264+MP3という動画も可能です。
音声がMP3のFLVなら、音声は再エンコせずに-acodec copyとして、映像部分だけエンコできます。

また、音声がAACのFLVというのも存在します。

FLVやMP4というのはコンテナ(入れ物)のフォーマットの種類なので、映像と音声の組み合わせは色々あります。

詳しくは、この辺りをどうぞ。
http://ja.wikipedia.org/wiki/Flash_Video
http://ja.wikipedia.org/wiki/MP4
Posted by あべちん at 2009年02月12日 01:03
rieさん、こんにちは。管理人です。
コメントありがとうございます。

動作報告、ありがとうございました。
不定期で更新しておりますので、また時々お越し下さいね。
Posted by あべちん at 2009年02月12日 01:06
test typeさん、nnsさん、こんにちは。管理人です。

nnsさん、フォローありがとうございました。

test typeさんのオプションで試してみたのですが、確かに、1pass目が終わった後、2pass目で失敗しますね。

直訳すれば、画像のビットレート、(フレーム)レート、画面の幅、高さのいずれかのパラメータが不正かもしれないということですが、何かオプションが不足しているのでしょうか?

また何か分かりしだい、コメントします。
Posted by あべちん at 2009年02月12日 01:18
test typeさん、こんにちは。
設定の方、拝見しました。-cqp 20 が一番の原因ではないでしょうか?
固定品質や固定量子化係数(-crfと-cqp)を使うと、2pass目で必ずエラーになるようです。
-cqp 20に拘らなければ、ビットレート指定にしてみたらどうでしょうか。
どうしてもq=20にしたいのでしたら、-qcomp 1.0にして-qmin や-qmax を使って制御できるかもしれません。

まちがってたら、ごめんなさい。
Posted by kei at 2009年02月12日 11:56

Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -8000 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1500k -passlogfile "<%TemporaryFile%>" -pass 1 -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Command1=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -8000 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1500k -passlogfile "<%TemporaryFile%>" -pass 2 -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Command2="rm "<%OutputFile%>-0.log""


でやってみました。
エラーがまたでたんですが、設定まちがえているのでしょうか?
Posted by test type at 2009年02月12日 23:32
そうですか。
ならあとは、-sc_threshold を-8000から80にしてみてください。
一応これでできるとおもいます。
x264の場合、-1で無効 0がデフォルト で-1〜100までが指定範囲です。
mpeg4やxvidとは値が違います。
Posted by kei at 2009年02月13日 07:05
Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -80 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1500k -passlogfile "<%TemporaryFile%>" -pass 1 -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Command1=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 30 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 30 -sc_threshold -80 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1500k -passlogfile "<%TemporaryFile%>" -pass 2 -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""

これでいいでしょうか?
また同じエラーが出てしまいました。
2passと1passではどのくらい差ができるんでしょうか。
Posted by test type at 2009年02月14日 22:18
その設定で以前書いていただいたエラーと同じでしたら、もしかしたら-qminを10位(デフォルト値は1ですがh.264では低すぎる)に変更、-qmaxはデフォルト値の31辺り、それでも出るならもう少し大きい値で試してみると上手くいくかもしれません。

-qmaxの値を大きくしているので、画質は落ちるとは思いますが…
Posted by nns at 2009年02月15日 03:10
test type さん
すいません。説明のしかたが悪かったですね。

-sc_threshold 80 でお願いします。-1無効 0デフォルト 1〜100 で、プラスの値が大きくなるほどIフレームをたくさんつかいます。

そし、それでもエラーが出るようでしたら、コレを使ってみてください。

Command0=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -passlogfile "2pass-log" -pass 1 -r 30000/1001 -vcodec libx264 -coder 1 -level 30 -sc_threshold 80 -qcomp 1.0 -qmin 2 -qmax 20 -aspect 16:9 -s 480x272 -acodec libfaac -profile aac_low -ac 2 -ar 48000 -ab 126k -f psp "<%TemporaryFile%>.mp4""
Command1=""<%AppPath%>\cores\ffmpeg2" -y -i "<%InputFile%>" -passlogfile "2pass-log" -pass 2 -r 30000/1001 -vcodec libx264 -coder 1 -level 30 -sc_threshold 80 -qcomp 1.0 -qmin 2 -qmax 20 -aspect 16:9 -s 480x272 -acodec libfaac -profile aac_low -ac 2 -ar 48000 -ab 126k -f psp "<%OutputFile%>.mp4""
Command2="rm "2pass-log-0.log""
Command3="rm "<%TemporaryFile%>.mp4""

一応、私はこれでできましたよ。
PSPでも、問題なく再生しましたし。

それから、2passについてですが。
それほど拘りがなければ必要ないかと、個人的には思っています。
しないよりマシぐらいですね。
Posted by kei at 2009年02月15日 06:14
ありがとうございます。
できました。
これで動画を楽しめます。
Posted by test type at 2009年02月15日 13:24
再度申し訳ないんですが、Iフレームとはどんなものですか?
wikipediaなど調べたんですがよくわからなくて。
多い方がいいんでしょうか?
それによって変換の時間とかかわりますか?
Posted by test type at 2009年02月15日 22:26
test typeさん。
Iフレームとは、PフレームやBフレームの元になる一枚の画像のようなフレームで、シークの基点になるなど基準となるフレームです。

基本的にはIフレームが多い方が画質は上がりますが、そのぶんサイズも大きくなります。

大体そんな感じだったと思います。
Posted by kei at 2009年02月16日 20:54
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26140648
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック