【问题标题】:Why exec for avconv does not return the script video converting status?为什么 avconv 的 exec 不返回脚本视频转换状态?
【发布时间】:2016-02-26 07:37:26
【问题描述】:

我正在使用 PHP exec 命令通过 avconv linux 库转换视频:

exec("avconv -i $mp4FilePath -acodec libvorbis -aq 5 -ac 2 -qmax 25 -threads 2 $webmFilePath > /dev/null &" , $output, $return);
echo PHP_EOL . 'Script output: ' . $return . PHP_EOL;
die;

现在当我运行 php 脚本时,输出是:

developers
  built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2014-09-08 00:58:51
  Duration: 00:02:50.38, start: 0.000000, bitrate: 414 kb/s
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 315 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, fltp, 95 kb/s
    Metadata:
      creation_time   : 2014-09-08 00:58:51
[libvpx @ 0x17bb220] v1.3.0
Output #0, webm, to '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2014-09-08 00:58:51
    encoder         : Lavf54.20.4
    Stream #0.0(und): Video: libvpx, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=-1-25, 200 kb/s, 1k tbn, 24 tbc
    Stream #0.1(und): Audio: libvorbis, 44100 Hz, stereo, fltp
    Metadata:
      creation_time   : 2014-09-08 00:58:51
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libvpx)
  Stream #0:1 -> #0:1 (aac -> libvorbis)
Press ctrl-c to stop encoding
frame= 4089 fps= 21 q=0.0 Lsize=    7151kB time=170.38 bitrate= 343.8kbits/s    
video:5288kB audio:1751kB global headers:4kB muxing overhead 1.538016

当脚本运行并且转换成功时,它会在最后一行等待没有任何反应并且echo 命令未执行,我的脚本正在等待信号停止(我认为是这样)。当我按下回车键时,我会回到 shell。

为什么没有打印出返回输出?那么如何查看视频转换是否成功呢?


编辑 1:
当我删除> /dev/null & 时,我可以看到脚本已成功结束并且$return 已返回0 以进行成功转换(如果我错了,请纠正我)。但是$output 是一个空数组。虽然我可以在上面显示的 shell 中看到整个输出。我想将整个数据记录到日志文件中。

【问题讨论】:

  • 你试过直接执行你的命令吗?也许 avconv 的调用等待一些用户交互
  • @AlexanderBaltasar 当我直接运行它时,脚本成功完成,shell 返回获取命令。当我删除 > /dev/null & 时,shell 也会显示并且不等待输入,但输出会写入终端而不是 $output 变量。

标签: php exec avconv


【解决方案1】:

首先我删除了> /dev/null &,以便在脚本工作完成后能够返回终端。然后为了获得$output 中的avconv 输出,我将2>&1 附加到脚本的末尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2013-05-15
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多