Получаем скриншоты из видео через NGINX средствами ImageMagick и ffmpeg
Совсем недавно появился новый модуль nginx-video-thumbextractor-module
Хотел опубликовать как ссылку но как видно топиков-ссылок больше нет. да и как перевод уже не подходит ибо добавил отсебятины.
В любом случае считаю что стоит поделиться этим замечательным модулем с Хабровчанами.
В статусе указано что он готов для продакшена, что очень радует.
Зависимости:
- avformat – обычно распространяется с FFmpeg(но мне на Ubuntu пришлось поставить libavformat-dev)
- avcodec – обычно распространяется с FFmpeg
- swscale – обычно распространяется с FFmpeg(но мне на Ubuntu пришлось поставить libswscale-dev)
- jpeg – libjpeg
- MagickWand – обычно распространяется с ImageMagick
Добавляем модуль при конфигурировании/компиляции::
./configure --add-module=../nginx-video-thumbextractor-module --with-cc-opt='-I /usr/include/ImageMagick'
Рекомендация:
По умолчанию ImageMagick использует OpenMP для поточной обработки изображений.
Автор рекомендует конфигурировать/компилить ImageMagick с опцией "—disable-openmp", так как это не очень хорошая идея использовать потоковую обработку внутри рабочих процессов.
Конфигурация:
location ~ /thumbs(.*) {
video_thumbextractor;
video_thumbextractor_video_filename $1;
video_thumbextractor_video_second $arg_second;
video_thumbextractor_image_width $arg_width;
video_thumbextractor_image_height $arg_height;
}
Примеры использования вышеприведенной конфигурации:
# получаем картинку с 10-й секунды оригинального размера.
localhost/thumbs/video.mp4?second=10
# получаем картинку с 20-й секунды и высотой 50px и длиной соблюдая пропорции видео.
localhost/thumbs/video.mp4?second=10&height=50
# получаем картинку с 30-й секунды с высотой 50px и дилной 100px, картинка будет кропнута соблюдая пропорции видео.
localhost/thumbs/video.mp4?second=20&height=50&width=100
Забираем, смотрим директивы на страничке модуля.
Мне кажется это отличное решение для тех кто публикует HTML видео, чтобы добавлять poster:
<video controls="controls" poster="http://localhost/thumbs/movie.mp4?second=10">
<source src="movie.mp4" type="video/mp4" />
Your browser does not support the video tag.
</video>
А так-же при комментировании ссылаться на какое-то время и получать картинку типа как на Youtube ссылка на определенное время.