Twitterの動画が140秒まで可能になったので最適解を求めて仕様を確認してみる

最近Twitterの動画投稿による長さの制限が30秒から140秒になったのでTwitterの動画の仕様を調べてみました。

とりあえず Twitter Developers

Twitter Developers に動画の仕様が書いてあります。
https://dev.twitter.com/rest/media/uploading-media

「Video specifications and recommendations」の欄を必要そうな範囲だけ見てみる。

  • 動画の時間は最低0.5秒から最大140秒まで
  • 解像度は最低32x32から最大1280x1024まで
  • アスペクト比は1:3、3:1より細くならないように
  • フレームレートは最大40fpsまで
  • 音声はモノラルとステレオが使えるよ

動画の容量については従来と変わらず最大15MBみたいです。
https://dev.twitter.com/rest/reference/post/media/upload-init

最大で512MBまでみたいです。
https://support.twitter.com/articles/20172147
「縦横比: 1:2.39~2.39:1の範囲(両方の値を含む)」、「最大ビットレート: 25Mbps」とも書いてあります。

動画の拡張子は「.mp4」か「.mov」でないとダメみたいですね。

追記

「Duration should be between 0.5 seconds and 30 seconds (sync) / 140 seconds (async)」
「File size should not exceed 15 mb (sync) / 512 mb (async)」

とTwitter Developersの表記が変わっていました。

0.5秒から30秒の動画は非同期(動画を全て読み込んでから再生する)、それ以上の動画は同期(読み込みながら再生する)。
ファイルサイズが15MBまでは非同期、それ以上は同期での再生になります。

短い動画の場合は30秒以内でファイルサイズ15MB以内にするとTwitter側に気を使わせる必要がなくなるようです。

Twitter 側が推奨する動画設定

さっきの仕様ページにも書かれていますが、Twitter が推奨する解像度やビットレートがあります。

Twitter 推奨設定

Landscape(PCなどの横向きデバイス)は16:9が推奨されてます。

Portrait(スマートフォンなどの縦向きデバイス)は Vine などでお馴染みの正四角形ですね。

この表はあくまでも推奨なので仕様を守っていれば解像度やアスペクト比は自由にしても大丈夫です。
再エンコードされる際にTwitter側に解像度を変えられる可能性があるので、推奨する設定通りの方がよさそうです。(詳細は「動画を埋め込む」の追記に書いています。)

Webサイトに埋め込むときは「動画を埋め込む」も検討

ツイートの埋め込みコードを取得する欄に「動画を埋め込む」という項目もあるので、Webサイトでツイートの動画を紹介したいときはこちらも検討するといいと思います。

動画の埋め込み

ちなみにこの動画は

  • 解像度は640x480で比率は4:3
  • 圧縮方法はH.264の拡張子MP4
  • FPS29.97
  • ビットレート(&最大)はVBR2パス750K
  • 音声の方は適当
  • インターレースなし(プログレッシブ)

で構成しています。(PCとスマートフォン両方を意識すると640x480が丁度良い気がする。)

追記

Twitterにアップロードされた上記の動画ファイルを見てみたのですが、どうやらスマートフォンを考慮してかm3u8(中身はh.264?)みたいです。
https://video.twimg.com/ext_tw_video/745666830400790528/pu/pl/nb4Fr3wXFjLnV3TD.m3u8

それは全然問題ないのですが、プレイリストの中身が、

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=320000,RESOLUTION=240x180,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/745666830400790528/pu/pl/240x180/lwacXglJg8Ga80Pg.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=480x360,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/745666830400790528/pu/pl/480x360/HKSY2CO13q7GM13H.m3u8

こんな具合で2つの設定に分かれていて、RESOLUTION=480x360の部分を見て分かる通り、640x480より解像度が低くなってしまっています。

恐らくエンコードの設定に640x480の設定がないので一番近い480x360が選ばれたのでしょう。

それを踏まえてもう一度。

複数の解像度の動画をTwitter側で作ってくれるとわかったので、アスペクト比を推奨の物に変えて1280x720、ビットレートは2000Kにしてみました。

一応プレイリストもチェック。
https://video.twimg.com/ext_tw_video/808334587533213696/pu/pl/G5I2duD0YpQVbM9S.m3u8

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=256000,RESOLUTION=320x180,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/808334587533213696/pu/pl/320x180/lRgK-RzC0bp_9r8m.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=640x360,CODECS="mp4a.40.2,avc1.42001f"
/ext_tw_video/808334587533213696/pu/pl/640x360/UZwnnUQfUIulhotH.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2176000,RESOLUTION=1280x720,CODECS="mp4a.40.2,avc1.4d001e"
/ext_tw_video/808334587533213696/pu/pl/1280x720/cNVjojIF-S7X-8xl.m3u8

想定通りの1280x720が含まれているので問題なさそうですね。