使用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
 
總結
以上是生活随笔為你收集整理的使用avilib库进行avi文件的读写的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Java、JSP等网上书店图书销售管理系
- 下一篇: win7设置wifi热点_如何给笔记本电
