如何使用ffmpeg在Amazon S3上阅读远程视频

时间:2010-04-20 17:37:58

标签: amazon-s3 ffmpeg

我需要通过ffmpeg在Amazon S3上托管的视频中创建海报帧。

有没有办法直接在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?

3 个答案:

答案 0 :(得分:30)

没关系,我找到了解决问题的简单方法。

我设置了指向我的S3存储桶的亚马逊云端下载分发版 通过cloudfront,可以通过http:

使用ffmpeg访问这些文件

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

数据传输甚至更便宜! 但仍然想知道为什么这不能直接与S3一起工作......

答案 1 :(得分:9)

在我的情况下,直接从S3桶中读取就像魅力一样。 更具体地说,我的S3对象具有私有权限,因此我将一个签名URL传递给ffmpeg。

我使用ruby和AWSRubySDK生成签名URL。 http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method

检查S3对象的权限。

答案 2 :(得分:1)

对于来到这里只是想使用S3做到这一点的每个人,AWS开发工具包现在都可以生成预签名的URL。

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