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ではどうでしょうか。
気にしないでください、私は自分の問題を解決する簡単な方法を見つけました。
S3バケットを指すAmazonクラウドフロントダウンロードディストリビューションをセットアップしました。
クラウドフロント経由で、ファイルはhttp経由でffmpegを使用してアクセスできます。
ffmpeg -i "http://subdomain.cloudfront.net/video.mp4" -ss 00:00:10 -vframes 1 -f image2 "image%03d.jpg"
そして、データ転送はさらに安くなります!しかし、なぜこれがS3で直接機能しないのか疑問に思っています...
私の場合、S3バケットから直接読み取ることは魅力のように機能します。具体的には、S3オブジェクトにはプライベートパーミッションがあるため、Signed-URLをffmpegに渡します。
RubyとAWSRubySDKを使用して署名付きURLを生成します。 http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method
S3オブジェクトの権限を確認してください。
S3のみでこれを行う方法を探してここに来たすべての人のために、AWSSDKは事前に署名されたURLを生成できるようになりました。
ffprobe -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"