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