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/bin这样,如果你以root的身份登录HOME最有可能/root。因此,也许替换$HOME用/usr/local ,那样就会安装在/usr/local/bin目录下,具体的我没有执行,这是查到的解决方案,希望可以给别人提供一些帮助。

时间: 2024-10-15 09:46:34

PHP+ffmpeg+nginx的配置实现视频转码的相关文章

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

最近项目中需要实现上传视频过程中自动转码MP4格式的功能,想到了用FFmpeg来实现它,但从来没有操作过,查阅了很多资料,遇到了好多问题,现在终于安装成功,觉得应该写下来与人分享一下,以免有人遇到和我一样的困境. 首先我是CentOs 6.7版本 环境是LNMP 我需要用PHP实现在上传过程中实施转码功能. 下面详细介绍一下安装ffmpeg扩展的操作 要求:具有完全root访问权限. ①从repo导入GPG密钥: rpm --import http://packages.atrpms.net/R

ffmpeg+nginx搭建直播服务器

Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器 https://zhuanlan.zhihu.com/p/28009037 FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,不用第三方SDK,自研推流拉流 https://blog.csdn.net/hejjunlin/article/details/71976574 用ffmpeg+nginx+海康威视网络摄像头rtsp在手机端和电脑端实现直播 https://blog.csdn.net/zfgo

nginx+jwplayer配置flv/MP4点播系统, 视频拖动支持

一 配置nginx 1. 下载 nginx 最新版 http://nginx.org/ 2. 安装依赖库, 以ubuntu为例 apt-get install libpcre3 libpcre3-dev libssl-dev openssl 3. 编译nginx, 增加flv和MP4的支持 /configure --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-debug 编译时可以指定安装目录

indows下PHP通过ffmpeg给上传的视频截图详解

windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家分享一下: 首先要安装PHP的ffmpeg扩展,我们需要php_ffmpeg.dll文件和一些其他的辅助文件,        这里整理了一下提供给大家: ffmpeg-php-win32-all.rar: 解压后你将得到5个文件,将avcodec-51.dll, avformat-51.dll, a

黄聪:FFmpeg视频转码技巧之-crf参数(H.264篇)

昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆:要求在确保质量的情况下把文件压缩到10M以内. 这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 49 = 1.6 Mbps.也就比VCD的质量略好一点(注:VCD的标准码率是1150 Kbps).谈何“确保质量”?mission impossible啊! 咱还是现实一点吧.在不明显损失画质的前提下,看看使用FFmpeg能够帮到多少忙.用iPhone拍了一个1920 x 1080的视频,33秒,4

使用FFmpeg将字幕文件集成到视频文件

本文最后更新于:2015-05-25 13:12:00 原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video 向视频文件里添加字幕是件很常见的事,本文使用FFmpeg将字幕文件集成到视频文件里. 在CentOS上编译安装FFmpeg 字幕文件转换 字幕文件有很多种,常见的有 .srt , .ass 文件等,下面使用FFmpeg进行相互转换. 将.srt文件转换成.ass文件 1 ffmpeg -i subtitle.sr

关于iOS上使用ffmpeg的编译配置

使用ffmpeg进行音视频开发,首先编译需要把ffmpeg的源码编译成静态库,编译不是大问题,关键问题是编译的时候的各种配置该怎么设置的问题.之前在网上搜索学习,这篇文章不错:iOS: FFmpeg编译和使用问题总结 .有些文章给出编译的整个命令,有的给脚本链接,但是都有一些问题,因为ffmpeg版本更新了.iOS版本更新了(我下的是ffmpeg2.3).最后东拼西凑,终于编译成功了一个,编译命令是: (1) ./configure --prefix=../i386 --disable-ffmp

Java Web 中使用ffmpeg实现视频转码、视频截图

转载自:[http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html] 视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可

使用nginx 共享服务器中的视频

nginx 共享服务器中的视频 如果服务器处于内网或者没有公网ip,可以使用 相关软件进行打洞或转发 如: frpc https://github.com/fatedier/frp 或 holer https://github.com/wisdom-projects/holer 服务器中有很多视频,有时候在外面想要看些视频的时候就有些麻烦了.可以通过http共享然后使用vlc之类播放器播放.但是需要自制播放列表很是麻烦. 使用nginx_rtmp_module 查件可以实现 直接从目录方式访问点