Qt5.3里使用X264库将y4m文件进行压缩

    前段时间在Visual Studio里做过一次类似的Demo。现在尝试在Qt下使用X264对视频文件进行压缩。

    首先编译X264库,在网上搜索后,发现X264库在Windows下的编译,针对VS和Qt很大部分是相同的。VS里用到的lib文件,是在能用于Qt的那些库文件基础上再继续编译生成的。所以,我此处就跳过编译的步骤了,使用上次在VS里使用的库文件。这些用到的文件列表如下:

    


    其中benchmark.y4m是我们用以进行压缩的源视频文件。

    将以上文件拷贝黏贴到当前工程目录下,并将3个头文件包含到工程中的头文件夹下。在pro文件里进行如下设置:



    main.cpp


#include <iostream>
#include <string>
#include "stdint.h"

extern "C"
{
#include "x264.h"
#include "x264_config.h"
#include "y4m.h"
}

#include <QDebug>

int main()
{
    int iResult=0;
    x264_t *pX264Handle=NULL;
    x264_param_t *pX264Param=new x264_param_t;
//    _assert(pX264Param);

    x264_param_default_preset(pX264Param,
                              "veryfast",
                              "zerolatency");
    pX264Param->i_threads=X264_SYNC_LOOKAHEAD_AUTO;
    pX264Param->i_width=352;
    pX264Param->i_height=288;
    pX264Param->i_frame_total=0;
    pX264Param->i_keyint_max=10;

    pX264Param->i_bframe=5;
    pX264Param->b_open_gop=0;
    pX264Param->i_bframe_pyramid=0;
    pX264Param->i_bframe_adaptive=X264_B_ADAPT_TRELLIS;

    pX264Param->i_log_level=X264_LOG_DEBUG;

    pX264Param->rc.i_bitrate=1024*10;
    pX264Param->i_fps_den=1;
    pX264Param->i_fps_num=10;
    pX264Param->i_timebase_den=pX264Param->i_fps_num;
    pX264Param->i_timebase_num=pX264Param->i_fps_den;

    x264_param_apply_profile(pX264Param,x264_profile_names[0]);

    int iNal=0;
    x264_nal_t *pNals=NULL;
    x264_picture_t *pPicIn=new x264_picture_t;
    x264_picture_t *pPicOut=new x264_picture_t;
    x264_picture_init(pPicOut);
    x264_picture_alloc(pPicIn,
                       X264_CSP_I420,
                       pX264Param->i_width,
                       pX264Param->i_height);
    pPicIn->img.i_csp=X264_CSP_I420;
    pPicIn->img.i_plane=3;

    pX264Handle=x264_encoder_open(pX264Param);
//    _ASSERT(pX264Handle);

    FILE *pFile=fopen("test.264","wb");
//    _ASSERT(pFile);

    y4m_input_t *y4m_hnd=(y4m_input_t*)malloc(sizeof(y4m_input_t));
    iResult=open_file_y4m("D:/Work/Test/build-TestX264_Qt-Desktop_Qt_5_3_0_MinGW_32bit-Debug/debug/benchmark.y4m",
                          (hnd_t**)&y4m_hnd,
                          pX264Param);
    if(iResult<0)
    {
        qDebug()<<"Failed to open file!";
        return 0;
    }

    int nFrames=::get_frame_total_y4m((hnd_t*)y4m_hnd);
    for(int i=0;i<nFrames;i++)
    {
        read_frame_y4m(pPicIn,(hnd_t*)y4m_hnd,i);
        if(i==0)
            pPicIn->i_pts=i;
        else
            pPicIn->i_pts=i-1;

        int frame_size=x264_encoder_encode(pX264Handle,
                                           &pNals,
                                           &iNal,
                                           pPicIn,
                                           pPicOut);
        if(frame_size>0)
        {
            for(int i=0;i<iNal;++i)
            {
                fwrite(pNals[i].p_payload,
                       1,
                       pNals[i].i_payload,
                       pFile);
            }
        }
    }

    x264_picture_clean(pPicIn);
    x264_encoder_close(pX264Handle);
    pX264Handle=NULL;
    delete pPicIn;
    pPicIn=NULL;
    delete pPicOut;
    pPicOut=NULL;
    delete pX264Param;
    pX264Param=NULL;

    return 0;
}

    编译、运行,debug窗口会出现很多编译过程中产生的信息,如下图:



    最后到编译路径的根目录下,可以发现test.264文件,大小是840K,源视频文件是44M,压缩效率是很理想的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将多个.h和.cpp文件制作成一个动态也称为共享),您可以按照以下步骤进行操作: 1. 创建一个新的Qt项目,作为您的动态项目。 2. 将所有的.h和.cpp文件添加到该项目中。您可以使用Qt Creator的“添加现有文件”选项,或者手动将文件复制到项目目录中。 3. 在.pro文件中,将目标类型设置为动态。打开项目所在目录下的.pro文件,找到`TEMPLATE`行,并将其值更改为`lib`,例如:`TEMPLATE = lib`。这将告诉Qt编译器创建一个动态。 4. 编译并构建您的项目。在Qt Creator中,您可以点击“构建”按钮或使用Ctrl + B快捷键来编译和构建项目。 5. 在构建完成后,Qt会生成一个动态文件(.dll文件或.so文件,具体取决于您的操作系统)。您可以在构建目录中找到该文件。 6. 使用动态。要在其他项目中使用该动态,您需要将其包含路径添加到其他项目的.pro文件中,并链接该。打开其他项目的.pro文件,并在其中添加以下行: ``` INCLUDEPATH += path/to/your/library LIBS += -Lpath/to/your/library -lYourLibraryName ``` 请确保将 `path/to/your/library` 替换为动态所在的实际路径,并将 `YourLibraryName` 替换为您的动态的名称(不包括文件扩展名)。这将告诉编译器在构建其他项目时在正确的位置查找和链接动态。 通过按照上述步骤创建和使用动态,您可以将多个.h和.cpp文件打包成一个可重用的,供其他项目使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值