PHP 使用 FFMpeg 怎么监控视频转化完成了呢?

2017-02-25 12:30:58 +08:00
 yao978318542
3030 次点击
所在节点    问与答
19 条回复
bdbai
2017-02-25 13:11:20 +08:00
怎么执行的 FFmpeg ?
yao978318542
2017-02-25 13:12:34 +08:00
@bdbai #1 exec("FFmpeg 命令")
isCyan
2017-02-25 13:21:08 +08:00
我想是把 ffmpeg 的日志输出到文件里,然后读取文件,每个任务一个日志文件
YanwenSun
2017-02-25 13:24:18 +08:00
可以用返回值吧
yao978318542
2017-02-25 13:28:29 +08:00
@isCyan #3 太麻烦了
xiaoz
2017-02-25 14:12:27 +08:00
@yao978318542 启用了 exec 函数会不会有风险?
yao978318542
2017-02-25 14:17:38 +08:00
@xiaoz #6 会 但是我不会安装 php-FFMpeg 啊 哎你会安装吗?
qiayue
2017-02-25 14:36:39 +08:00
yao978318542
2017-02-25 14:39:13 +08:00
@qiayue #8 直接下载下来 放到项目里面引用就行吗? 还是要怎么安装呢?求指点
herozzm
2017-02-25 14:43:25 +08:00
既然都 exec 了,在执行完 FFmpeg 后,再接着用一个命令将该视频转换状态改成已经完成即可
FFmpeg xxx.mp4 && 修改完成的状态的命令
CoderRunner
2017-02-25 15:24:34 +08:00
string exec ( string $command [, array &$output [, int &$return_var ]] )
可以用$return_val 判断吧
yao978318542
2017-02-25 15:34:05 +08:00
@CoderRunner #11 然而他不会返回任何东西
gouchaoer
2017-02-25 15:34:17 +08:00
首先不能在 php-fpm 里面做这事,你需要另开 php-cli 完成这件事,通知通过 redis 最简单
isCyan
2017-02-25 15:42:54 +08:00
@yao978318542 #7 composer 大法好同志你为什么不上 composer 呢
8 楼那个是 node.js 的
yao978318542
2017-02-25 16:02:27 +08:00
@isCyan #14 关服务器的哥们不在啊 我也想啊 哎
CoderRunner
2017-02-25 18:14:49 +08:00
@yao978318542
$return_val 的说明, 这个并不是命令执行的返回值的, 正常结束$return_val 是 0

If the return_var argument is present along with the output argument, then the return status of the executed command will be written to this variable.
fuxiaopang
2017-02-25 23:08:15 +08:00
```
cmd = "/root/bin/ffmpeg -i /data/origin/{$uploadVideo->id}_.mp4 " .
"-filter:v \"scale=iw*min(1920/iw\\,1080/ih):ih*min(1920/iw\\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\\,1080/ih))/2:(1080-ih*min(1920/iw\\,1080/ih))/2\" " .
"-b:v 4000k -minrate 3500k -maxrate 10000k -bufsize 4000k " .
"-r 25 -g 25 -c:v libx264 -ar 48000 -b:a 192k -strict -2 /data/origin/{$uploadVideo->id}_o.mp4 -y";
exec($cmd." 2>&1", $out, $ret);

if ($ret) { // Error
$uploadVideo->status = Video::STATUS_FINISH_DOWN;
$uploadVideo->save();
$cmd = "rm -rf /data/encode/{$uploadVideo->id}_*";
shell_exec($cmd);
Email::report('ENCODE VIDEO ERR', print_r($out, true));
return false;
}
```

这个是我写的用来转换自动加遮幅到 1080P 4M H264 的代码,这样上传到 youku 刚好是 1080
yao978318542
2017-02-27 09:10:43 +08:00
@fuxiaopang #17 会返回进度吗?
GooMS
2018-02-20 05:35:53 +08:00
命令執行結束就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX