php 启动ffmpeg,php – 如何以编程方式启动/停止FFMPEG流转码

所以我做错了.

对于初学者,我需要将输出格式ffmpeg推送到日志文件,并告诉它覆盖我的临时文件而不提示使用-y参数.

而不是

ffmpeg -f mjpeg -i "http://user:pass@10.0.1.200/nphMotionJpeg?Resolution=640x480&Quality=Standard" -b:v 1500k -vcodec libx264 /tmp/test.mp4

我现在正在使用

ffmpeg -y -f mjpeg -i "http://user:pass@10.0.1.200/nphMotionJpeg?Resolution=640x480&Quality=Standard" -b:v 1500k -vcodec libx264 /tmp/test.mp4 /dev/null 2>/tmp/ffmpeg.log &

第二个问题是我在将kill命令发送到ffmpeg之前没有等待足够长的时间,因此正在创建一个损坏的文件.

通过在1秒内添加-t(用于时间限制)参数,我确定ffmpeg平均需要15秒来记录1秒的视频.将时间限制增加到10秒使平均增加到25秒,所以似乎在我的服务器上至少有14秒的开销.通过将我的PHP脚本中的睡眠命令增加到30秒,我能够获得可用的视频文件.

因此,让PHP终止ffmpeg进程导致未知(或近似最佳)的记录时间长度,这完全取决于CPU功率,网络带宽等.

这有点令人失望,因为我希望能够根据一些外部变量增加记录长度(我有运动传感器输入数据库,我想记录直到运动停止).

无论如何,这是一个有效的PHP脚本,以防将来帮助某人:

print date('H:i:s')."\nStarted recording. waiting 60 seconds...\n";

exec('../lib/ffmpeg -y -f mjpeg -i "http://user:pass@10.0.1.200/nphMotionJpeg?Resolution=640x480&Quality=Standard" -b:v 1500k -vcodec libx264 /tmp/test.mp4 /dev/null 2>/tmp/ffmpeg.log &');

sleep(60); // Wait long enough before killing, otherwise the video will be corrupt!

shell_exec('pkill ffmpeg'); // find and kill since we don't know the PID

echo "done\n\n";

exit();

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值