Я создаю сайт видеовещания, в котором мне нужно знать, как создавать эскизы из видео. Пожалуйста помоги. Любые предложения или рекомендации будут высоко оценены
Вот фрагмент для захвата кадра из середины видео. Это старый код, в котором я лежал, поэтому я уверен, что его можно упростить. Обязательно настройте путь ffmpeg в строке 1, чтобы он соответствовал месту установки.
$output = shell_exec("/usr/local/bin/ffmpeg -i {$path}"); preg_match('/Duration: ([0-9]{2}):([0-9]{2}):([^ ,])+/', $output, $matches); $time = str_replace("Duration: ", "", $matches[0]); $time_breakdown = explode(":", $time); $total_seconds = round(($time_breakdown[0]*60*60) + ($time_breakdown[1]*60) + $time_breakdown[2]); shell_exec("/usr/local/bin/ffmpeg -y -i {$input_filepath} -f mjpeg -vframes 1 -ss " . ($total_seconds / 2) . " -s {$w}x{$h} {$output_filepath}";
Вы можете использовать ffmpeg
.
Как только он будет установлен на вашем сервере, вы можете использовать его на PHP, написав командную строку и вызывая exec
на нем.
например:
exec('ffmpeg -i mymovie.mov -vcodec mjpeg -vframes 1 -an -f rawvideo -s 64x64 foo.jpg');
Я знаю, что этот вопрос старый. Но я столкнулся с этим, когда искал подобное решение. Вот мои выводы. Надеюсь, это поможет кому-то другому.
Html5 + JS. Вот мои демо / слайды по этой теме.
HTML в библиотеку Canvas не пошел по этому пути, но, возможно, это сработает.
Я использовал ffmpeg, начиная задачу с exec () и добавляю амперсанд к команде, чтобы PHP-скрипт мог продолжить. Если я хочу, чтобы ffmpeg закончил сначала, у меня нет амперсанда.
Из FAQ: «Как закодировать фильм на отдельные снимки?» http://ffmpeg.org/faq.html#SEC15
ffmpeg -i movie.mpg movie%d.jpg
Это создает много изображений.
В документах: «Преобразование формата видео и аудио файлов» http://ffmpeg.org/ffmpeg-doc.html#SEC5
ffmpeg -i foo.avi -r 1 -s WxH -f image2 -vframes 1 foo.jpeg
Замените W & H шириной / высотой (см. http://ffmpeg.org/ffmpeg-doc.html#SEC9), замените vframes на количество желаемых кадров, добавьте% d в имя файла для порядкового номера, если вы делаете несколько изображений , Чтобы захватить в определенный момент видео, используйте -ss (см. http://ffmpeg.org/ffmpeg-doc.html#SEC8)