[FFmpeg] カーナビ(楽ナビ)でMP4動画を再生するためのエンコード設定

カーナビ (楽ナビ AVIC-RW802-D) でのSDカードの動画再生ができず、ここ数日ほど奮闘しておりました。
やっといい感じで勝利&解決したので、今後の自分のための備忘録。

FFmepg を使う

動画をカーナビに対応したファイルに変換するためのソフトは FFmpeg を採用しました。
動画や音声のファイルを変換したり、加工したり、いろいろできちゃう便利なやつ。

コマンドラインで使用するので難しそうに見えますが、こうやってメモっておけば問題なし。(どんなソフトも使い方はメモっておかないとすぐ忘れちゃう)

導入のあれこれ

FFmpeg のダウンロードとかの詳細については省略。
(自分のOS環境にあったファイルをダウンロードして解凍するだけ)

ダウンロードしたらPATHを設定します。

  1. Windowsのスタートメニューを左クリックして「システム」を選択
  2. 「システム」詳細情報の右側にある「関連設定」から「システムの詳細設定」を選択
  3. システムのプロパティの「詳細設定」タブを選択し「環境変数」ボタンをクリック
  4. ユーザー環境変数の「Path」を選択して「編集」をクリック
  5. ffmpeg.exe が保存されているフォルダを指定して「OK」ボタン

PATH を設定することで、コマンドプロンプトを使ってどこからでも ffmpeg を使用することができます。

対応しているファイル形式、および注意点

対応映像コーデックの一覧

MPEG-4 Video H.264 / AVC WMV (VC-1)
プロファイル Simple Profile Baseline Profile Simple Profile
最大解像度 (ピクセル)
@最大フレームレート
720×480@30 fps 720×480@30 fps 720×480@30 fps
最大ビットレート
(平均値/ピーク値)※
4 Mbps/8 Mbps 2.5 Mbps/4 Mbps 768 kbps/-

※映像コンテンツ全体の平均ビットレートが最大ビットレート (平均値) を超えていなくても、瞬間的なビットレートが最大ビットレート (平均値) を連続的に超えると、正常に再生できない場合があります


エンコードする形式は、上記の中から ファイル容量が少なくても高品質にできる「H.264」 を採用。

MP4動画を楽ナビ用にエンコードする

こちらが本題。

手順1: コマンドプロンプトを起動

エンコードしたい動画が保存されているフォルダからコマンドプロンプトを起動する。
フォルダのアドレスバー(ファイル階層が表示されている部分)に cmd と入力すればコマンドプロンプトが起動する。

手順2: 動画ファイルを 2pass エンコード する

2pass エンコードすると少ないファイル容量で画質や音質の品質を保つことができます。
また、「カーナビの対応映像コーデック一覧」の注意書きである、

※映像コンテンツ全体の平均ビットレートが最大ビットレート (平均値) を超えていなくても、瞬間的なビットレートが最大ビットレート (平均値) を連続的に超えると、正常に再生できない場合があります

これを回避するためにも2passエンコードは必要です。

2pass エンコードには以下の2コマンドを実行する必要があります。
1回目にファイル解析を行い、2回目はその解析ログをもとにエンコードしています。(2回目のコードで出力ファイルは予告なしに上書きされます)

INPUT_FILE には「エンコードする動画のファイル名+拡張子」を入れ、 OUTPUT_FILE には「エンコードされた動画の名前+拡張子」を入れます。

ffmpeg -i INPUT_FILE.mp4 -pass 1 -an OUTPUT_FILE.mp4
ffmpeg -i INPUT_FILE.mp4 -pass 2 -b:v 1400K -y OUTPUT_FILE.mp4

上記のコードを && で繋げると、下記のように 2pass エンコードを一行にまとめて実行することもできます。

ffmpeg -i INPUT_FILE.mp4 -pass 1 -an OUTPUT_FILE.mp4 && ffmpeg -i INPUT_FILE.mp4 -pass 2 -b:v 1400K -y OUTPUT_FILE.mp4

手順3: 2Passエンコードされたファイルをカーナビ用にエンコードする

あくまでも今回エンコードした動画をもとにしたコードなので、解像度のあたりは手持ちの動画によって異なる。

ffmpeg -i INPUT_FILE.mp4 -c:v libx264 -x264-params "ref=2" -r 30 -profile:v baseline -level 30 -pix_fmt yuv420p -s 640x360 -c:a aac -b:a 256K -ar 48K OUTPUT_FILE.mp4

カーナビの解像度は最大720×480 (4:3)となっている。
今回使用した動画の解像度は1920×1080 (16:9) だったので、アスペクト比そのままで720×480以内に収まるサイズとして640×360に変更した。

使用しているオプションについて

今回のエンコードに使用しているオプションについて。

パラメータ 内容
-i FILENAME 入力ファイルのパス
-an FILENAME 音声なしで出力
-pass 1 (or) 2 パスを指定
-b:v 1400K 映像ビットレートを1400Kに指定
-y FILENAME 出力時に既存の同名ファイルを警告無しに上書き
-c:v libx264 映像コーデックの指定 (libx264 = H.264)
-x264-params “ref=2” 参照フレーム数の指定
-r 30 フレームレート(fps)を指定値に変換する
-profile:v baseline プロファイル
-level 30 映像エンコードのレベル指定(レベル3なら30と指定する)
-pix_fmt yuv420p ピクセルフォーマットの指定
-s 640x360 指定したサイズにリサイズする
-c:a aac 音声コーデックを指定
-b:a 256K 音声のビットレートを指定
-ar 48K 音声のサンプリングレートの指定

ffmpegはこれ以外にも様々なオプションがあり、それらを駆使することで動画や音声の編集・加工などを行うこともできます。


今回、どこで詰まっていたのかと言えば完全に「-x264-params “ref=2”」という部分。
再生できなかった動画は参照フレームの設定がすべて「4」になっていて、それだと楽ナビでは再生できないという罠だったみたい。

以前「XMedia Recode」というエンコードソフトを使って作成していた動画だけ再生できていて、これの違いはなんだ?と「MediaInfo」という動画や音楽ファイルのメタデータを表示するソフトで詳細情報を比較したところ、参照フレームの数値だけ違っていたのでおそらくそうなのかな、と。残念ながらあまり動画ファイルに詳しいわけではないので確証はない。(※XMedia Recode では参照フレームの規定値が「2」になっている)

おかげさまで FFmpeg の便利さにも気づいたので、よい勉強になりました。

関連記事

シェアする