2010年01月07日

x264のエンコードでエラー(Error while opening encoder for output stream #0.0)

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
posted by あべちん at 11:25 | Comment(39) | TrackBack(0) | 携帯動画変換君
この記事へのコメント
ちょうど、昨日このエラーにハマっていたところです。
タイムリーな記事ありがとうございます。
Posted by 終電帰宅 at 2010年01月09日 00:37
終電帰宅さん、こんにちは。管理人です。

コメントありがとうございます。
お役に立てて良かったです。

同じ問題で困っている方がけっこういらっしゃるようなので、独立した記事にしてみました。

時々更新しておりますので、またお越しください。
Posted by あべちん at 2010年01月11日 17:39
自分もこの問題にはまってたので
この情報とてもありがたいです。
見事に解決しました!
ありがとうございます。
Posted by rallyraiden at 2010年01月12日 11:13
rallyraidenさん、こんにちは。管理人です。

コメントありがとうございます。
お役に立てて良かったです。

コメントしていただけると、管理人もやる気が出ます。

また時々お越しくださいませ。
Posted by あべちん at 2010年01月14日 13:00
でも、どうしてデフォルト値が5個以上だとエラーにするようになっているんでしょうかね。
Posted by ありがとうございます at 2010年01月17日 21:33
ありがとうございますさん、コメントありがとうございます。管理人です。

おそらく、x264単体でエンコードした時と、FFmpeg経由でエンコードした時の画質が違いすぎるので、注意をうながすためにエラーにしたのではないかと思います。

でも、どうして9個のうち5個以上なんでしょうね?

ご存じの方がいらっしゃったら教えて欲しいです。
Posted by あべちん at 2010年01月20日 01:04
こんにちは。
最近「-vpre」なるオプションを見付けたのですが、これを1つ付けるだけでこれらのデフォルト値を勝手に変えてくれる、というものなのでしょうか?ご意見聞きたいです。

x264がffmpegのデフォ値でエラーを吐くのは、他コーデックとの互換性を重視したffmpegのプリセットがx264にはあまり適切でないから、と聞きました。
ffmpegでx264に適切なプリセットを使いたい人のための機能が、この「-vpre」なのでしょうか…?
Posted by Mino at 2010年01月21日 03:20
Minoさん、こんにちは。管理人です。

見つかっちゃいましたかー!

というのは冗談ですが、「-vpre」オプションを使うためには、「ffpreset」というファイルが必要です。

libx264用の「ffpreset」ファイルは、FFmpegのソースコードに同封されています。

入手できたとしても、その後、環境変数を設定したり、「ffpreset」ファイルを参照するディレクトリが決まっていたり、けっこう面倒な作業があります。

全部説明するのもかなり面倒なので、その点はご容赦ください。

ということで、オプションを個別に設定した方が手間がかからないので、Windows環境で「-vpre」オプションを使っている人を検索してもあまり見かけないのだと思います。
Posted by あべちん at 2010年01月21日 23:44
明快なご回答、ありがとうございます。
そういうことなのですね。
Posted by Mino at 2010年01月22日 00:51
一応プリセット書きたい人の為に…
環境変数HOMEのディレクトリに.ffmpegというディレクトリを掘って、

libx286-プリセット名.ffpreset

というファイルにオプションを書きこんで、

-vcodec libx264 -vpre プリセット名

のオプションで行けました。
Posted by ありがとうございます at 2010年01月27日 03:32
ありがとうございますさん、こんにちは。管理人です。

簡単にまとめると、おっしゃるとおりです。

なのですが、全く分からない人にとっては、

環境変数HOMEとは何か?

ファイルに書き込むオプションの書式はどうなっているのか?

プリセット名とは何か?

など、説明しなければならないことがたくさんあり、コマンドラインで直に設定した方が手間がかからないため、あえて説明しませんでした。

その他、自前でFFmpegをビルドするためのmsysでもHOMEという環境変数を参照しており、Windows側で設定すると問題がありました。

ということで、ご理解いただければ幸いです。
Posted by あべちん at 2010年01月28日 08:20
こんにちは。
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フレームが必要になるのはどこからなのでしょうか?
Posted by Mino at 2010年02月08日 00:31
Minoさん、こんにちは。管理人です。

x264単体の場合、subme(subq)のデフォルト値は7です。

FFmpeg経由のlibx264の場合、subqのデフォルト値は8になっていました。

「subq値でBフレームが必要になる」というのが分かりませんが、設定値の意味については、以下のページの説明どおりだと思います。
http://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping

バージョンアップでデフォルト値が変わったりして、修正されていないのかもしれません。
Posted by あべちん at 2010年02月08日 03:53
了解しました。
いつもありがとうございます。
Posted by Mino at 2010年02月08日 05:34
感動しました!
とりあえず今は感謝の気持ちを伝えたいです。
ありがとうございます!
Posted by koha at 2010年02月25日 17:22
kohaさん、こんにちは。管理人です。

コメントありがとうございます。
お役に立てたようで良かったです。

またお越しくださいませ。
Posted by あべちん at 2010年03月02日 08:36
あべちんさんに心の底から感謝を述べます。
もっと勉強します。
Posted by teramoto at 2010年05月26日 16:42
こんにちは。
http://mobilehackerz.jp/archive/wiki/index.php?SH-07B
こちらの設定でエンコードエラーが出る為
この記事のオプションを追加したいのですが
具体的にどこに追加すればいいのでしょうか。
Posted by non at 2010年06月23日 18:29
>>non さん

Command2の適当な所(-crfと-fの間ぐらいが分りやすいのではないでしょうか?)に入れてあげればおkですよ。
Posted by 優 at 2010年06月23日 21:05
>>優さん

う〜ん、NeroAACコーデックを使用した最新版FFmpeg用設定だと何故かことごとくエンコード失敗してしまうのですが、おかげさまでこの記事にあるエラーは回避する事ができました。
どうもありがとうござました。
Posted by non at 2010年06月24日 17:56
teramotoさん、こんにちは。管理人です。

コメントありがとうございます。
コメントを見逃していて、お返事が遅くなりました。
申し訳ありません。

私も分からないことが多々ありますが、皆様のご協力により成り立っております。
またどうぞお越しください。
Posted by あべちん at 2010年06月29日 01:59
nonさん、優さん、こんにちは。管理人です。

コメントありがとうございます。

優さん
代わりに回答していただいて、ありがとうございました。
回答が遅い時がありますので、とても助かります。

nonさん
その後、NeroAACコーデックを使用した時のエラーは、解決しましたでしょうか。
Posted by あべちん at 2010年06月29日 02:05
おっ、それについての投稿ありがとうございました。トピックは興味深いが表示されます。
Posted by cheap coach bags at 2011年03月02日 12:00
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -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 "<%TemporaryFile%>.MP4""
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""

入れても同じエラーが出てしまうのですが解決策はありますか?
Posted by NO_NAME at 2011年03月25日 15:53
補足
ffmpegはrev.18607です。
Posted by NO_NAME at 2011年03月25日 17:11
忙しい時に申し訳りません。自己解決しました。
Posted by NO_NAME at 2011年03月26日 16:25
NO_NAMEさん、こんにちは。管理人です。

rev.18607で、NO_NAMEさんの設定で試してみたら-pass 2でエラーになりました。

他の方にも参考になると思いますので、どのようにして解決されたか教えていただけませんでしょうか。
Posted by あべちん at 2011年03月26日 17:59
http://blog.k-tai-douga.com/article/26140648.html
こちらの記事の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""

Posted by NO_NAME at 2011年03月30日 15:28
NO_NAMEさん、こんにちは。管理人です。
コメントありがとうございます。

過去のコメントに書いてあったとは気が付きませんでした。

rev.18607あたりはデフォルト値が違うのかもしれません。
Posted by あべちん at 2011年03月31日 21:02
はじめまして。
検索で飛んできました。
この件(エンコード時のエラー)で、二晩寝ずにやっていたので、これを知ったときは、めちゃくちゃうれしかったです。
大変助かりました。ありがとうございます。
Posted by 寝不足 at 2011年05月03日 03:51
寝不足さん、こんにちは。管理人です。

コメントありがとうございます。
お役に立ててよかったです。
その後、ゆっくりお休みできましたでしょうか?

時々更新していますので、またお越しください。

Posted by あべちん at 2011年05月06日 14:44
こんにちは。
私も上の方の
http://mobilehackerz.jp/archive/wiki/index.php?SH-07B
この設定なのですが
Command2の-crfと-fの間は12とあるんですが
これはどのように追加すればよいのですか?
Posted by tk at 2011年08月11日 10:39
tkさん、こんにちは。管理人です。

携帯動画変換君のインストールディレクトリにある、「Transcoding.ini」の該当する箇所を、メモ帳(notepad)か何かで編集するだけなのですが、そういう意味ではないですか?
Posted by あべちん at 2011年08月14日 10:16
管理人さん、こんにちは。

どうもCommand2のどこに追加すればよいかわからず困っていたのですが、アスペクト比の後ろに追加するとできました。

お騒がせしてすみませんでした(汗)
Posted by tk at 2011年08月14日 12:53
tkさん

解決できて良かったです。

古いコメントを読み直したら、優さんのコメントは、-crf 12 と -f mp4 の間に追加するということですね。

よっぽど変な所に追加しなければ大丈夫なので、何か問題があったのかと、深読みしてしまいました。

失礼しました。
Posted by あべちん at 2011年08月14日 16:34
初めて質問いたします。
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ファイルは発見できたのですが、どれをなおせばいいのか…
場違いの質問でしたら申し訳ありません。
Posted by ryoffy at 2011年12月06日 00:58
ryoffyさん、こんにちは。管理人です。

たしかに、ffmpegが出しているエラーメッセージのようですね。

ですが、WeddingMoviePhotograph4というソフトを使ったことがありませんので、何が原因かわかりません。

まずは、そのソフトのサポートに問い合わせてみてはいかがでしょうか?
Posted by あべちん at 2011年12月06日 22:07
管理人様、ご丁寧にご回答頂きありがとうございます。サポートに聞こうと思ったのですが、シリアルコードがなく、八方塞がりにて、この掲示板を見つけ投稿させて頂いた次第です。仕様もご説明できていないのに、申し訳ありませんでした。
サポートを受けれる手段を探してみます!
Posted by ryoffy at 2011年12月07日 00:44
ryoffyさん

なるほど、そういうことですか。

WeddingMoviePhotograph4はffmpegのライブラリを使っているんでしょうかね。
ググってみたのですが、参考になる情報は見つけられませんでした。
Posted by あべちん at 2011年12月09日 01:34
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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