LoginSignup
0
0

スライドショーアプリを作るためのアーキテクチャ検討

Posted at

スマホのスライドショーアプリを作りたい。その時のアーキテクチャ検討のメモ。サクッと作るにはどうしよう。まかない飯に最適なアーキテクチャはなんだろう。

その1:普通のスライドショーアプリ

  • アプリが起動してる間はスリープしない
  • フォルダじゃなくてファイルを選択するだけのアプリ
  • PhoneGapで作れればいい?
    • コマンド多くてむしろ面倒
    • Monacaがいいかとも思ったけどむしろ被せ物がおおい
      • onsen UIが邪魔
  • Googleのチュートリアルにしたがって、Windows上のAndroidSDKだけで作る方がシンプル(Bashに依存しない)

その2:ブラウザ上のVideoタグで作れないか

  • jpegを3コマのmp4に変換してそれをvideoタグに変換
  • もしくはjpegをmp4に変換してm3u8でプレイリスト化
  • あとはvideoタグで再生スピードを変えるだけ
  • ブラウザの機能がしっかりしていれば、別画面でも再生できる
  • 変更先の動画形式は(mp4,m4v,webm)のいずれか(軽さややりやすさで)
  • ブラウザ上でやるならffmpeg-wasmを使うか

ffmpegで静止画を動画に変換してみよう

原点回帰

ffmpeg -loop 1 -y -i n225.jpg -vcodec libvpx -pix_fmt yuv420p -t 5 -r 1 n225.webm
  • -loop 1 -y -i n225.jpg この静止画だけをループする
  • `

以下のように -crf 18 でクオリティの高いオプションを設定すればよい.-crf 0 でロスレスエンコード

$ ffmpeg -r 30 -i %4d.png -vcodec libx264 -pix_fmt yuv420p  -crf 18  output.mp4

ミニマムの動画変換(30fps)

ffmpeg -r 30 -i jpeg/kazuha1.jpg output.mp4

これだとすぐ終わる。
フレームレートを変えてみる。

ffmpeg -r 0.1 -i jpeg/kazuha1.jpg output.mp4

これでもすぐ終わってしまう。フレームレートではなく動画の尺自体を指定しないとだめかも。

ffmpeg -r 1 -t 10 -i jpeg/kazuha1.jpg output.mp4

これでもすぐに終わってしまう。

ループをしていすることで一つのファイルになった

ffmpeg -r 1 -t 10 -loop 1 -y -i jpeg/kazuha1.jpg output.mp4

これで初めて10秒の動画が完成

次にスライドショー的に複数のファイルを指定してみる

ffmpeg -r 1 -t 10 -loop 1 -y -i jpeg/kazuha%1d.jpg output2.mp4

これだと1秒おきに変わる。
フレームレートを買えてみる。

ffmpeg -r 0.5 -t 10 -loop 1 -y -i jpeg/kazuha%1d.jpg output2.mp4

これでも1秒おきに変わる

ffmpeg -r 1 -t 10 -loop 1 -y -i jpeg/kazuha%1d.jpg -r 60 output2.mp4

出力のフレームレートを変えることで、もうちょっとゆっくり変わるようになった。
ただ、ここのコントロールは難しそうなので、jpegの個数とmp4の個数は一致させる方が良さそう。
ffpmegで動画を結合させるという案もあるが、縦横比が同じファイルでないとffmpegの動画結合機能は使えない。

スライドショーという使い方をする限り、縦横比の違う画像が入ってくることも考慮する必要がある。

次はm3u8ファイルで各動画をプレイリストにする。

まずjpegを10秒の動画に変換

ffmpeg -r 1 -t 10 -loop 1 -y -i jpeg/kazuha1.jpg kazuha1.mp4
ffmpeg -r 1 -t 10 -loop 1 -y -i jpeg/kazuha2.jpg kazuha2.mp4

次にこの2つの動画をプレイリストにする。

te01.m3u8
#EXTM3U
file://wsl.localhost/Ubuntu-20.04/root/work/jpeg2mp4/kazuha1.mp4
file://wsl.localhost/Ubuntu-20.04/root/work/jpeg2mp4/kazuha2.mp4

m3u8は非常にシンプルで、ファイル名を絶対パスで並べるだけ。
この方法でVCLプレイヤーでは再生できた。

次にブラウザでm3u8を再生する方法

一旦素のvideoタグで当てはめてみる。

te01.html
<video src="./te01.m3u8">

これが機能しなかった。
あれこれ調べても、直接m3u8ファイルを再生している例が見当たらない

ビデオが終わったことのイベントは認識できるから次の動画に切り替えるというJSをかけばいいか

その3:壁紙変更アプリ

  • 定期的にロック画面の壁紙を変更するだけのアプリ
  • 壁紙に設定されている画像のファイル名を変更するだけってのはどうだろう
  • もしくは壁紙に設定されている画像のファイル名に定期的にコピーする
  • これならadbシェルでできないかな
  • termux+cronでできると嬉しい

根本的な課題

スマホをスリープさせないというためにはどうしたらいいかということがいずれも考慮されてない。その点ではいずれも不合格。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0