FFmpegでx264のエンコードをする場合、オプションに「-vcodec libx264」を指定しますが、以下のようなエラーが出てエンコードできないことがあります。
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
この場合、以下のオプションを追加すれば解決できます。
-g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286
このエラーの原因は、libx264側でFFmpegのデフォルト値を判定し、一定の条件を満たすとエラーで終了するようになっているためです。
判定の対象となるFFmpegのデフォルト値は、以下の9つです。
(1) -me_range 0
(2) -qdiff 3
(3) -g 12
(4) -qmin 2
(5) -qmax 31
(6) -qcomp 0.5
(7) -i_qfactor 0.8
(8) -b_qfactor 1.25
(9) -partitions 指定なし、かつ -subq 8
(1)〜(9)のうち、5つ以上デフォルト値の場合にエラーで終了します。
(7)については、x264に渡す時に
1 / i_qfactor = 1 / 0.8 = 1.25
となっており、x264側ではデフォルト値が1.25として判定されます。
FFmpegのエラーメッセージが、「bit_rate, rate, width or height」となっているため、ビットレートや画面のサイズが間違っているのかと勘違いしやすいですね。
x264の各オプションの意味について知りたい方は、以下のサイトをご覧ください。
x264 ffmpeg mapping and options guide
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/34604396
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/34604396
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
タイムリーな記事ありがとうございます。
コメントありがとうございます。
お役に立てて良かったです。
同じ問題で困っている方がけっこういらっしゃるようなので、独立した記事にしてみました。
時々更新しておりますので、またお越しください。
この情報とてもありがたいです。
見事に解決しました!
ありがとうございます。
コメントありがとうございます。
お役に立てて良かったです。
コメントしていただけると、管理人もやる気が出ます。
また時々お越しくださいませ。
おそらく、x264単体でエンコードした時と、FFmpeg経由でエンコードした時の画質が違いすぎるので、注意をうながすためにエラーにしたのではないかと思います。
でも、どうして9個のうち5個以上なんでしょうね?
ご存じの方がいらっしゃったら教えて欲しいです。
最近「-vpre」なるオプションを見付けたのですが、これを1つ付けるだけでこれらのデフォルト値を勝手に変えてくれる、というものなのでしょうか?ご意見聞きたいです。
x264がffmpegのデフォ値でエラーを吐くのは、他コーデックとの互換性を重視したffmpegのプリセットがx264にはあまり適切でないから、と聞きました。
ffmpegでx264に適切なプリセットを使いたい人のための機能が、この「-vpre」なのでしょうか…?
見つかっちゃいましたかー!
というのは冗談ですが、「-vpre」オプションを使うためには、「ffpreset」というファイルが必要です。
libx264用の「ffpreset」ファイルは、FFmpegのソースコードに同封されています。
入手できたとしても、その後、環境変数を設定したり、「ffpreset」ファイルを参照するディレクトリが決まっていたり、けっこう面倒な作業があります。
全部説明するのもかなり面倒なので、その点はご容赦ください。
ということで、オプションを個別に設定した方が手間がかからないので、Windows環境で「-vpre」オプションを使っている人を検索してもあまり見かけないのだと思います。
そういうことなのですね。
環境変数HOMEのディレクトリに.ffmpegというディレクトリを掘って、
libx286-プリセット名.ffpreset
というファイルにオプションを書きこんで、
-vcodec libx264 -vpre プリセット名
のオプションで行けました。
簡単にまとめると、おっしゃるとおりです。
なのですが、全く分からない人にとっては、
環境変数HOMEとは何か?
ファイルに書き込むオプションの書式はどうなっているのか?
プリセット名とは何か?
など、説明しなければならないことがたくさんあり、コマンドラインで直に設定した方が手間がかからないため、あえて説明しませんでした。
その他、自前でFFmpegをビルドするためのmsysでもHOMEという環境変数を参照しており、Windows側で設定すると問題がありました。
ということで、ご理解いただければ幸いです。
subqオプションについてですが、x264のデフォルト値はいくらなのでしょうか?
あべちんさんの書かれているこちらのサイト(http://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping)ではsubq 6がデフォルトだと行っていますが、こちら(http://mewiki.project357.com/wiki/X264_Settings)や、それを参考にして書かれたと思われるこちら(http://nicowiki.com/%E6%8B%A1%E5%BC%B5%20x264%20%E5%87%BA%E5%8A%9B%EF%BC%88GUI%EF%BC%89%E3%81%AE%E8%A8%AD%E5%AE%9A%E9%A0%85%E7%9B%AE%E3%81%A8%E3%81%9D%E3%81%AE%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.html)ではsubq (subme) 7がデフォルトだと言っています。
また、subq値でBフレームが必要になるのはどこからなのでしょうか?
x264単体の場合、subme(subq)のデフォルト値は7です。
FFmpeg経由のlibx264の場合、subqのデフォルト値は8になっていました。
「subq値でBフレームが必要になる」というのが分かりませんが、設定値の意味については、以下のページの説明どおりだと思います。
http://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping
バージョンアップでデフォルト値が変わったりして、修正されていないのかもしれません。
いつもありがとうございます。
とりあえず今は感謝の気持ちを伝えたいです。
ありがとうございます!
コメントありがとうございます。
お役に立てたようで良かったです。
またお越しくださいませ。
もっと勉強します。
http://mobilehackerz.jp/archive/wiki/index.php?SH-07B
こちらの設定でエンコードエラーが出る為
この記事のオプションを追加したいのですが
具体的にどこに追加すればいいのでしょうか。
Command2の適当な所(-crfと-fの間ぐらいが分りやすいのではないでしょうか?)に入れてあげればおkですよ。
う〜ん、NeroAACコーデックを使用した最新版FFmpeg用設定だと何故かことごとくエンコード失敗してしまうのですが、おかげさまでこの記事にあるエラーは回避する事ができました。
どうもありがとうござました。
コメントありがとうございます。
コメントを見逃していて、お返事が遅くなりました。
申し訳ありません。
私も分からないことが多々ありますが、皆様のご協力により成り立っております。
またどうぞお越しください。
コメントありがとうございます。
優さん
代わりに回答していただいて、ありがとうございました。
回答が遅い時がありますので、とても助かります。
nonさん
その後、NeroAACコーデックを使用した時のエラーは、解決しましたでしょうか。
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "<%TemporaryFile%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 21 -bufsize 128 -g 240 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -s 480x272 -deinterlace -r 29.97 -sc_threshold -8000 -cqp 15 -maxrate 1500k -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
入れても同じエラーが出てしまうのですが解決策はありますか?
ffmpegはrev.18607です。
rev.18607で、NO_NAMEさんの設定で試してみたら-pass 2でエラーになりました。
他の方にも参考になると思いますので、どのようにして解決されたか教えていただけませんでしょうか。
こちらの記事のtest typeさん等のコメントを参考に↓の様に変更したところ、変換することができました。
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "<%OutputFile%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 21 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 29.97 -sc_threshold 80 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1800k -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "<%OutputFile%>" -timestamp "<%TimeStamp%>" -flags bitexact -vcodec libx264 -coder 1 -level 21 -bufsize 128 -g 240 -s 480x272 -deinterlace -r 29.97 -sc_threshold 80 -qcomp 1.0 -qmin 2 -qmax 20 -maxrate 1800k -acodec libfaac -ac 2 -ar 48000 -ab 128k -f psp "<%OutputFile%>.MP4""
コメントありがとうございます。
過去のコメントに書いてあったとは気が付きませんでした。
rev.18607あたりはデフォルト値が違うのかもしれません。
検索で飛んできました。
この件(エンコード時のエラー)で、二晩寝ずにやっていたので、これを知ったときは、めちゃくちゃうれしかったです。
大変助かりました。ありがとうございます。
コメントありがとうございます。
お役に立ててよかったです。
その後、ゆっくりお休みできましたでしょうか?
時々更新していますので、またお越しください。
私も上の方の
http://mobilehackerz.jp/archive/wiki/index.php?SH-07B
この設定なのですが
Command2の-crfと-fの間は12とあるんですが
これはどのように追加すればよいのですか?
携帯動画変換君のインストールディレクトリにある、「Transcoding.ini」の該当する箇所を、メモ帳(notepad)か何かで編集するだけなのですが、そういう意味ではないですか?
どうもCommand2のどこに追加すればよいかわからず困っていたのですが、アスペクト比の後ろに追加するとできました。
お騒がせしてすみませんでした(汗)
解決できて良かったです。
古いコメントを読み直したら、優さんのコメントは、-crf 12 と -f mp4 の間に追加するということですね。
よっぽど変な所に追加しなければ大丈夫なので、何か問題があったのかと、深読みしてしまいました。
失礼しました。
PC初心者なのですが、WeddingMoviePhotograph4というソフトを使用し、DVD作成を行おうとしております。
当ソフトでいわゆる「DVDへの書き込み」をしようとすると下記のエラーがでます。
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
この場合、このソフト内に同梱されている何かにオプション設定を加えれば解決するのでしょうか。
幾つかのiniファイルは発見できたのですが、どれをなおせばいいのか…
場違いの質問でしたら申し訳ありません。
たしかに、ffmpegが出しているエラーメッセージのようですね。
ですが、WeddingMoviePhotograph4というソフトを使ったことがありませんので、何が原因かわかりません。
まずは、そのソフトのサポートに問い合わせてみてはいかがでしょうか?
サポートを受けれる手段を探してみます!
なるほど、そういうことですか。
WeddingMoviePhotograph4はffmpegのライブラリを使っているんでしょうかね。
ググってみたのですが、参考になる情報は見つけられませんでした。