wamp下配置ffmpeg-php 以及处理音乐视频文件方法

转载自 bigbryert
最终编辑 xiaozhe339
November 10th, 2010 wamp下配置ffmpeg-php 以及处理音乐视频文件方法PHP, by hyperblue.

 

 

最近有个项目需要在上传高音质音乐文件同时生成低音质的音乐文件,低音质用来给用户试听。找了半天都是些应用软件比如adobe audition。现在需要在网站上应用,搞半天硬是没找到一款软件的API。 偶然在sourceforge.net看见ffmpeg-php主要用于处理视频的,比如常用的视频截图,获取视频参数,转换视频格式。就下载下来根据教程安装扩展后,可以mp3文件的转换,OK!成功从320kbps ->128kbps(当然128可以根据需要设置)。

说明:如果你按下列的步骤不能成功配置或者环境不是apache,可以采取ffmpeg.exe来执行,当然这个需要一定的权限。

下面列一下安装过程和使用方法:
首先介绍下我使用的集成环境wamp。
OS: Win XP sp2
PHP: 5.2.8
Apache: 2.2.11

补充,本人在Window 2003 sp2上初次安装失败原因是VC库没有安装的原因导致phpinfo查看无ffmpeg项。
看了下系统错误日志:
Generate Activation Context 为 [path...]\php_ffmpeg.dll 失败。 参考错误消息: 参照的汇编没有安装在系统上。
Resolve Partial Assembly 为 Microsoft.VC80.CRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。
=====================================================================
请下载,Microsoft Visual C++ 2005 Redistributable Package (x86) 在重启apache,查看phpinfo是否有ffmpeg项。
下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=32BC1BEE-A3F9-4C13-9C99-220B62A191EE

ffmpeg官方使用说明:http://www.ffmpeg.org/ffmpeg-doc.html

1.下载ffmpeg-php:http://sergey89.ru/files/ffmpeg-php-win32-all.zip本站下载地址

2. 解压ffmpeg-php-win32-all.zip 后有下面几个文件:
avcodec-51.dll
avformat-51.dll
avutil-49.dll
php_ffmpeg.dll
pthreadGC2.dll

3. 将(avcodec-51.dll, avformat-51.dll, avutil-49.dll, pthreadGC2.dll)四个文件拷贝到windows\system32文件夹下面。将php_ffmpeg.dll拷贝到php文件夹的ext文件夹下(wamp:盘符:\wamp路径\bin\php\php5.2.8\ext)。

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()函数看到如下图信息配置就表明ffmpeg在php环境中配置成功了。
wamp下配置ffmpeg-php 以及处理音乐视频文件方法

6. 下面我们建立一个php的页面来测试是不是可以使用ffmpeg的一些函数功能。

PHP
 
12345678 <?php/* * Beyond-1.mp3 在当前php目录下,如果其他目录地址请填写完整。 * -i <被转换的文件路径> * -ab <比特率> 设定声音比特率 */exec('ffmpeg -i Beyond-1.mp3 -ab 128 Beyond-2.mp3');?>

运行后 在当前文件夹下生成了Beyond-2.mp3文件。查看文件属性位速成功由320kbps ->128kbps,当然文件也小了不少(10M-4M)。

7.虽然以上我的目的达到了,但我补充下ffmpeg对视频的处理功能,说不定以后要用。下面我们建立一个php的页面来测试是不是可以使用ffmpeg的一些函数功能。建立testvideo.php文件
代码如下:

PHP
 
12345678910111213141516171819202122232425262728 <?phpextension_loaded('ffmpeg');// F:\mv\1.wmv 视频文件的路径。$ffmpegInstance=new ffmpeg_movie('F:\mv\1.wmv');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();?>

8.执行后如果拿到视频的一些信息如下就表示环境配置成功了,那我们就可以开始开发我们的视频转换了。
执行结果:

getDuration: 250
getFrameCount: 6250
getFrameRate: 25
getFilename: F:\mv\1.wmv
getComment:
getTitle:
getAuthor:
getCopyright:
getArtist:
getGenre:
getTrackNumber: 0
getYear: 0
getFrameHeight: 300
getFrameWidth: 400
getPixelFormat: yuv420p
getBitRate: 311111
getVideoBitRate: 256000
getAudioBitRate: 64032
getAudioSampleRate: 48000
getVideoCodec: wmv2
getAudioCodec: wmav2
getAudioChannels: 2
hasAudio: 1

9.接下来介绍下ffmpeg视频音乐文件处理的语法参数:

ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320×240 f:\test.flv
使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如:

转换文件格式的同时抓缩微图:
ffmpeg -i “test.avi” -y -f image2 -ss 8 -t 0.001 -s 350×240 ‘test.jpg’

对已有flv抓图:
ffmpeg -i “test.flv” -y -f image2 -ss 8 -t 0.001 -s 350×240 ‘test.jpg’

-ss后跟的时间单位为秒

Ffmpeg转换命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176×144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176×144 -b 128 -r 15 test.3gp

ffmpeg参数设定解说
-bitexact 使用标准比特率
-vcodec xvid 使用xvid压缩
-s 320×240 指定分辨率
-r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)

画面部分,选其一
-b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的
-qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好
-qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31
-sameq 使用和源同样的质量

声音部分
-acodec aac 设定声音编码
-ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质的DVDrip就可以用2
-ar <采样率> 设定声音采样率,PSP只认24000
-ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上
-vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍。这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整)

例子:ffmpeg -y -i “1.avi” -title “Test” -vcodec xvid -s 368×208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 “1.***”
解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的cores子目录)。
参数:
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i “1.avi”(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
-title “Test”(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 368×208(输出的分辨率为368×208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高)
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
-muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
“1.***”(输出文件名,也可以加路径改文件名)

机器强劲的话,可以多开几个批处理文件,让它们并行处理。
=================================================================================
Ffmpeg使用语法
ffmpeg [[options][`-i' input_file]]… {[options] output_file}…

如果没有输入文件,那么视音频捕捉就会起作用。
作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。
缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。

选项
a) 通用选项
-L license
-h 帮助
-fromats 显示可用的格式,编解码的,协议的。。。
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string 设置评论
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置
-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

b) 视频选项
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size –cropleft size –cropright size
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file

c)高级视频选项
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-qscale q 使用固定的视频量化标度(VBR)
-qmin q 最小视频量化标度(VBR)
-qmax q 最大视频量化标度(VBR)
-qdiff q 量化标度间最大偏差 (VBR)
-qblur blur 视频量化标度柔化(VBR)
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
-b_qfactor factor 在p和b帧间的qp因子
-i_qfactor factor 在p和i帧间的qp因子
-b_qoffset offset 在p和b帧间的qp偏差
-i_qoffset offset 在p和i帧间的qp偏差
-rc_eq equation 设置码率控制方程 默认tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC
-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4个运动矢量 仅用于mpeg4
-part 使用数据划分 仅用于mpeg4
-bug param 绕过没有被自动监测到编码器的问题
-strict strictness 跟标准的严格性
-aic 使能高级帧内编码 h263+
-umv 使能无限运动矢量 h263+
-deinterlace 不采用交织方法
-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大
-psnr 计算压缩帧的psnr
-vstats 输出视频编码统计到vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开

D)音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码

E)音频/视频捕获选项
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置DV1394捕获
-av device 设置音频设备 比如/dev/dsp

F)高级选项
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以bits为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流。只工作于图像流,用于ffserver测试

你可能感兴趣的:(ffmpeg)