2023年8月26日土曜日

Mayaで出力したプレイブラストをX(Twitter)にアップロードする方法

Mayaでプレイブラストを作成した際、それをX(以降Twitter)にアップロードしたいと思う時があるかと思うんですが、生成されたプレイブラストをTwitterにアップロードするのはやや骨が折れます。

どういうことなのか実際に見てみましょう。


※ ちなみにこの記事は一番下の方に解決方法が載っているので、お急ぎの方は色々とすっ飛ばして下から見てください。



今回は私が過去に作成したこちらの回し蹴りのモーションを使って実演してみたいと思います(中身はあまり関わってこないので、物は何でもいいと思うのですが)。




まずは以下の設定でプレイブラストを生成してみたいと思います。

Render Settings:

Renderable Camera: camera1
Image Size Presets: HD720

PlayBlast Settings:

Format: avi
Quality: 100
Display Size: From Render Settings


カメラは自分で作ってます。設定については主に自分が変更したものを書いています。


うまくいけばavi形式のプレイブラストが生成されます。

この生成されたaviファイルを今度はmp4ファイルに変換します。

理由としてはPCのWebブラウザからTwitterに対して動画をアップロードする場合、その形式はmp4である必要があるからです。スマホからの場合はmovでもいいらしいとか(未確認)。


今回は動画形式の変換にffmpegを使用します。

インストーラ(もしくはバイナリ)は適当なところからダウンロードしてきます。

嘘です。適当なところから持ってくると色々と危険が危ないので、公式サイトからダウンロードしてきます。ちなみに今回はWindows前提です。

https://www.ffmpeg.org/


インストーラを持ってきたらWindowsにffmpegをインストールします。

ffmpegをWindowsにインストールする方法については既に色んな人が書いてると思うし面倒なので、ここでは何も書きません。
他人のブログなりYoutubeなりを参照して下さい。
最近でしたらChatGPTに聞いてもいいです。
何にしても本ブログから言えることは「ちゃんとPATHが通ってるか確認せい」だけです。


インストールが完了したら以下のコマンドで生成したプレイブラストファイルをmp4に変換します。

ffmpeg -i input.avi output.mp4


ffmpegがちゃんとインストールできていれば上記のコマンドでoutput.mp4という名前の動画ファイルが生成されたことと思います。


この変換されたmp4ファイルをTwitter上にアップロードしましょう。

Twitterの投稿画面を開いて、ファイルをドラッグ・アンド・ドロップすると無事アップロードが始まり………






はい、終わりません。

いつまで経っても処理中(99%)のままです。無限アップロード編が始まっています。

このままでは、モモちゃん(リグの名前)がまんじりとも動きません。


「いやいや、処理中って書いてあるんだし、実際裏ではちゃんと処理してるんでしょ?」と思われるかもしれませんが、これに関してはブラウザのコンソールを開いて見てみると、定期的に以下のjsonに対してGETリクエストを叩いてるのがわかります。


https://upload.twitter.com/i/media/upload.json?command=STATUS&media_id={media_id}


レスポンスを見てみると、以下のような内容が返っていることがわかります。



「ううむ……なんか色々書いてあるぞ……?」と、思わず眉根が寄ってしまいそうではありますが、怒られそうなくらい雑な書き方をすると、「お前のアップロードしたファイル、何かおかしいぞ」って言われてるんですね。

processing_percentの値もずっと99で止まっていることがわかります。

以降もずっとこのjsonリクエストが発行され続け、同じレスポンスが返ります。つまりあのまま待ってても永久に99%で止まっているわけです。


「えー、おかしいって何よ? mp4ならアップロードできるんじゃないの?」と文句をたれてみたくなりますが、どうやら雑にmp4に変換するんじゃ駄目なようです。


この事象については何となく前々からそうだった気もするので、今回に限ってはイーロンのせいではないと思うのですが、「せっかく自分が作ったモーションを世界中の人に見てもらいたいのに、Twitterにアップロードできないのは悲しい!!」なんて方もいるんじゃないでしょうか。
YoutubeやVimeoなんかがあると言っても、作品を見てもらえる場がひとつでも多くあるのはいいことですからね。


そこで今回はこの問題をどうにかしたいと思います。


問題解決には引き続きffmpegツールを使用します。

以下の手順に沿ってプレイブラストを生成・変換していきます。

  1. Mayaのレンダー設定をHD_720にする

  2. プレイブラストのディスプレイサイズをFrom Render Settingsにする

  3. aviで動画を生成する

  4. 以下のコマンドで生成したaviファイルをmp4に変換する

ffmpeg -i input.avi -vcodec libx264 -pix_fmt yuv420p -strict -2 -acodec aac output.mp4

手順1,2についてはいるかいらないか不明です。別にHD_540とかでも問題ないかも。


それでは手順4のコマンドで生成された動画を改めてTwitterでアップロードしてみたいと思います。



今度は見事プレイブラストの投稿に成功しました。
あとはこのままハッシュタグとか付けてツイートを投稿するだけです。


原因についてですが、どうもピクセルフォーマットやコーデックなどの設定もアップロードの可否に影響してくるようです。




というわけで今回はMayaで出力したプレイブラストをTwitterにアップロードする方法をご紹介しました。
やや面倒な手順を踏む必要はありましたが、ちゃんとアップロードすることができましたね。


今回はMayaを例にあげましたが、同じようにプレイブラストを吐けるDCCツールであれば3dsmaxやBlenderでも問題ないかと思います(私はそれらでプレイブラストを作ったことがないので、そもそもそういった機能があるのかわからないのですが)。


この方法で上手くいくかどうかは他の条件も絡んでくるのかもしれませんが、ひとまず数秒のプレイブラストであればご覧のように問題なくアップロードすることが可能です。


また今回はプレイブラストについて書きましたが、それ以外のアップロードできない動画についても同じやり方が使えるかと思いますので、是非参考にして下さい。