Twitterに動画をアップしようとすると「動画ファイルに互換性がありません」と出る件

弾いてみた動画を編集してmp4にしてTwitterにアップロード・・・と思ったら、こんなエラーが出る。互換性ってなんやねん。

色々ググったり人に教えてもらって、ようやく分かった。Twitterにアップロード可能な動画の制限事項は、上の画像の「詳しい説明」のリンク先に書いてある話だけじゃなかった。

mp4でエンコードすると、コーデックにH.264ってのが使われて(iOS11とかにも採用されてるH.265っていう新しいコーデックもあるけど、それは一旦割愛)、これまた詳しい話は割愛するけど、そこで使われるBフレームってのが鍵だった。H.264ってGOPという単位で動画を区切って、基本的にそのGOPの中でフレーム間予測とかを使って動画データを圧縮していくらしい。このGOPというやつの扱いについては、openGOPとかclosedGOPとかいう規格がまたあって、Twitterにアップする場合にこのopen/closedGOPというのが関係してくる。
さっき「基本的にそのGOPの中で」と書いたけど、それはclosedGOPの話で、openGOPだとGOPを跨いでフレーム間予測とかやるらしい。そして、Twitterのアップ時に問題になるのはそのopenGOPというのを使った場合。Twitterのdeveloperサイトに、openGOPは使うなという事がひっそり書いてあった。「互換性」なんて言葉で片付けられてたけど、そういう事だったのか。。。
https://developer.twitter.com/en/docs/media/upload-media/uploading-media/media-best-practices

じゃあopenGOPを使わないエンコードやったらいいんじゃん?それってどうやるの?

それはエンコードする側次第なんだけど、今使ってるEDIUS Pro 8ではH.264でエンコードする時にopenGOP/closedGOPを選択できないっぽい。こうやって問題になってるんだから、おそらくopenGOPを使ってるんだと思うけど。GOP構造を選択してBフレーム自体を使わないってのは出来るっぽいので、ファイルサイズ大きくなるけどその設定でやってみた。エクスポートを発動して、エクスポーターにH.264を選択して、出力先ファイルを選択するところで「拡張設定」ってタブが現れるので、そこでGOP構造を選択。デフォルトはIBBPになっているので、Bを使わないIPPを選択。

これでエンコードしたら、Twitterで蹴られなくなった。やれやれだぜ。(´・ω・`)