ファイル全体をダウンロードせずにHTTPストリーミングビデオからフレームを抽出する


1

ビデオファイルの特定の場所からフレームを抽出したい。ファイルはリモートサーバー上にあり、全部をダウンロードしたくはありません。プログラムでhttpストリームからフレームを抽出する方法を教えてください。

GUIを使用してVLCで必要なことを実行できますが、たとえばCLIでそれを実行する方法がわかりません。 VLC cliで範囲ヘッダーを送信する方法はおそらく?

私はこれをヘッドレスのUbuntuマシンでやろうとしています

回答:


3

ffmpegもURLから読み取ることができるはずです。オフセットを秒単位で指定するか、 HH:MM:SS.msec のフォーマット -ss オプション:

ffmpeg -i http://example.com/video.mp4 -ss 5 -frames:v 1 thumbnail.png

これは他のHTML5コンテナでも同様に機能します。

Linuxディストリビューションをお使いの場合は、ffmpegをインストールしないでください。 apt-get install ffmpegしかし、 自分でコンパイルする または 静的ビルドをダウンロードする 。公式パッケージのバージョンは常に少し古くなっており、Ubuntuのバージョンによっては「本物の」ffmpegでさえありません。


これまでのところこれは動作します!さらにテストをする必要があります。編集:私は私がその時に悪い間違いを犯したと思うので私は私の前の答えを削除しました;)
Ortix92

1
うん、私はこれが機能することを確認することができます。入力シーク用に前面を立てて どういうわけか 出来た。私はこれをpeerflix(ノード内のトレントストリーミングアプリ)で実行していますが、それは単に機能します。範囲ヘッダを送信したり、チャンクがダウンロードされるのを待ったりするかどうかはわかりませんが、それでもファイル全体をダウンロードせずに本来の機能を果たします。
Ortix92

これまでの時点で、ファイル全体がまだダウンロードされています。使うなら -ss 5ビデオの最初の5秒がダウンロードされるので数秒かかりますが、 -ss 500最初の500秒をダウンロードするので、数分かかります。ビデオの必要な部分だけをダウンロードさせる方法はありますか?
user779159

1
@ user779159通常、入れたら -ss-i、ffmpegは最初にデコードせずに要求された部分にスキップします。しかし、Webダウンロードでは、私はそれが実現可能だとは思わない。問題は、ファイルオフセット(バイト単位)とそれに対応する時間との間に直接の関係がないため、特定のタイムスタンプについて(バイトオフセットで)スキップする場所を特定する前にffmpegが最初にファイル全体をダウンロードすることです。 。または、要求された時点までデコードする必要があります。
slhck

1
@ user779159これであなたはそれに言及しました、一つのことがあります。ファイルの先頭にストリーミングメタデータ(MP4ファイルの場合はいわゆるMOOVアトム)があると、動作が速くなる可能性があります。これは必ずしもそうとは限りません。つまり、すべてのファイルが最初にそのメタデータを持っているわけではなく、ffmpegがそれをWebダウンロードに使用するかどうかはわかりませんでした。しかし、私はそれがうまくいったことをうれしく思います!
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.