1

ビデオを取得するために、PHPを介して画像シーケンスをFFMpegにフィードしようとしています。このシェル コマンドを使用して、テキスト ファイルからイメージ ファイル名を読み取ります。

cat $(cat " . $image-list-file . ") | ffmpeg -f image2pipe ...

おそらくimagemagikまたはgdを介して画像を変更した後、パイプprom phpに出力したいと思います。

PHPでこれを行うにはどうすればよいですか?

編集:

解決

proc_open と buffer の組み合わせを使用すると、うまくいきました。これは、GD で生成された画像を使用した実際のテスト スクリプトです。

<?php
set_time_limit(0);
$descriptors = array(
    0 => array("pipe", "r")
);

$command = "ffmpeg -f image2pipe -pix_fmt rgb24 -r 30 -c:v png -i - ".
                "-r 30 -vcodec libx264 -pix_fmt yuv420p ".
                "-y test.mp4";

$ffmpeg = proc_open($command, $descriptors, $pipes);

if (is_resource($ffmpeg)){
    for ($i = 0; $i < 180; $i++) {
        $im = @imagecreate(300, 300) or die("GD error");
        $background_color = imagecolorallocate($im, 0, 0, 0);
        $line_color = imagecolorallocate($im, 233, 14, 91);
        $x = rand(0, 300);
        imageline ($im, $x, 0, $x, 300, $line_color);
        ob_start();
        imagepng($im);
        fwrite($pipes[0], ob_get_clean());
        imagedestroy($im);
    }
    fclose($pipes[0]);
}
4

1 に答える 1

1

サンプル ファイルがなければ、実際の例を示すのは困難です。しかしproc_open()、そのために使用する必要があります。proc_open()シェルでコマンドラインを実行し、入出力パイプへの直接の読み取り/書き込みアクセスを許可します。したがって、パイプが終了する前に出力を読み取ることができます。リンクしたマニュアルに例があります。

于 2013-04-30T14:48:23.643 に答える