Android端末で再生できない動画ファイルを再生できるようにサクッと変換

過去に変換した動画がAndroid端末で再生できなくて困ったので再変換してみた

今回の問題

Android端末で、通常なら再生できそうなDVD解像度のMP4(H264)で再生できないファイル群が存在した。
試した端末のCPUは以下

  • AllWinner A10
  • Amlogic8726-M6
  • Tegra 3
  • Snapdragon S4 MSM8660A

動画に強いCPUから、処理能力が高いCPUまで全部ダメ。
状況としては、カクついて、動画が1fps(1秒に1枚の絵)程度になっている感じ。音声もダメ。
なお、再生はDLNA経由で行っています。
PCでは普通に再生できます。

今回は、問題を解決しつつ、時間と労力と電力をかけないことを目指してみました。

まずは前提知識

Android端末でmp4などを再生する場合は、動画ファイル内のメタデータの配置方法が重要となります。
一般的にWeb Optimizedなファイルと呼ばれているものが適しています。
コーデックなどの違いではなく、動画に関する情報(メタデータ)のファイル内での配置位置・配置方法が異なります。
Web Optimizedな状態というのは、簡単に説明すると、動画全体を読み込まなくても動画をスムースに再生できる状態にあります。
ストリーミングを意識したファイル形式という認識でおkです。

まず Web Optimize してみた

ファイルをWeb Optimizeするには、いくつかのtoolが提供されています。
まずは、Adobeのエバンジェリストの方が提供しているQTIndexSwapper2を使用してみました。
このツールの場合は、上記の通り、動画ファイル内の配置を変えるだけなので、ファイルをコピーする程度の時間で処理が終わります。
ツールをインストールし、実行してみたところ、動画変換(再配置)は無事に終わりましたが、動画再生は完全に失敗

次に、HandBrake で再変換してみた

ご存知、動画変換ツール(ffmpegラッパー)のHandBrakeを使い、Web Optimized にチェックを入れ変換。
当然ながら、変換に時間がかかります。
再生は成功。ただ、時間と電力が無駄にかかります。

更に、ffmpeg で入出力してみた

興味本位で 動画変換ツールのffmpegを使用して、色々試していたのですが、
コーデックの再利用を行い、単純に入出力してみたところ、あっさりとAndroidで再生できました
コマンドは下記のような感じ。
ffmpeg -i "${infile}" -vcodec copy -acodec copy "${outfile}"
また、これも基本的にファイル内の配置替えをしているだけですので、コピー程度の時間で処理が終わります
なお、ファイルサイズは1%未満で変化しました。

まとめ

再生できそうな動画ファイルが再生できないときは、まずは ffmpeg で入出力してみては如何でしょうか?

投稿者:

Kenzo

サイト管理人です。 お仕事募集中です。 システム開発を生業としています。 どうぞ宜しくお願い致します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください