前回は、Nginxについてご紹介しました。
今回は、アップロードした画像を動画に変換する際に、
音声も一緒に組み込んだ動画の変換方法についてご紹介したいと思います。
ただし、THETA Sでは、撮影している間は音声を取得することができないので、
Android側で作成した音声を元に動画を作成するというひと手間が発生してしまいます。
詳しくは、後述である【解説】の手順2を参照してください。
それでは、実際にTHETA Sで取得した画像を音声付き動画に変換してみましょう。
<音声付き動画の変換方法>
1.THETA SとAndroidをつないで、撮影を開始する
2.撮影開始後、Android側で音声を録音する
3.一定時間ごとにより、wavファイルを作成する
4.wavファイル作成後、サーバへアップロードする
※この時、画像もアップロードしておく
ここについては、以前の記事で説明してるため割愛
5.ffmpegを利用し、アップロードした画像(jpgファイル)/音声(wavファイル)から
「動画(mp4ファイル)」を作成する
6.HLS形式で配信するため、ffmpegを利用し、「動画(mp4ファイル)」から
「セグメントファイル(tsファイル)」
※セグメントファイルについては、こちらを参照してください
上記のように手順1〜6で簡単に音声付き動画を作成することが可能です。
それでは、いくつか解説していきましょう。
【解説】
・手順2
→ 音声をどうしてAndroid側で作成するんだろう?THETA Sを使っているのに?と疑問を持つ方もいると思います。
Android側で音声を作成する理由は、THETA Sで撮影している内容をリアルタイムで配信する場合、
USB接続しますが、その際に、THETA Sは「外部カメラ」として認識されてしまうので、
Android側にはUSB経由で「画像データ」しか送られてこないからです。
また、録音開始の注意点としてTHETA Sで撮影を開始と同時に、タイミングよく録音も開始する必要があります。
そうしないと、動画と音声がずれてしまうので気をつけてください。
・手順3
→ Androidで録音した場合は、「wavファイル」が作成されます。
※「wavファイル」については、こちら(https://ja.wikipedia.org/wiki/WAV)を参照してください
今回は、10秒ごとに「wavファイル」を作成します。
こちらについては、必ず10秒である必要はありません。
ただし、あまりにも短い間隔でアップロードを続けると、リクエスト数が多くなってサーバに負荷がかかり、
処理が遅くなります。
更に、接続数に応じて料金が変動するサーバを利用している場合は、料金が増加します。
また、あまりアップロードする間隔を長くしてしまうと、リアルタイムで動画を配信する際に、
音声がずれてしまう可能性があります。
今後、検証を行い、適切な時間を算出する必要があります。
・手順5、6
→ アップロードした画像と音声から「ffmpeg」を利用して、動画を作成しますが、
手順5で「mp4ファイル」を作成し、その後、手順6でHLS形式で配信するために
「セグメントファイル(tsファイル)」を作成しています。
最初から、画像(jpgファイル)と音声(wavファイル)からセグメントファイルを
作成すれば良いではないか?と思いますが、それでは、音が再生されないので、
画像(jpgファイル)/音声(wavファイル)から1つの動画(mp4ファイル)を作成する
ひと手間が発生してしまいます。
残念ながら、音声が再生されない原因は、判明していないのですが、今後の課題として検証を重ねる予定です。
原因が判明したら、改めて記事として公開したいと思います。
現状としては、本手順で「セグメントファイル(tsファイル)」を作成しています。
音声付き動画が作成できたところで、今回は終了します。
動画に音声を組み込めたことで、さらにリアルタイム配信へ一歩近づけました。
最後までご覧いただき、ありがとうございます。