yao978318542
V2EX  ›  问与答

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

  •  
  •   yao978318542 · Feb 25, 2017 · 4261 views
    This topic created in 3541 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Feb 25, 2017
    解决了 获取原始视频的时长 然后获取转码后视频的时长 对比一下就 OK
    19 replies  •  2018-02-20 05:35:53 +08:00
    bdbai
    bdbai
    Feb 25, 2017 via Android
    1
    怎么执行的 FFmpeg ?
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    2
    @bdbai #1 exec("FFmpeg 命令")
    isCyan
    isCyan
    Feb 25, 2017
    3
    我想是把 ffmpeg 的日志输出到文件里,然后读取文件,每个任务一个日志文件
    YanwenSun
    YanwenSun
    Feb 25, 2017 via Android
    4
    可以用返回值吧
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    5
    @isCyan #3 太麻烦了
    xiaoz
    xiaoz
    Feb 25, 2017
    6
    @yao978318542 启用了 exec 函数会不会有风险?
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    7
    @xiaoz #6 会 但是我不会安装 php-FFMpeg 啊 哎你会安装吗?
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    9
    @qiayue #8 直接下载下来 放到项目里面引用就行吗? 还是要怎么安装呢?求指点
    herozzm
    herozzm
    Feb 25, 2017
    10
    既然都 exec 了,在执行完 FFmpeg 后,再接着用一个命令将该视频转换状态改成已经完成即可
    FFmpeg xxx.mp4 && 修改完成的状态的命令
    CoderRunner
    CoderRunner
    Feb 25, 2017
    11
    string exec ( string $command [, array &$output [, int &$return_var ]] )
    可以用$return_val 判断吧
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    12
    @CoderRunner #11 然而他不会返回任何东西
    gouchaoer
    gouchaoer
    Feb 25, 2017 via Android
    13
    首先不能在 php-fpm 里面做这事,你需要另开 php-cli 完成这件事,通知通过 redis 最简单
    isCyan
    isCyan
    Feb 25, 2017
    14
    @yao978318542 #7 composer 大法好同志你为什么不上 composer 呢
    8 楼那个是 node.js 的
    yao978318542
    yao978318542
    OP
    Feb 25, 2017
    15
    @isCyan #14 关服务器的哥们不在啊 我也想啊 哎
    CoderRunner
    CoderRunner
    Feb 25, 2017
    16
    @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
    fuxiaopang
    Feb 25, 2017
    17
    ```
    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
    yao978318542
    OP
    Feb 27, 2017
    18
    @fuxiaopang #17 会返回进度吗?
    3IOhG7M0knRu5UlC
    3IOhG7M0knRu5UlC
    Feb 20, 2018 via Android
    19
    命令執行結束就行了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1648 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    ♥ Do have faith in what you're doing.