36

I need to create poster frames from videos hosted on Amazon S3 via ffmpeg.

So is there a way to use the remote video file directly in ffmpeg command line like this:
ffmpeg -i "http://bucket.s3.amazonaws.com/video.mp4" -ss 00:00:10 -vframes 1 -f image2 "image%03d.jpg"

ffmpeg just returns:
http://bucket.s3.amazonaws.com/video.mp4: I/O error occurred
Usually that means that input file is truncated and/or corrupted.

I also tried forcing ffmpeg to use the videos mp4 container for reading:
ffmpeg -f mp4 -i "http://bucket.s3.amazonaws.com/video.mp4" ...
But no luck.

Wget this video from S3 and processing it locally works fine of course,
as well as reading the file remotely from other 'standard' http servers.
So I know that ffmpeg supports remote file reading, but why not on S3?

virtualize
  • 2,287
  • 2
  • 25
  • 36

3 Answers3

46

Nevermind, I found an easy way to solve my problem.

I set up an amazon cloudfront download distribution pointing to my S3 bucket.
Via cloudfront the files are accessible with ffmpeg over http:

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

And the data transfer is even cheaper! But still wondering why this won't work with S3 directly...

buræquete
  • 14,226
  • 4
  • 44
  • 89
virtualize
  • 2,287
  • 2
  • 25
  • 36
26

For everyone who came here looking how to do this with S3 only, The AWS SDK can now generate presigned urls.

ffprobe -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"
Stefan
  • 2,961
  • 1
  • 22
  • 34
  • Thanks, this was very useful! The current link to the .Net SDK page presign is https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLDotNetSDK.html – Mmm Jun 20 '20 at 21:11
11

In my case, reading directly form S3 bucket work like a charm. To be more specific, my S3 object has private permission so I'm passing a Signed-URL to ffmpeg.

I use ruby and AWSRubySDK to generate a Signed-URL. http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method

Check your S3 object's permission.

coffee-grinder
  • 26,940
  • 19
  • 56
  • 82
shuji.koike
  • 151
  • 1
  • 4
  • 2
    What specific command did u use with ffmpeg for signed urls ? I'm getting bad request error. Also it works perfectly fine for normal urls. – Ahmad hamza Sep 18 '17 at 09:21