7

これらのスライドからビデオを取得するためにスライドショーを実行している間、Web サイトのマインドの記録/キャプチャを管理する必要があります。

私のアプローチは次のとおりです。

<?php 

define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg ');

$ffmpegcmd = "ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output.mpg";

shell_exec($ffmpegcmd);  

?>

しかし、私はphpエラーログからこのエラーを受け取ります:

[x11grab @ 0x81e8aa0] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 800 height: 600
No protocol specified
No protocol specified
[x11grab @ 0x81e8aa0] Could not open X display.
:0.0: Input/output error

コンソールからの同様のコマンドは正常に実行されます。

表示を取得して、ブラウザのphpスクリプトからffmpegを制御できるようにするために、何か助けてください。

前もって感謝します。


御時間ありがとうございます。

X 表示エラーは解消されましたが、まだキャプチャーできていません。

xvfb を使用すると、www-data ユーザーによって書き込まれた /tmp に不明なファイルが取得されます:

startx を実行すると、/tmp -rw------- 1 www-data www-data 59 Sep 12 09:53 serverauth.oLcFlG7tXC で不明なファイルも取得しました

どちらもサイズが大きくなるため、何もキャプチャされません。内容はバイナリのものです。それらのファイルは何ですか?

私がしようとしているのは、ffmpeg がデスクトップをキャプチャして Web サイトに表示される jquery スライドからビデオを作成する時間を制御できるスクリプトを作成することです。

コンソールからの試行は近いですが、ブラウザで実行できれば、スライドが終了したら AJAX リクエストの送信を停止するタイミングを知ることができます。

これはコンソールからの私の試みです:

#!/bin/bash

# start the slide website: I will need to change it to control by querystring the language and course level
firefox http://www.languagecourse.net/vocabulary-trainer.php &
# start recording: I will need to adjust the frame to capture
ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output2.mpg &
# since I can't control the time a course takes I pause an arbitrary time
sleep 5
# look for the capture PID and close it
for i in $(ps aux | grep ffmpeg | sed "s/  */#/g" | cut -f2 -d#)
do
  echo "proceso $i killed"
  kill -9 $i
done

Web サイトが開いたら、AJAX から制御を続行できますが、ffmpeg PID を取得してコマンドを停止できるかどうかはわかりません。

どんな種類のコメントでも感謝します。

よろしく、 ·_-

4

1 に答える 1

5

Xvfbを使用してx環境をエミュレートできます

<?php
$ffmpegcmd = "xvfb-run -a  ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output.mpg";

shell_exec($ffmpegcmd);  

またはこのようなもの

<?php 
$ffmpegcmd = "startx -- `which Xvfb` :1 -screen 0 800x600x24 && DISPLAY=:1 && ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output.mpg");
shell_exec($ffmpegcmd); 

「Xディスプレイを開けませんでした」を取り除くのに良いはずです。エラー、そしておそらくあなたの問題を解決します。

于 2012-09-10T16:51:49.060 に答える