今ではYouTubeもニコニコも見れなくなった3DSで引き続き好きな動画を楽しむ方法について書きます。

3DSもほとんどのネットワークサービスが終了に向かっていて、先日ニコニコも終了したばかりです。
ゲーム機のようなサイズでいろいろな動画を楽しめたのはとても良かったものです。

Homebrewアプリだと非公式のYouTubeクライアントがあるようで、それを使えば引き続き3DSで動画を見れるみたいですがあんまり気持ちよくないですし何より改造が必要になります。
今回は改造なしで、内蔵ソフトだけで好きな動画を見る方法を紹介します。

「ニンテンドー3DSカメラ」のフォーマットを活用

純正内蔵ソフトの「ニンテンドー3DSカメラ」には動画を撮る機能があります。もちろん撮った動画を見ることもできます。
そしてこの撮影した動画は普通のカメラと同じDCIMフォルダーに記録されており、Windows Media Playerなどで見ることができます。
3DSでしか見れないような特殊なフォーマットを使っているわけではなさそうなのでまずはフォーマットを見てみます。

適当に撮った動画をFFmpegの解析ツールに投げてみました。

  • 動画

    コーデック MJPEG
    解像度 480x240
    FPS 20
    ピクセルフォーマット yuvj420p
  • 音声

    コーデック IMA ADPCM
    サンプリング周波数 16kHz
    チャンネル数 1 (モノラル)

画質、音質ともに一昔前のガラケー並みとなっています。
動画は上記のものが2ストリーム入っています。これは3D表示のために背面カメラの左右の映像が記録されているためです。そのためWindows Media Playerでは再生するときに追加のウィンドウが表示されることがあります。VLCでは「インデックスが破損している」旨の表示が出ることがありますが無視すれば再生できます。

JPEGを動画コーデックとして使うのは昔だったら珍しくありません。AVIで汎用的でまともな動画コーデックといったらこれぐらいしかありません。
IMA ADPCMというのはIMA(インタラクティブ・マルチメディア協会)が策定した方式を使用したADPCMのことです。ADPCMは適応差分PCMなどといわれ、普通のPCMと異なり、波形が変化した量だけを記録し、データ量を圧倒的に減らせるのが特徴となっています。PCMよりは少し音質が劣ります。高音にノイズが現れることもあります。組み込みやゲームなどで使われるもので、普段はほとんど使われません。

FFmpegはこれらのコーデックをサポートしているので問題ないです。

解像度が480x240となっていますが、実際の3DSの解像度は400x240(2Dモード時)なはずなので、今回は400x240に合わせようと思います。
また、3DS的には音声のサンプリング周波数は32.73kHzまでいけるはずなのでちょっと変えます。

準備物

  • 3DS
  • SDカード
  • FFmpegが使えるPC
  • 好きな動画

動画については、FFmpegはどんな形式でも読み込めるので事前の変換は不要です。

動画形式の変換

動画を3DS用に変換します。次のような形式に変換します。

  • 動画

    コーデック MJPEG
    FPS 20
    解像度 400x240
    ピクセルフォーマット yuvj420p
  • 音声

    コーデック IMA ADPCM
    サンプリング周波数 32.73kHz
    チャンネル数 2 (ステレオ)

コマンドはこうなります。

ffmpeg -i in.mp4 -c:v mjpeg -qscale:v 8 -r 20 -s 400x240 -pix_fmt yuvj420p -c:a adpcm_ima_wav -ar 32730 -ac 2 out.avi

変換が完了したら見てみます。

なんだか画が横に圧縮されていませんか?実は400x240のアスペクト比は5:3で一般的な16:9とは異なります。
そのため、上下に空白を入れて5:3に直す必要があります。それもFFmpegでできます。

padフィルタを使って上下に黒帯を追加します。追加すると解像度が400x240じゃなくなるのでscaleフィルタで縮小しています。

ffmpeg -i in.mp4 -c:v mjpeg -qscale:v 8 -r 20 -pix_fmt yuvj420p -vf "pad=iw:iw*3/5:0:(oh-ih)/2:black,scale=400:240" -c:a adpcm_ima_wav -ar 32730 -ac 2 out.avi

これで画が変に見えるのは直ったと思います。

ちなみに、-qscale:v 8 の数字部分を小さくすると画質が上がりますが、3DSの性能はそこまで高くないので7〜8がおすすめです。

3DSにコピー

変換できたら3DSにコピーします。 まずSDカードのルートフォルダを見ると「DCIM」というフォルダがあります。 階層的にはこうなっています。

/
└── DCIM
    └── 100NIN01
    └── 100NIN02
    └── 100NIN03
    └── 100NIN・・・

100NIN〇〇は01だけしかないときもあれば02,03・・とある場合もあります。写真や動画の量によって異なります。
今回は、100NIN〇〇の一番大きい数字のフォルダに入れます。

まずコピーする前に、動画ファイルの名前を「HNI_〇〇〇〇.AVI」にします。〇〇〇〇は4桁の数字ですがコピー先フォルダにあるファイルの数字と被ってはいけません。 連番じゃなくていいので9000とか9001でもいいと思います。

名前を変更したらコピーします。コピーが終わったら3DSに戻して、「ニンテンドー3DSカメラ」を起動し、動画と写真の一覧を見ます。
すると最初に「管理ファイルを更新する必要があります」と表示されるため、OKをタッチして更新します。

なお、追加した動画は日付のデータが入っていないので 1900/1/1 扱いになっています。そのためギャラリーの一番左側にありますので注意してください。
無事発見して再生もできたら成功です!

注意点

まず、3DSのSDカードはFAT32でフォーマットされているので、1ファイルあたりの最大容量は4GBまでとなっています。これを超えてサイズを大きくすることはできません。
先にソフト側で弾かれる可能性もあります。

コーデックはMJPEGとIMA ADPCM以外使用できません。