ffmpegの-ssオプションの位置

自宅の録画&動画ファイル管理Webアプリで60秒スキップなどを実装したいな~と思いました。

PCからの再生だとパワーあるのでVLCでTSファイルをそのまま再生していますが、
Androidタブレットだとパワー不足のためスムーズに再生できません。
ので、h264にリアルタイムエンコードしながらタブレットに送っています。

PCで再生の場合(TSファイルをそのまま送信)、VLCでシークバーを動かすと
HTTPリクエストヘッダーに「nバイト目から送ってくれ」みたいな情報を付けてくれます。
しかし、Andoridだとエンコードしながらなので難しいんですよね。

仕方ないので、簡単な動画再生Andoridアプリを作成し、再生秒数をカウントしておき、
スキップボタン押すとスキップしたい秒数を足して「先頭からn秒後からエンコードしてくれ」
という方式にしました。

最初はffmpegのオプションを以下のようにしました。
ffmpeg.exe -i インプットファイル名 -f flv -acodec libvo_aacenc -vcodec h264 -s 1280x720 -b 1500k -ss 60 -threads 4 -loglevel quiet pipe:1
これだと指定位置からのエンコード開始がものすごく遅い...(;´д⊂)
どうもエンコードしながら60秒の位置まで来たら出力開始しているようです。

Google先生に聞いてみると-ssオプションは位置によってパフォーマンスが結構変わるとのこと!
次は以下のようにしてみました。
ffmpeg.exe -ss 60 -i インプットファイル名 -f flv -acodec libvo_aacenc -vcodec h264 -s 1280x720 -b 1500k -threads 4 -loglevel quiet pipe:1
これだと、シークが一瞬で終わってくれて、60秒の位置からエンコード開始してくれます。
実際にプレイヤー側で再生、スキップしてみても問題ないパフォーマンスが出てくれました。('∇')




0 件のコメント:

コメントを投稿