使用avilib库进行avi文件的读写

使用avilib库进行avi文件的读写


#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <windows.h>
#else
typedef long DWORD;
#endif
#include "avilib.h"
/*
avi转avi
by notsobad 
使用avilib进行avi文件的读写 
这个例子是用来将一个avi写入另一个avi
just a simple test 
*/



int main(int argc, const char **argv)
{
char * vidbuf = malloc(327680);
char * audbuf = malloc(100000);
long framesize;
    avi_t *avifile;
    avi_t* pAviHandle;
    int frame;
    int frames;
    int framew = 0;
    int frameh = 0;
    double framerate = 0.0f;


    pAviHandle = AVI_open_output_file("test.avi");    
    if(!pAviHandle)
    {         
            printf("avi file open failed /n"); 
            return -1; 
    }
    avifile = AVI_open_input_file("../vp31.avi", 1); //打开源文件 
    frames = AVI_video_frames(avifile);
    framew = AVI_video_width(avifile);
    frameh = AVI_video_height(avifile);
    framerate = AVI_frame_rate(avifile);    

      AVI_set_video(pAviHandle,framew,frameh,framerate,AVI_video_compressor(avifile));//设置video文件头 
      AVI_set_audio(pAviHandle, AVI_audio_channels(avifile), 
                                AVI_audio_rate(avifile), 
                                AVI_audio_bits(avifile),
                                AVI_audio_format(avifile),
                                AVI_audio_mp3rate(avifile));
       //设置audio文件头                         
    //framesize=(long)framew*frameh*3/2;
      if (AVI_seek_start( avifile )) //寻找文件开始 
      {
             printf("bad seek start/n");             
             return -2; 
      }
     for (frame = 0; frame < frames;frame++)//read and write avi per fream 
     {
        int iskeyframe;//if it's keyframe
        AVI_set_video_position(avifile, frame);//将avi文件移动到第fream帧 
        long audio_bytes=AVI_audio_size(avifile,frame);//get audo size 
        
        AVI_read_frame(avifile,(char *)vidbuf,&iskeyframe);//read fream set video into vidbuf 
        AVI_read_audio(avifile, (char *)audbuf,audio_bytes);//set audio into audbuf
        /*
        long AVI_audio_size(avi_t *AVI, long frame)
        int AVI_write_audio(avi_t *AVI, char *data, long bytes)
        long AVI_read_audio(avi_t *AVI, char *audbuf, long bytes)
        */
       AVI_write_frame(pAviHandle,vidbuf,AVI_frame_size(avifile, frame),iskeyframe);//write video fream by fream
       AVI_write_audio(pAviHandle,audbuf,audio_bytes);//write audio fream by fream

      } 
      AVI_close(pAviHandle);    
      AVI_close(avifile);    
    return 1; 
}


avilib库下载:http://download.csdn.net/detail/u011403718/9670611


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值