Задача-минимум следующая:
- Создать раскадровку для всех видео из указанной папки.
- В браузере вывести ссылки на видео и соответствующие раскадровки под ними.
Задача-максимум на будущее:
- Многофункциональная галерея для всех видов медиа (видео, аудио, изображения).
Начнем с простого.
Для работы с видео будем использовать мощную библиотеку libav.
Далее буду приводить выдержки из скриптов с описаниями.
Для работы с видео будем использовать мощную библиотеку libav.
Далее буду приводить выдержки из скриптов с описаниями.
thumbnails.sh - генератор раскадровок для видео
Ищем видеофайлы (следуем по ссылкам, только с расширениями mp4, avi, mpeg, mpg):
> find -L "$from_dir" -type f -regextype posix-egrep -regex ".*\.(mp4|avi|mpeg|mpg)
Здесь $from_dir это shell-переменная (например, from_dir=/home/myuser/myvideo).
Затем нужно организовать цикл по найденным видео. Допустим, в теле цикла имя файла передается в переменную $video, тогда для генерации эскизов (fps = 1/20 сек. = 0.05 - то есть 1 кадр через каждые 20 секунд, смещение от начала - 1 сек., размер эскиза - 300x? - то есть пропорциональное уменьшение до прямоугольника не более 300 пикс. по ширине) используем следующую команду:
Затем нужно организовать цикл по найденным видео. Допустим, в теле цикла имя файла передается в переменную $video, тогда для генерации эскизов (fps = 1/20 сек. = 0.05 - то есть 1 кадр через каждые 20 секунд, смещение от начала - 1 сек., размер эскиза - 300x? - то есть пропорциональное уменьшение до прямоугольника не более 300 пикс. по ширине) используем следующую команду:
> avconv -i "$video" -vsync 1 -r 0.05 -ss 1 -vf "scale=300:-1" -an -y "$to_dir$to_path$to_file"
Здесь переменные в конце задают конечный путь для сохранения эскизов. Имя файла обязательно должно содержать маску, например to_file=frame%03d.png.
-vsync // плохо описанный в документации параметр, но без него -r не используется
-an // отключение звука, так на всякий случай :-)
-y // перезапись конечных файлов
-vsync // плохо описанный в документации параметр, но без него -r не используется
-an // отключение звука, так на всякий случай :-)
-y // перезапись конечных файлов
media.php - галерея ссылок на видео и соответствующих кадров
// `cmd` - вызов консольной команды из php (аналог shell_exec)
// ищем видео, форматируем пути и сортируем список
$out = `find -L '$videos_dir' -type f -regextype posix-egrep -regex '.*\.(mp4|avi|mpg|mpeg)' | sed 's|$videos_dir||' | sort -n`;
// собираем вывод консольной команды в массив
$videos = explode("\n", trim($out));
$thumbnails = array();
foreach ($videos as $video)
{
if (file_exists($thumbnails_dir.$video))
{
// ищем эскизы для каждого видео
$out = `find '$thumbnails_dir$video' -type f -name '*.png' | sed 's|$thumbnails_dir||' | sort -n`;
$thumbnails[$video] = explode("\n", trim($out));
}
}
Комментариев нет:
Отправить комментарий