Как читать удаленное видео на Amazon S3 с помощью ffmpeg

Мне нужно создать рамки плаката из видео, размещенных на Amazon S3, через ffmpeg.

Итак, есть способ использовать удаленный видеофайл непосредственно в командной строке 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?

Ответы

Ответ 1

Неважно, я нашел простой способ решить мою проблему.

Я установил дистрибутив Amazon Cloudfront, указывающий на мое ведро S3.
Через облачный фронт файлы доступны через ffmpeg через http:

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

А передача данных еще дешевле! Но все еще задаюсь вопросом, почему это не будет работать с S3 напрямую...

Ответ 2

В моем случае чтение непосредственно формы S3 ведро работает как шарм. Чтобы быть более конкретным, у моего объекта S3 есть личное разрешение, поэтому я передаю подписанный URL-адрес в ffmpeg.

Я использую ruby ​​и AWSRubySDK для создания подписанного URL-адреса. http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method

Проверьте разрешение объекта S3.

Ответ 3

Для всех, кто пришел сюда и посмотрел, как это сделать только с S3, AWS SDK теперь может генерировать предварительно назначенные URL-адреса.

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