• PHP+ffmpeg+nginx的配置实现视频转码


    最近项目中需要实现上传视频过程中自动转码MP4格式的功能,想到了用FFmpeg来实现它,但从来没有操作过,查阅了很多资料,遇到了好多问题,现在终于安装成功,觉得应该写下来与人分享一下,以免有人遇到和我一样的困境。

    首先我是CentOs 6.7版本 环境是LNMP 我需要用PHP实现在上传过程中实施转码功能。
    下面详细介绍一下安装ffmpeg扩展的操作

    要求:具有完全root访问权限。
    ①从repo导入GPG密钥:

    rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms

    ②安装ATRPMS Repo:

    rpm -ivh http://dl.atrpms.net/all/atrpms-repo-6-7.el6.x86_64.rpm

    输出应该是这样:

    Retrieving http://dl.atrpms.net/all/atrpms-repo-6-7.el6.x86_64.rpm
    Preparing...                ##################################### [100%]
       1:atrpms-repo            ##################################### [100%]

    ③开始安装ffmpeg

    yum install ffmpeg

    这里可能需要等一会儿,会提示你选择【y/n/d】
    选择y就可以了

    其实到这里的时候ffmpeg已经安装成功了
    ④安装ffmpeg-devel

    yum install ffmpeg-devel

    同样等一会,需要一些时间

    如果安装成功了,执行

    ffmpeg -version

    显示如下:

    ffmpeg version 2.2.1
    built on Apr 13 2014 13:00:18 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
    configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --enable-runtime-cpudetect --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-frei0r --enable-libopencv --enable-libdc1394 --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --disable-stripping
    libavutil      52. 66.100 / 52. 66.100
    libavcodec     55. 52.102 / 55. 52.102
    libavformat    55. 33.100 / 55. 33.100
    libavdevice    55. 10.100 / 55. 10.100
    libavfilter     4.  2.100 /  4.  2.100
    libswscale      2.  5.102 /  2.  5.102
    libswresample   0. 18.100 /  0. 18.100
    libpostproc    52.  3.100 / 52.  3.100

    证明ffmpeg已经开始工作


    写一下我自己操作执行的简单代码

    ffmpeg   -i /路径/视频名称.后缀名    /新的路径/新的名称.新后缀

    如果报The encoder ‘aac’ is experimental but experimental codecs are not enabled的错误 ,说明acc编码器的编码器没有起作用,但如果你想使用它,就在命令里加上’-strict -2’


    PHP代码
    用exec或者shell_exec函数的时候,需要修改php.ini。因为默认这两个函数在禁用列表里。
    一般php.ini 文件都在/usr/local/php/etc/php.ini

    vim /usr/local/php/etc/php.ini

    查找disable_functions 把里面的exec与shell_exec删掉就可以了
    :wq! 保存退出
    并重启php-fpm

    <?php
        $cmd = 'ffmpeg -i /home/1.wmv  /home/1.mp4';
        echo exec($cmd);
    ?>

    如果成功的话 你可以在home文件下看到1.wmv 与1.mp4。

    [参考地址:](http://www.scalescale.com/tips/nginx/ffmpeg-php-ffmpeg-centos-6-7/)

    在多记录一些过程中出现的错误吧。
    如果你是在:
    (http://blog.csdn.net/loyachen/article/details/50909854)
    这种方法安装的时候最后遇到了错误 发现exec执行不了 实现不了功能
    你可以在代码文件夹下创建一个log.txt 并给它写入的权限
    然后PHP中代码片段里

    $cmd = 'ffmpeg   -i /路径/视频名称.后缀名 '-strict -2  /新的路径/新的名称.新后缀 2>/路径/log.txt';

    重定向前加的数字解释
    文件描述符:1和2指向同一个文件表项,也可以说错误的输出被合并了.其中0 表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出
    然后执行,会把错误信息记录在log.txt中。
    我之前的错误提示是:

    sh: /root/bin/ffmpeg: Permission denied

    就是这个目录下权限是被拒绝的。或者是,你的视频不能直接在根目录下。放在别的文件夹中,赋予权限,才能PHP执行。在根据上面的链接中的安装里,默认把扩展文件全部安装在了root文件夹下。
    在执行

    PKG_CONFIG_PATH =“$ HOME / ffmpeg_build / lib / pkgconfig”./configure --prefix =“$ HOME / ffmpeg_build”-extra-cflags =“ - I $ HOME / ffmpeg_build / include”--extra-ldflags =“ - L $ HOME / ffmpeg_build / lib“--bindir =”$ HOME / bin“--pkg-config-flags =” - static“--enable-gpl --enable-nonfree --enable-libfdk-aac --enable -libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265

    的时候,
    你指向HOME/binrootHOME最有可能/root。因此,也许替换$HOME用/usr/local ,那样就会安装在/usr/local/bin目录下,具体的我没有执行,这是查到的解决方案,希望可以给别人提供一些帮助。

  • 相关阅读:
    sell02 展现层编写
    sell01 环境搭建、编写持久层并进行测试
    SpringBoot04 日志框架之Logback
    SpringBoot04 项目热部署详解
    SpringBoot03 项目热部署
    Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题
    Flask17 Flask_Script插件的使用
    Angular13 Angular2发送PUT请求在后台接收不到参数
    PostMan安装
    unix网络编程环境配置程序运行
  • 原文地址:https://www.cnblogs.com/myon/p/6430473.html
Copyright © 2020-2023  润新知