很多站长朋友们都不太清楚php支持ffmpeg,今天小编就来给大家整理php支持ffmpeg,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 windows php怎么使用ffmpeg 2、 php 怎么使用linux下的ffmpeg 3、 如何在php中实现ffmpeg视频转码 4、 PHP使用ffmpeg实现后台视频转码,如何监听转化的进度 5、 怎样在windows下配置ffmpeg-php 6、 php5.6 怎么安装 ffmpeg扩展 windows php怎么使用ffmpegWindows下FFmpeg快速入门
FFmpeg简介
FFmpeg是什么?
FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,
包括
libavcodec
,一套领先的音/视频编解码类库。FFmpeg
在Linux上开发,当可以在大多数操作系统下编译,包括Windows。
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(编码)。
FFmpeg的编译
要使用FFmpeg,第一步就是编译,编译FFmpeg是一个复杂的过程,如果你想加快速度,领略FFmpeg
的风采,则可以跳过这一步,直接进入下一章节。
FFmpeg的SDK
FFmpeg是一个复杂的工程,第一步编译,特别是Windows下的编译
过程,更是复杂。
因此,好心的网友提供了Windows下编译好的
dll和lib库文件,以及相关的头文件。新手们则可直接下载,并开始编写
FFmpeg库的程序了。
以上两者已经足以完成FFmpeg的入门,最新的SDK版本是3.0,
对应于FFmpeg的版本是
r10087。新手们可以从编译源代码库中的
output_example.c开始,同时参考
SDK入门宝典
。
编译output_example.c的时候需要注意以下问题:
VC的是不支持C语言中的inline,所以可以把相关的inline删除。
对于snprintf的支持,可以考虑下载
snprintf.h和snprintf.c放入工程中。
php 怎么使用linux下的ffmpeg格式转换 (将file.avi 转换成output.flv)
C代码
#ffmpeg -i file.avi output.flv
-i 表示输入文件
:现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi
两个命令(file.avi 是中间文件,用完可删)
C代码
#ffmpeg -i video.avi -vcodec copy -an video2.avi
#ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi
-i 表示输入文件
-vcodec copy 表示 force video codec (‘copy’ to copy stream) 这个不知怎么译 ,估计是直接copy
-acodec copy 这个说的应该是音频了 跟上面一样
-an:表示 disable audio 估计是audio no 之类的缩写,表示去掉video.avi 原有的音频
如何在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使用ffmpeg实现后台视频转码,如何监听转化的进度如果进程是由php发起,可以直接从stdout中获得ffmpeg输出的已编码时长,除以片长得到进度百分比。
另外一种方法是,用ffmpeg的report参数打印程序输出到某个指定文件中,读取提取该文件中的已编码时长,同上,除以片长得到进度百分比....
怎样在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全部拷贝过去就成功了,很有可能这四个文件是有一定关联使用的。)
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这两个
改动后如下(去掉前面的分号就代表允许执行)
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,'/data/upload/help/202303/13/1a18217e42ba5a0a955c074be11c216d.jpg');
imagedestroy($gd_image);
echo '<img src="/data/upload/help/202303/13/1a18217e42ba5a0a955c074be11c216d.jpg" />';
php5.6 怎么安装 ffmpeg扩展下载ffmpeg-php扩展包和ffmpeg.exe,解压后有以下文件
avcodec-51.dll
avformat-51.dll
avutil-49.dll
php_ffmpeg.dll
pthreadGC2.dll
将四个文件拷贝到windows/system32目录下
将php_ffmpeg.dll拷贝到php的ext目录下。
然后需要到apache/bin文件下找到php.ini文件下允许使用dll文件加入extension=php_ffmpeg.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_ffmpeg.dll
重启apache,输出phpinfo();方法查看环境配置
测试
关于php支持ffmpeg的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php支持ffmpeg php支持两种数组的详细内容...