ニコ動の新しい動画エンコード方式について (終)
前、ニコ動の新エンコード方式に対し、どうエンコードすればいいかみたいなことを書いたけど、その後わかったこともあるので、それを踏まえてすこし更新 + 今回の騒ぎの感想とか。
そもそもは…
そもそもは「1.5GBまであげられるようになります」という話からはじまった。
新しいエンコード方式の仕様
まあ、ふたを開けてみれば、「1.5GBあげられる」のはうそは言ってないんだけど、こう、なんというか期待していたものではなく、強制再エンコードで、かつ再エンコードの画質は720p 2Mbpsと低いというおまけつきだった。
新しいエンコード方式の仕様については、多くの方がテストして調べてくださった結果として、nicowikiに非常にわかりやすくまとめられている。
また、すでに新方式が適用となった方があげてくださったテスト動画などを少し調べさせていただいたりして、1秒に1回必ずキーフレームを入れるようになっていて、ビットレート割り当ての柔軟性が低いとか、なぜかMain Profileという制約がかかっているとかいうことを確認した。
x264guiExのニコ動向けプリセットは、少しでもニコ動で高画質で上げられる助けとなってほしい…ということで作っているのだが、今回の変更で特にこれまで100MBいっぱいを使って高ビットレート・高画質が可能だった短い動画については、ニコ動に高画質な動画を上げるのはかなり難しくなってしまった。もちろん、長時間の動画などはこれまでよりも大きな容量を使うことができるようになり、画質が改善する可能性はあるのだけど…。
この新しい仕様について、ちょっと愚痴を言ってみると…
・まずは…
再エンコしないで…(泣)
・最大でも720p
これまで100MB以内なら、1080pとかもあげられたのだが…。例えば、こんなの (1920x1080 29.97fps 2分53秒 4778kbps)とか。
・720pで最大でも2Mbps
720pだったら、少なくとも倍はないと、動きの多い動画(こういうのとか)などでは画質が安定しないと思う。というかそもそも動画によって必要なビットレートは全く違うので、ビットレート決め打ちじゃなくて、品質固定(x264でいうcrf)とかだとよいのだが…
毎秒シークできる必要は…?
ビットレートが最大でも2Mbpsと低いのに、毎秒キーフレームを入れることで、時間方向の圧縮が効きにくくなり、結果として画質を大きく引き下げる結果に。個人的には別に5秒ぐらいの間隔でもいいんじゃ…と思ったりするけど、やっぱり細かくシークしたい人もいるのかなあ。
元の動画のビットレートが低いと再エンコードでも低いビットレートが適用される
下限ビットレートとか、わけのわからないものを実装することになったきっかけ。同じビットレート与えれば十分というのはさすがに…。例えば、この動画 (1280x720 29.97fps 10分20秒 1287kbps)は100MBに収める遊びをしていたときのものだけど、これを1287kbpsだからといって1400kbpsでエンコードしたらとてもひどいことになると思う…。
新しいエンコード方式に対し、どうエンコードすればいいのか
この前のをすこし更新。
サーバー側で再エンコードされる以上、ポイントとしては以下のようになると思う。
1. 再エンコードの仕様を意識する
可能な限り、1280x720、2Mbpsというエンコードがされるようにしたいので、1280x720以上で、2Mbps以上、できれば15分未満の動画で投稿したい。もちろん、実況動画など、15分を超えてしまうのは避けられないものもあるのだろうけど、こういう場合も動画を分割する…という手もありかもしれない。
2. なるべく高画質で投稿する
3. 1.5GB以内ならファイルサイズはあまり気にしなくてよい
再エンコードされた動画は必ず画質が劣化してしまうのだけど、劣化をなるべく抑えたい。一般にエンコードする場合、もとの動画にノイズが多いとそのぶん余計にビットレートを必要とし、劣化が進みやすくなるので、投稿したものがもともと劣化していれば、さらに画質が落ちてしまう。つまり、再エンコードによる劣化を極力抑えるためにも、なるべく高画質でノイズの少ない動画を投稿したほうが良いと思う。あとは、もともとの動画にノイズが多い場合には、ノイズ除去をかけるというのも手かもしれない。
一方、アップロード上限は1.5GBと余裕があるので、長時間の動画でなければ、あまりファイルサイズに気を使わなくてもいい。なので、これまでのように重い設定で長時間かけてエンコードして高画質を狙う、といったことはしなくていいと思う。
もちろんファイルサイズが大きくなれば、アップロードに時間がかかってしまうので、ある程度は圧縮したいのだけど、その場合でも2Mbpsを下回らないようにしないと、より低いビットレートで再エンコードがかかってしまうので注意。
4. 小細工
短い動画なら、動画終了後ただの黒いフレーム静止画を貼って15分ぐらいに調整すると、ニコ動側は平均が2Mbpsになるようエンコードするので、黒べた部分のビットレートが低くなる分、動画部分のビットレートを逆に引き上げることができる…はず。どうしても画質が足りない場合にはありかもしれない。
必ず再エンコードされるとわかったときは、もう適当にエンコードすればよくなるので、x264guiExのニコ動用プリセットはお払い箱かと思ったのだけど、なるべく画質の劣化を抑えるには結局時間と解像度だけでなく2Mbps以上という条件を満たす必要があるなど、思ったより投稿用の動画をエンコードするのはいろいろな点に気を付ける必要があるみたい。
なので、やっぱりこのあたりを考慮してあるつんでれんこ(早速ニコ動の新方式も考慮した更新をしてくださっているようです)なり、Aviutlからならx264guiExなりを使ったほうがすこしは画質が上がるかなあ、と思う。ただ、そうした配慮を行ったとしても、絶対的にビットレートが足りないので、静止画中心の動画を除いて基本的には低い画質になってしまうが避けられないのが悲しい…。
とりあえず、この件に関するx264guiExの更新も終わったのと思うので、これに関する記事もこれで終わり。
そもそもは…
そもそもは「1.5GBまであげられるようになります」という話からはじまった。
新しいエンコード方式の仕様
まあ、ふたを開けてみれば、「1.5GBあげられる」のはうそは言ってないんだけど、こう、なんというか期待していたものではなく、強制再エンコードで、かつ再エンコードの画質は720p 2Mbpsと低いというおまけつきだった。
新しいエンコード方式の仕様については、多くの方がテストして調べてくださった結果として、nicowikiに非常にわかりやすくまとめられている。
また、すでに新方式が適用となった方があげてくださったテスト動画などを少し調べさせていただいたりして、1秒に1回必ずキーフレームを入れるようになっていて、ビットレート割り当ての柔軟性が低いとか、なぜかMain Profileという制約がかかっているとかいうことを確認した。
x264guiExのニコ動向けプリセットは、少しでもニコ動で高画質で上げられる助けとなってほしい…ということで作っているのだが、今回の変更で特にこれまで100MBいっぱいを使って高ビットレート・高画質が可能だった短い動画については、ニコ動に高画質な動画を上げるのはかなり難しくなってしまった。もちろん、長時間の動画などはこれまでよりも大きな容量を使うことができるようになり、画質が改善する可能性はあるのだけど…。
この新しい仕様について、ちょっと愚痴を言ってみると…
・まずは…
再エンコしないで…(泣)
・最大でも720p
これまで100MB以内なら、1080pとかもあげられたのだが…。例えば、こんなの (1920x1080 29.97fps 2分53秒 4778kbps)とか。
・720pで最大でも2Mbps
720pだったら、少なくとも倍はないと、動きの多い動画(こういうのとか)などでは画質が安定しないと思う。というかそもそも動画によって必要なビットレートは全く違うので、ビットレート決め打ちじゃなくて、品質固定(x264でいうcrf)とかだとよいのだが…
毎秒シークできる必要は…?
ビットレートが最大でも2Mbpsと低いのに、毎秒キーフレームを入れることで、時間方向の圧縮が効きにくくなり、結果として画質を大きく引き下げる結果に。個人的には別に5秒ぐらいの間隔でもいいんじゃ…と思ったりするけど、やっぱり細かくシークしたい人もいるのかなあ。
元の動画のビットレートが低いと再エンコードでも低いビットレートが適用される
下限ビットレートとか、わけのわからないものを実装することになったきっかけ。同じビットレート与えれば十分というのはさすがに…。例えば、この動画 (1280x720 29.97fps 10分20秒 1287kbps)は100MBに収める遊びをしていたときのものだけど、これを1287kbpsだからといって1400kbpsでエンコードしたらとてもひどいことになると思う…。
新しいエンコード方式に対し、どうエンコードすればいいのか
この前のをすこし更新。
サーバー側で再エンコードされる以上、ポイントとしては以下のようになると思う。
1. 再エンコードの仕様を意識する
可能な限り、1280x720、2Mbpsというエンコードがされるようにしたいので、1280x720以上で、2Mbps以上、できれば15分未満の動画で投稿したい。もちろん、実況動画など、15分を超えてしまうのは避けられないものもあるのだろうけど、こういう場合も動画を分割する…という手もありかもしれない。
2. なるべく高画質で投稿する
3. 1.5GB以内ならファイルサイズはあまり気にしなくてよい
再エンコードされた動画は必ず画質が劣化してしまうのだけど、劣化をなるべく抑えたい。一般にエンコードする場合、もとの動画にノイズが多いとそのぶん余計にビットレートを必要とし、劣化が進みやすくなるので、投稿したものがもともと劣化していれば、さらに画質が落ちてしまう。つまり、再エンコードによる劣化を極力抑えるためにも、なるべく高画質でノイズの少ない動画を投稿したほうが良いと思う。あとは、もともとの動画にノイズが多い場合には、ノイズ除去をかけるというのも手かもしれない。
一方、アップロード上限は1.5GBと余裕があるので、長時間の動画でなければ、あまりファイルサイズに気を使わなくてもいい。なので、これまでのように重い設定で長時間かけてエンコードして高画質を狙う、といったことはしなくていいと思う。
もちろんファイルサイズが大きくなれば、アップロードに時間がかかってしまうので、ある程度は圧縮したいのだけど、その場合でも2Mbpsを下回らないようにしないと、より低いビットレートで再エンコードがかかってしまうので注意。
4. 小細工
短い動画なら、動画終了後ただの黒いフレーム静止画を貼って15分ぐらいに調整すると、ニコ動側は平均が2Mbpsになるようエンコードするので、黒べた部分のビットレートが低くなる分、動画部分のビットレートを逆に引き上げることができる…はず。どうしても画質が足りない場合にはありかもしれない。
必ず再エンコードされるとわかったときは、もう適当にエンコードすればよくなるので、x264guiExのニコ動用プリセットはお払い箱かと思ったのだけど、なるべく画質の劣化を抑えるには結局時間と解像度だけでなく2Mbps以上という条件を満たす必要があるなど、思ったより投稿用の動画をエンコードするのはいろいろな点に気を付ける必要があるみたい。
なので、やっぱりこのあたりを考慮してあるつんでれんこ(早速ニコ動の新方式も考慮した更新をしてくださっているようです)なり、Aviutlからならx264guiExなりを使ったほうがすこしは画質が上がるかなあ、と思う。ただ、そうした配慮を行ったとしても、絶対的にビットレートが足りないので、静止画中心の動画を除いて基本的には低い画質になってしまうが避けられないのが悲しい…。
とりあえず、この件に関するx264guiExの更新も終わったのと思うので、これに関する記事もこれで終わり。