Introduction
仕事で video_player を使って動画を再生していたのだが、 iPhone 実機だと再生できるのに、iOS シミュレータだと再生できない動画ファイルが見つかって不安に思って調べた。
Why?
ChatGPT に聞いたら
MacやiOSシミュレーターは、実機で使用可能なすべてのハードウェアデコーダやソフトウェアコーデックをサポートしていないため、一部のMP4ファイルが再生できないケースが存在します
とのこと。
具体的には WebM 動画から mp4 に ffmpeg
で変換した動画がこの事象に当てはまった。
下記のように変換していた。
1 | $ ffmpeg -y -i input.webm -vf "palettegen" palette.png |
実は、GIF アニメーションを綺麗に生成するために、パレットを生成して変換していたことがあり、元の webM もイラスト調のアニメーションだったので同様な変換方法を使ったのが問題になった。
パレットを使うのは GIF アニメーションを生成する時だけなので、余計なことをしたわけだ。
本来は下記のシンプルなコマンドで問題は起きない。
1 | $ ffmpeg -y -i input.webm output.mp4 |
調査しているとき、最初は Video not working on 16.4 simulator と思ったが、様々な iOS シミュレータを試しても、iOS シミュレータのバージョンに関係なく再生できなかった。
下記は上の url で話題になっていた iOS 16.4 以外に、iOS 16.2、iOS 16.1、iOS 15.5 を試した際のスクリーンショット。
実際に MacOS 15.3 で QuickTime で再生を試みるも
と言われ再生できない。
ffprobe
を使って再生できる mp4 と比較してみると、
1 | ffprobe version 7.1 Copyright (c) 2007-2024 the FFmpeg developers |
- Video の
4:4:4 Predictive
濃霧 yuv444p
とyuv420p
の違いがあった。
なので、 ffmpeg
で動画を変換する際、下記のように -profile:v high -pix_fmt yuv420p
を引数に追加して変換する。
1 | $ ffmpeg -y -i input.webm -vf "palettegen" palette.png |
これで再生できるようになる。