使用 exec 命令调用 ffmpeg 。无论怎么设置参数(可能有隐藏参数没看到)都无法获取到返回值,因为要获取视频的信息所以一定要能获取到 metadata 。- -#
调用 exec 命令 ffmpeg 直接输出了,并没有任何返回值- -
附上 code
<?php $return = exec(__DIR__."/ffmpeg -i ".__DIR__."/in.flv",$output,$return_val); var_dump($return); var_dump($output); var_dump($return_val);
![]() | 1 skydiver 2015-12-14 13:37:40 +08:00 这个跟 ffmpeg 没关系。 你需要的是仔细看看 php 的文档 https://secure.php.net/manual/zh/function.exec.php |
![]() | 2 cevincheung OP |
![]() | 3 skydiver 2015-12-14 16:57:53 +08:00 @cevincheung 直接在命令行里运行是什么结果? |
![]() | 4 cxbig 2015-12-14 17:01:26 +08:00 via iPhone 先把你的 code 贴出来好吧,不然怎么知道你的问题在哪? |
![]() | 5 wxg4net 2015-12-14 17:13:52 +08:00 $return_var 返回的值是什么 这个值代表了程序是否成功执行 |
6 simon7 2015-12-14 18:43:22 +08:00 via iPhone ffmpeg 的输出,好像是输出到 error 那个流里面的 |
![]() | 7 snailsir 2015-12-14 18:46:57 +08:00 当年为了将 m4a 转为 MP3 格式的,光安装就废了半天劲,后台终于勉强转换成功了,但貌似音质有损,不知是哪的问题。。。。 |
![]() | 8 juice 2015-12-14 22:03:29 +08:00 2 > &1 |
![]() | 9 cevincheung OP @cxbig code 附上了 |
![]() | 10 cevincheung OP @juice 不行,这样获取不到任何输出了。难道一定要把转换放到后台然后把输出扔到一个随机文件里? |
![]() | 11 cxbig 2015-12-14 22:22:10 +08:00 语法错误,-i <filename>是指定输入文件,除非你要给输出的文件名。的确可以用这个命令来单纯查看文件信息,不过,输出都在 stderr 里,你要去“ 2 ”里取出来 所以命令要加一个错误信息转向: ffmpeg -i input.flv 2>&1 这样$output 就能收到了 |
![]() | 12 cxbig 2015-12-14 22:23:52 +08:00 补一下相关 bash 知识, stdin, stdout, stderr, 2>&1 这些东西的含义 |
![]() | 13 wheat 2015-12-14 22:54:30 +08:00 <?php $cmd = "/usr/local/bin/ffmpeg -i ~/Downloads/laji.mp4" $proc = proc_open($cmd, array(array('pipe', 'r'),array('pipe', 'w'),array('pipe', 'w')), $pipes); fwrite($pipes[0], $input); fclose($pipes[0]); $stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); $return_code = (int)proc_close($proc); echo $stderr; ?> |
![]() | 14 cevincheung OP @wheat input 哪里来的? |
![]() | 15 cevincheung OP |
![]() | 16 sitiao 2015-12-14 23:30:28 +08:00 用 C/C++写一个 PHP 的扩展,在扩展里面掉 ffmpeg ,应该就可以实现交互了。 |
![]() | 17 cxbig 2015-12-15 00:07:28 +08:00 via iPhone @cevincheung 一般命令行交互都有相关参数屏蔽 prompt ,你要查。 |
![]() | 18 wxg4net 2015-12-15 08:11:52 +08:00 @cevincheung @wheat 给出了一个很 NB 的例子。 参考 http://php.net/manual/zh/function.proc-open.php (proc_open 执行一个命令,并且打开用来输入 /输出的文件指针) 帮助你理解。 另外 参数的意义要充分了解。比如 return_var 如果为非 0 那么表示这个命令运行遇到错误了 所以就要查看你的执行命令了。 |