Я искал по всему Google и StackOverFlow, но до сих пор не нашел для этого решения.
Я хочу сгенерировать видеоролик всех видеофайлов mp4 в каталоге и называть миниатюры как «filename.mp4» .jpg
У меня есть ffmpeg и ffmpeg-php, установленные на моем сервере. Мне также удалось создать миниатюры одного файла за раз.
Итак, это ситуация, у меня есть каталог с именем uploads, в котором много видео mp4. Теперь, когда я запускаю скрипт, миниатюра размером 100×100 shoud будет автоматически создаваться и помещаться в другую папку «skrin». Например: xxx.mp4 должен иметь xxx.mp4.jpg имеет имя большого пальца.
ВАЖНО: у моих имен файлов есть пробелы, одинарные кавычки, скобки и т. Д. В именах файлов. Таким образом, сценарий должен иметь возможность справиться с этим.
Может кто-нибудь мне помочь? Я использую следующую команду оболочки в php, используя exec для генерации большого пальца отдельного видео.
exec("/usr/local/bin/ffmpeg -itsoffset -105 -i 'xxx haha.mp4' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 'xxx haha.mp4.jpg'");
Это просто быстрый:
$videos_dir = 'path/to/videos'; $videos_dir = opendir($videos_dir); $output_dir = 'path/to/output/dir/'; while (false !== ($file = readdir($videos_dir))) { if ($file != '.' && $file != '..'){ $in = $videos_dir.'/'.$file; $out = $output_dir.$file.'.jpg'; exec("/usr/local/bin/ffmpeg -itsoffset -105 -i ".$in." -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 ".$out); } }
попробуй это
try { $directory = 'your directory name'; $dir = new RecursiveDirectoryIterator($directory); $it = new RecursiveIteratorIterator($dir); while($it->valid()) { if (!$it->isDot()) { //echo 'SubPathName: ' . $it->getSubPathName() . "\n"; //echo 'SubPath: ' . $it->getSubPath() . "\n"; //echo 'Key: ' . $it->key() . "\n\n"; echo $name = $it->key(),"\n"; exec("/usr/local/bin/ffmpeg -itsoffset -105 -i $name -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 $name.'.jpg'"); } $it->next(); } } catch(Exception $e) { echo 'No files Found!<br />'; }