Видео. Раскаровка ролика на скрины.

muratti
На сайте с 31.05.2008
Offline
238
596

Господа специалисты, к вам вопрос. :)

1. Есть на винте 1000 видяшек (flv, mov, avi) коротких. Требуется заскринить 5-10 кадров с каждой видяхи рандомно, сохранив их в джипеги, и чтобы на автомате. Ручками могу, но это не комильфо.

2. Возможно ли сделать тоже самое с видяхами уже размещенными на сайте и доступными в онлайне, чтобы не скачивать обратно на винт?

Каким образом все это можно провернуть?

Можно пнуть урлом.

ps: в заголовке *раскадровка.

AboutSEO
На сайте с 18.01.2007
Offline
154
#1

на сайте скорее всего только этим ffmpeg , массово не в курсе..., но на пхп думаю и массово не сложно будет смастерить.

AlikZP
На сайте с 22.11.2009
Offline
107
#2

На локальной машине поможет Video Thumbnails Maker by Scorp ( http://www.suu-design.com/projects_ru.html ). Пользуюсь ей для создания скрин-листа на торрент-раздачах. Бесплатная, поддерживает пакетную обработку.

На стороне сервера - ffmpeg, как было указано выше. Стоит отметить, что данный модуль установлен далеко не на всех шаровых пакетах хостинга. Если у вас VDS - можете его устанавливать. Инфы по нем в сети полно.

PS. В этой /ru/forum/491179 теме когда будут ответы возможно найдете что-то полезное для себя

Website CMS: быстрая, удобная, недорогая! Вечная лицензия за 45$ (/ru/forum/524503) Яся - быстрый поиск фото для товаров. OpenCart/ocStore. Дополнение. (/ru/forum/665287) Грамотная верстка ваших макетов (/ru/forum/comment/8853216)
Skom
На сайте с 02.12.2006
Offline
166
#3

Где-то так.

За изящество не ручаюсь, bearman наверняка покрасивей бы сделал.

$Video='t.avi';

$ScreenShots=5;
$OutDir="Screens";

$data=my_exec("ffmpeg -i '$Video'");
preg_match("/Duration: ([0-9:]+)/",$data[stderr],$l);
list($h,$m,$s)=preg_split("/:/",$l[1]);
$length=$h*3600+$m*60+$s;
$offset=intval($length/$ScreenShots);
for($i=1;$i<=$length;$i+=$offset){
$c++;
$r=my_exec("ffmpeg -y -ss $i -i '".$Video."' -vframes 1 -f image2 '$OutDir/$c.jpg'");
};

my_exec (тупо перепёрт с php.net)

function my_exec($cmd, $input='') 

{$proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
$rtn=proc_close($proc);
return array('stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>$rtn
);
}

Правите под себя пути, в цикл и вперёд.

А, ну и max_execution_time из расчёта на время выполнения всего.

P.S.

Если заниматься видео на сайте, то ffmpeg надо ставить полюбому. Я вообще не понимаю - как без него c видео дело иметь :D

Cras amet qui numquam amavit quique amavit cras amet
[Удален]
#4
Ручками могу, но это не комильфо.

Отнюдь :) Если считать выхлоп от радномных сринов - то лучше всё же выбирать лучшие сцены. Ессно это возможно только вручную.

По сабжу - многие плееры умею сохранять покадрово и выборочно делать скрины (бсплеер. зуумплеер - на вскидку). А так лучший инструмент редактирования\преобразования видео - VirtualDub.

N
На сайте с 06.05.2007
Offline
419
#5

интересней как за один запуск ffmpeg сгенеририть картинки. а то некоторые файлы без индекса и ffmpeg их считывает каждый раз сначала. (по-моему даже вообще все файлы - очень уж медленно иной раз )

пока что даже в "профессиональных" коробочных скриптах запускают ffmpeg в цикле.

Кнопка вызова админа ()
Skom
На сайте с 02.12.2006
Offline
166
#6
netwind:
интересней как за один запуск ffmpeg сгенеририть картинки

Боюсь, что никак.

N
На сайте с 06.05.2007
Offline
419
#7

ну, я тут уже нашел как : ffmpeg -r 0.3 -f image2 out_%d.jpg . Хотя это не дает возможность сгенерить картинки в точно рассчитанных позициях.

но оказывается в популярных скриптах указывают -ss ПОСЛЕ -i, что приводит к просмотру файла до позиции. А если -ss указать до -i то все нормально происходит смещение по индексу и такая производительность меня устраивает.

Skom
На сайте с 02.12.2006
Offline
166
#8

Эта строчка, вроде, тупо выгоняет все кадры в jpeg.

-r показывает только с каким fps это делать.

И, к сожалению, он не может быть ниже 0.05.

А так, конечно было бы удобно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий