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

vir*_*ize 22 ffmpeg amazon-s3

我需要通过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上呢?

vir*_*ize 33

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

我设置了指向我的S3存储桶的亚马逊云端下载分发版.
通过cloudfront,可以使用ffmpeg通过http访问文件:

__CODE__

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

  • 我认为首先指定`-ss`值可能会有所帮助,重新:http://stackoverflow.com/questions/18534835/fastest-way-to-extract-a-specific-frame-from-a-video-php -ffmpeg-什么 (2认同)
  • @LukaszMadon 您添加了什么存储桶策略? (2认同)

Ste*_*fan 16

对于来这里寻找如何仅使用 S3 执行此操作的每个人来说,AWS SDK 现在可以生成预签名的 URL。

ffprobe -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"
Run Code Online (Sandbox Code Playgroud)


小智 9

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

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

检查S3对象的权限.

  • 您对 ffmpeg 使用了什么特定命令来签名 url?我收到了错误的请求错误。对于普通的 url 来说它也工作得很好。 (2认同)