Создать миниатюру видео всех файлов в каталоге с помощью FFmpeg и PHP - PullRequest
0 голосов
/ 02 февраля 2012

Я искал во всем Google и StackOverFlow, но все еще не нашел решения для этого.

Я хочу сгенерировать миниатюру видео всех видеофайлов mp4 в каталоге и назвать миниатюры как "filename.mp4 ".jpg

У меня на сервере установлены ffmpeg и ffmpeg-php.Мне также удалось создать эскизы по одному файлу за раз.

Так вот, у меня есть каталог с именем uploads, в котором есть много видео в формате mp4.Теперь, когда я запускаю скрипт, миниатюра размером 100х100 должна быть создана автоматически и помещена в другую папку «скрин».Например, 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'");

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Это просто быстро:

$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);
    }
}
2 голосов
/ 02 февраля 2012

попробуйте

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 />';
    }
...