X264的编译与使用

X264的编译

        X264的编译很久都没弄好(2013.1),现在专门写一篇学习X264的编译。

x264的编译步骤如下:

1 搭建mingw+msys环境,详见:http://blog.csdn.net/evsqiezi/article/details/8958308。

2 下载X264,地址为:http://www.videolan.org/developers/x264.html,并解压。

3 打开mysys,进入x264目录,执行

 ./configure --enable-shared  --prefix=/local/264 
make
make install
        可以在/local/264下找到生成的文件。
测试X264.exe
x264 [--参数名 参数值 ...] --output 输出文件 输入文件
  其中方括号里是可输入可不输入的,“...”是可以输很多个的意思。观察这个形式,每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”并指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。
  此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。
测试编码的例子: x264.exe --crf 24 --input-res 352x288 -o "1.264" "stefan_cif.yuv"
解释如下:
--crf:一种根据片子质量自动分配码率的vbr码率控制方式。一遍编码,如果对码率没要求请尽量使用crf模式。可用的值从1到51,越小编码质量越好,码率越高。一般使用16到24,可以为浮点。crf并不是恒定质量的方式,同一片子同一crf值,其他参数不同可能码率和质量能差比较大,不同的片子之间就更没有可比性了。
--input-res:输入文件的分辨率,格式为宽x高。
-o:输出文件,x264可以输出没有封装的H.264视频流,扩展名是.264;matroska视频,扩展名是.mkv;flash视频,扩展名是.flv;mp4视频,扩展名是.mp4。mkv、mp4和flv可以是vfr的。x264通过输出文件的扩展名判断输出文件类型。
x264支持输入的文件类型有raw yuv、y4m、avs和任何可以由ffms或lavf打开的文件。raw yuv会用在64位的x264里。有ffms/lavf打开的片子会自动正确的处理vfr问题。avs和ffms/lavf输入不需要指定片子的分辨率。
 
问题:
没有生成x264.lib
解决方法如下:

        X264更新的比较快,每天都有更新,但算法模块,基本结构是没有多大变化的。x264都是用C语言写的包括C99,但C99语法是在VC中是没法用的(当然有精力可以全部改成C89),生成的.a库是也是没法调用的,如何转化成可用.lib库就比较重要了。

下载工具poxports,版本号0.43(下载地址为: http://download.csdn.net/detail/evsqiezi/7014011)。解压后,得到pexports-0.43\bin\pexports.exe。将pexports.exe复制到C:\Program Files\Microsoft Visual Studio 5\VC\bin目录下(我这里安装的是VS2005,其他找对应版本的bin路径)。打开VS2005命令行工具。输入pexports,发现可用了。命令行进入libx264-142.dll所在的目录。使用如下目录。
pexports libx264-142.dll > libx264-142.def
lib /machine:ix86 /def:libx264-142.def
第一行命令,生成libx264-142.def
第二行命令,生成libx264-142.exp 和 libx264-142.lib
建立一个工程,将头文件,库文件加载到工程,测试代码如下:
#include <iostream>
#include <string>
#include "stdint.h"  //如果没有,下载地址为: http://download.csdn.net/detail/evsqiezi/7014021
extern "C"
{
#include "x264.h"
#include "x264_config.h"
};
using namespace std;
int main()
{
x264_param_t param;
x264_param_default(&param);
return 0;
}
编译通过,说明可用。

你可能感兴趣的:(X264的编译与使用)