我需要管理一个网站的记录/捕获,当它正在运行幻灯片放映以从这些幻灯片中获取视频.
我的方法是:
<?php
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg ');
$ffmpegcmd = "ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output.mpg";
shell_exec($ffmpegcmd);
?>
Run Code Online (Sandbox Code Playgroud)
但我从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
Run Code Online (Sandbox Code Playgroud)
来自控制台的类似命令运行良好
请,任何帮助获得显示,并能够从浏览器php脚本控制ffmpeg?
提前致谢.
谢谢你的时间.
我摆脱了X显示错误,但不是我还没有得到捕获.
使用xvfb我在www-data用户写的/ tmp上得到一个未知文件:-rw-r-r-- 1 www-data www-data 11252 Sep 12 09:49 server-B20D7FC79C7F597315E3E501AEF10E0D866E8E92.xkm
运行startx我在/ tmp -rw也有一个未知文件------- 1 www-data www-data 59 Sep 12 09:53 serverauth.oLcFlG7tXC
任何一个都在增长,所以它没有捕获任何东西.内容是一些二进制的东西.那些文件是关于什么的?
我试图是编写一个脚本中,我可以控制时间的ffmpeg被捕获桌面从网站上显示的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
Run Code Online (Sandbox Code Playgroud)
我不知道网站一旦被打开,我可以继续做从AJAX控制,但不知道如果我将能够得到FFmpeg的PID停止命令.
我将不胜感激任何评论.
问候, ·_-
您可以使用Xvfb来模拟x环境
<?php
$ffmpegcmd = "xvfb-run -a ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/output.mpg";
shell_exec($ffmpegcmd);
Run Code Online (Sandbox Code Playgroud)
或类似的东西
<?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);
Run Code Online (Sandbox Code Playgroud)
这应该是摆脱"无法打开X显示"的好处.错误,可能会解决您的问题.