あままこのブログ

役に立たないことだけを書く。

出来るだけ互換性が高い(ChromecastとかPS4とかで再生できる)動画ファイルを作成する

先日SynologyのDS216jというNASを購入しまして、早速PCに保存していた写真・音声・動画ファイルをNASに移していました。

で、最近のNASっていうのは色々機能が充実していまして、DLNAサーバになって、PS4
PlayStation 4 ジェット・ブラック 500GB(CUH-2000AB01)

PlayStation 4 ジェット・ブラック 500GB(CUH-2000AB01)

などのDLNA対応機器や、Chromecast
Chromecast ブラック

Chromecast ブラック

に保存してある写真・音声・動画を中継する機能があったりするわけです。ということは、ChromecastやPS4を持っていれば、TVで保存している動画ファイルを簡単に再生することもできるわけです。
ところが、これがなかなか再生できない。様々なデバイスで撮影・録画した動画ファイルが混在していて、PCだととりあえずVLCあたりに任せれば何でも再生できるわけですが、PS4やChromecastだと、再生できるファイル形式やコーデックとやらが決まってるらしく、決まった設定で動画を変換しなければ再生できないわけです。
(よりハイスペックなNAS、例えばDS416playとかを買うと、ハードウェアエンコードという機能で、NASが自動的に最適な設定に変換して中継してくれるそうなんですが、この機種にはそういう機能はないみたいです。)
で、色々インターネットを検索して、どういった設定にすればいいのか、指定の設定に変換するにはどうしたらいいかを調べたので、記事にまとめておきます。

目標

  1. 1つのファイルで出来るだけ多くのデバイスに対応したい(デバイスごとにファイルを用意するのは面倒くさい)
  2. ファイルサイズはいくら大きくなってもよい
  3. 簡単に変換したい

結論

  1. 設定
    1. ファイル形式:MP4
    2. サイズ:横1960px以内・縦1080px以内
    3. 映像コーデック:H.264/MPEG-4 AVC High Profile Level 4.2
    4. 映像フレームレート:30fps
    5. 映像ビットレート:10Mbps
    6. 音声コーデック:AAC LC
    7. 音声チャンネル:ステレオ
    8. 音声サンプルレート:96 khz
    9. 音声ビットレート:384 kbps
    10. インターレース解除済み
  2. 変換方法
    1. ffmpegを使う
ffmpeg
  -f mp4
  -vcodec libx264
  -pix_fmt yuv420p
  -profile:v high
  -level:v 4.2
  -r 30
  -b:v 10m
  -acodec aac
  -ac 2
  -b:a 256k
  -ar 96000
  -i 変換元動画ファイル名
  -size 変換後サイズ(変換元のサイズが制限を上回っている場合)
  -vf yadif(インターレースを解除しなければならない動画の場合)
  変換後ファイル名

PS4に対応

PS4メディアプレーヤーは下記のページに対応形式が載っています
manuals.playstation.net
ただ、この形式情報以外にも以下の制限があります。

サイズ:横1960px以内・縦1080px以内

スマートフォン縦持ちで動画を撮影していると、横1960px・縦1080pxの動画が記録されたりするんですが、これをそのまま変換してもPS4では再生できません。なのでサイズを横980px・縦540pxとかに縮小しましょう。

Chromecastに対応

Chromecastの対応形式とかは見つけられなかったのですが、Youtubeの推奨エンコード設定としては下記のようなものがあるのでそれに合わせます。
support.google.com
ただ、この設定に合わせても、以下の制限に則らないと動画がカクカクします。

フレームレート:30fps以内

上記のページではフレームレート60fpsとかでも大丈夫と書いてあるんですが、実際にデジイチとかで撮影したフレームレート60fpsの動画をChromecastに中継してみるとカクカクします。調べてみるとChromecastの最高フレームレートは30らしいので、それに合わせたほうが良いでしょう。
ただこれをすると明らかに動画のヌルヌル感が減ります。Amazon Fire TV Stick

Fire TV Stick (New モデル)

Fire TV Stick (New モデル)

だとフレームレート60fpsでも大丈夫そうなので、動画の品質が劣化するのが嫌という人はそちらを購入したほうが良いでしょう(筆者は試していませんが)。

変換ソフトは何にするか

以上のことをまとめると、上記のような設定となります。
で、どうやってこの設定に変換するかなんですが、フリーのエンコードソフトとしては以下のようなソフトがあるそうです。
aviutl.info
で、この中で一番メジャーで、かつ使い勝手が良さそうなのが、ffmpegっぽいので、それを使うことにします。情報も豊富ですし、CUIなのも良しです。

ffmpegのインストール

筆者はBash on Windowsでインストールし使用しています。インストール方法は以下のとおりです。
launchpad.net

sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpeg

使用方法

とりあえず上記で紹介したようにコマンドを入力すれば変換されます。

感想

写真でいうJPEG、音声で言うMP3みたいに、「とりあえずそのファイルフォーマットに変換しておけば互換性は安心」というファイルフォーマットのデファクトスタンダードができないもんですかね。