0

Google と StackOverFlow 全体を検索しましたが、これに対する解決策はまだ見つかりませんでした。

ディレクトリ内のすべての mp4 ビデオ ファイルのビデオ サムネイルを生成し、サムネイルに「filename.mp4」.jpg という名前を付けたい

サーバーにffmpegとffmpeg-phpがインストールされています。また、一度に 1 つのファイルのサムネイルを作成することにも成功しました。

これが状況です。たくさんのmp4ビデオがあるuploadsという名前のディレクトリがあります。これで、スクリプトを実行すると、サイズ 100x100 のサムネイルが自動的に作成され、別のフォルダー「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'");
4

2 に答える 2

3

それはただの簡単なものです:

$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);
    }
}
于 2012-02-02T06:00:19.587 に答える
2

これを試して

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 />';
    }
于 2012-02-02T06:15:04.493 に答える