本文目录一览:
- 1、windows php怎么使用ffmpeg
- 2、怎样在windows下配置ffmpeg-php
- 3、如何在php中实现ffmpeg视频转码
- 4、如何解决php执行exec函数ffmpeg命令不生效的问题
windows php怎么使用ffmpeg
Windows下FFmpeg快速入门
FFmpeg简介
FFmpeg是什么?
FFmpeg是用于录制、转换和流化音频和视频的完整解决方案, 包括 libavcodec ,一套领先的音/视频编解码类库。FFmpeg 在Linux上开发,当可以在大多数操作系统下编译,包括Windows。-phpffmpeg并发
Note
FFmpeg对GCC的依赖很强,所以就算是在Windows上, 用VC编译FFmpeg也不是一件轻松的事情。请尽量使用 GCC来编译FFmpeg,比较事半功倍。
FFmpeg的组成结构
FFmpeg主要由一下几个部分组成:
libavcodec: 一个包含了所有FFmpeg音视频编解码器的库。 为了保证最优性能和高可复用性,大多数编解码器从头开发的。
libavformat: 一个包含了所有的普通音视格式的解析器和 产生器的库。
ffmpeg:命令行的视频格式转换程序。
ffplay:视频播放程序。(需要SDL支持)
ffserver:多媒体服务器
三个实例程序,这三个实例较为复杂,基本可以作为API使用手册:
了解完组成结构后,你会发现,如果你在寻找一种视频格式转换 的方式,那FFmpeg绝对是你的第一选择,libavcodec 则又是重 中之重。如果遇上API不会使用的情况,可以参考ffmpeg.c、ffplay.c、 ffserver.c、apiexample.c(解码)和output_example.c(编码)。-phpffmpeg并发
FFmpeg的编译
要使用FFmpeg,第一步就是编译,编译FFmpeg是一个复杂的过程,如果你想加快速度,领略FFmpeg 的风采,则可以跳过这一步,直接进入下一章节。
FFmpeg的SDK
FFmpeg是一个复杂的工程,第一步编译,特别是Windows下的编译 过程,更是复杂。 因此,好心的网友提供了Windows下编译好的 dll和lib库文件,以及相关的头文件。新手们则可直接下载,并开始编写 FFmpeg库的程序了。-phpffmpeg并发
以上两者已经足以完成FFmpeg的入门,最新的SDK版本是3.0, 对应于FFmpeg的版本是 r10087。新手们可以从编译源代码库中的 output_example.c开始,同时参考 SDK入门宝典 。-phpffmpeg并发
编译output_example.c的时候需要注意以下问题:
VC的是不支持C语言中的inline,所以可以把相关的inline删除。
对于snprintf的支持,可以考虑下载 snprintf.h和snprintf.c放入工程中。
怎样在windows下配置ffmpeg-php
首先介绍下我使用的集成环境wamp。
PHP: php5.2.6
Apache: apache2.2.8
1.下载ffmpeg-php
2. 解压ffmpeg-php-win32-all.zip 后有下面几个文件:
avcodec-51.dll
avformat-51.dll
avutil-49.dll
php_ffmpeg.dll
pthreadGC2.dll
3. 将四个文件拷贝到windows\system32文件夹下面(小插曲:之前自己再配置时候按照网上的文章只拷贝两个文件 avcodec-51.dll, avformat-51.dll到这个文件,结果发现并不能配置成功。后来将后面avutil-49.dll, pthreadGC2.dll全部拷贝过去就成功了,很有可能这四个文件是有一定关联使用的。)-phpffmpeg并发
avcodec-51.dll, avformat-51.dll, avutil-49.dll, pthreadGC2.dll
4. 然后需要到apache\bin文件下找到php.ini文件下允许使用dll文件加入extension=php_ffmpeg.dll 并允许 extension=php_gd2.dll, extension=php_gettext.dll这两个-phpffmpeg并发
改动后如下(去掉前面的分号就代表允许执行)
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_ffmpeg.dll
5. 重新启动wamp后使用phpinfo()函数看到一下信息配置: //我两个环境一个apache一个IIS,iis不用重启就生效了,apache没试不知道, add by aboc
ffmpeg
ffmpeg-php version 0.5.2.1
libavcodec version Lavc51.43.0
libavformat version Lavf51.12.2
ffmpeg-php gd support enabled
以上就表明ffmpeg在php环境中配置成功了。
6. 下面我们建立一个php的页面来测试是不是可以使用ffmpeg的一些函数功能。建立testvideo.php文件
代码如下:
?php
extension_loaded('ffmpeg'); //可不要
$ffmpegInstance = new ffmpeg_movie('C:\wamp\www\top10.mp4'); //这里要用绝对路径
echo "getDuration: " . $ffmpegInstance-getDuration()."br" .
"getFrameCount: " . $ffmpegInstance-getFrameCount()."br" .
"getFrameRate: " . $ffmpegInstance-getFrameRate()."br" .
"getFilename: " . $ffmpegInstance-getFilename()."br" .
"getComment: " . $ffmpegInstance-getComment()."br" .
"getTitle: " . $ffmpegInstance-getTitle()."br" .
"getAuthor: " . $ffmpegInstance-getAuthor()."br" .
"getCopyright: " . $ffmpegInstance-getCopyright()."br" .
"getArtist: " . $ffmpegInstance-getArtist()."br" .
"getGenre: " . $ffmpegInstance-getGenre()."br" .
"getTrackNumber: " . $ffmpegInstance-getTrackNumber()."br" .
"getYear: " . $ffmpegInstance-getYear()."br" .
"getFrameHeight: " . $ffmpegInstance-getFrameHeight()."br" .
"getFrameWidth: " . $ffmpegInstance-getFrameWidth()."br" .
"getPixelFormat: " . $ffmpegInstance-getPixelFormat()."br" .
"getBitRate: " . $ffmpegInstance-getBitRate()."br" .
"getVideoBitRate: " . $ffmpegInstance-getVideoBitRate()."br" .
"getAudioBitRate: " . $ffmpegInstance-getAudioBitRate()."br" .
"getAudioSampleRate: " . $ffmpegInstance-getAudioSampleRate()."br" .
"getVideoCodec: " . $ffmpegInstance-getVideoCodec()."br" .
"getAudioCodec: " . $ffmpegInstance-getAudioCodec()."br" .
"getAudioChannels: " . $ffmpegInstance-getAudioChannels()."br" .
"hasAudio: " . $ffmpegInstance-hasAudio();
?
7.执行后如果拿到视频的一些信息如下就表示环境配置成功了,那我们就可以开始开发我们的视频转换了。
执行结果:
getDuration: 811.13336181641
getFrameCount: 12167
getFrameRate: 15
getFilename: C:\wamp\www\top10.mp4
getComment:
getTitle:
getAuthor:
getCopyright:
getArtist:
getGenre:
getTrackNumber: 0
getYear: 0
getFrameHeight: 240
getFrameWidth: 320
getPixelFormat: yuv420p
getBitRate: 269769
getVideoBitRate:
getAudioBitRate:
getAudioSampleRate: 48000
getVideoCodec: mpeg4
getAudioCodec: mpeg4aac
getAudioChannels: 2
hasAudio: 1
视频截图的话如下方法: //add by aboc
$ff_frame = $ffmpegInstance-getFrame(rand(1,$ffmpegInstance-getFrameCount())); //随机截取某一帧
$gd_image = $ff_frame-toGDImage();
imagejpeg($gd_image,'t.jpg');
imagedestroy($gd_image);
echo 'img src="t.jpg" /';
如何在php中实现ffmpeg视频转码
具体代码如下:
?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?
PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。
它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,
执行效率比完全生成HTML标记的CGI要高许多;
PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
如何解决php执行exec函数ffmpeg命令不生效的问题
返回值是你所执行的命令的返回值,这个要看你执行的命令是什么了。linux下,一般命令执行成功的返回值是零,非零表示错误代码,你需要查找命令的相关手册。