Как читать удаленное видео на 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 ?


person virtualize    schedule 20.04.2010    source источник


Ответы (3)


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

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

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

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

person virtualize    schedule 23.04.2010
comment
У меня была такая же проблема, вытягивание из ведра напрямую не работает. Также не получилось загрузить видео через CDN Limelight. Работал только через облачный фронт. Очень странно.. - person bskinnersf; 14.05.2010
comment
У меня работает, когда я добавляю политику корзин - person Lukasz Madon; 13.02.2014
comment
Я думаю, что это может помочь сначала указать значение -ss, re: stackoverflow.com/questions/18534835/ - person weisjohn; 09.05.2014
comment
@LukaszMadon, какую политику ведра вы добавили? - person Somename; 07.04.2017
comment
как нам получить доступ к ffmpeg на aws lambda? - person Chetan Vashisth; 06.05.2020

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

ffprobe -i "$(aws s3 presign s3://MY_BUCKET/MY_FILE --expires 5)"
person Stefan    schedule 05.03.2019
comment
Спасибо, это было очень полезно! Текущая ссылка на предварительную подпись страницы .Net SDK: docs.aws.amazon. .com/AmazonS3/latest/dev/ - person Mmm; 21.06.2020

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

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

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

person shuji.koike    schedule 19.09.2012
comment
Какую конкретную команду вы использовали с ffmpeg для подписанных URL-адресов? Я получаю ошибку неверного запроса. Также он отлично работает для обычных URL-адресов. - person Ahmad hamza; 18.09.2017