web-dev-qa-db-ja.com

ffmpegを使用してAmazonS3でリモートビデオを読む方法

Ffmpegを介してAmazonS3でホストされているビデオからポスターフレームを作成する必要があります。

したがって、次のようにffmpegコマンドラインでリモートビデオファイルを直接使用する方法はありますか?
ffmpeg -i "http://bucket.s3.amazonaws.com/video.mp4" -ss 00:00:10 -vframes 1 -f image2 "image%03d.jpg"

ffmpegはただ返します:
http://bucket.s3.amazonaws.com/video.mp4: I/O error occurred
Usually that means that input file is truncated and/or corrupted.

私はまた、ffmpegにビデオmp4コンテナを読んで使用するように強制しようとしました:
ffmpeg -f mp4 -i "http://bucket.s3.amazonaws.com/video.mp4" ...
しかし、運がない。

このビデオをS3から取得し、ローカルで処理することはもちろん問題なく機能します。
他の「標準」httpサーバーからリモートでファイルを読み取ることもできます。
ffmpegがリモートファイル読み取りをサポートしていることは知っていますが、S3ではどうでしょうか。

25
virtualize

気にしないでください、私は自分の問題を解決する簡単な方法を見つけました。

S3バケットを指すAmazonクラウドフロントダウンロードディストリビューションをセットアップしました。
クラウドフロント経由で、ファイルはhttp経由でffmpegを使用してアクセスできます。

ffmpeg -i "http://subdomain.cloudfront.net/video.mp4" -ss 00:00:10 -vframes 1 -f image2 "image%03d.jpg"

そして、データ転送はさらに安くなります!しかし、なぜこれがS3で直接機能しないのか疑問に思っています...

33
virtualize

私の場合、S3バケットから直接読み取ることは魅力のように機能します。具体的には、S3オブジェクトにはプライベートパーミッションがあるため、Signed-URLをffmpegに渡します。

RubyとAWSRubySDKを使用して署名付きURLを生成します。 http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method

S3オブジェクトの権限を確認してください。

9
shuji.koike

S3のみでこれを行う方法を探してここに来たすべての人のために、AWSSDKは事前に署名されたURLを生成できるようになりました。

ffprobe -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"
1
Stefan