<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    淺陋見(jiàn)解,僅供參考。拋磚引玉,多加指教!
    石正
    一個(gè)計(jì)算機(jī)技術(shù)愛(ài)好者! 雖然我擁有了系統(tǒng)分析師的證書(shū),但我仍然是一個(gè)計(jì)算機(jī)技術(shù)愛(ài)好者!
    posts - 119,comments - 73,trackbacks - 0
    為了對(duì)avi進(jìn)行讀寫(xiě),微軟提供了一套API,總共50個(gè)函數(shù),他們的用途主要有兩類(lèi),一個(gè)是avi文件的操作,一類(lèi)是數(shù)據(jù)流streams的操作。

      1、打開(kāi)和關(guān)閉文件

      AVIFileOpen ,AVIFileAddRef, AVIFileRelease

      2、從文件中讀取文件信息

      通過(guò)AVIFileInfo可以獲取avi文件的一些信息,這個(gè)函數(shù)返回一個(gè)AVIFILEINFO結(jié)構(gòu),通過(guò)AVIFileReadData可以用來(lái)獲取AVIFileInfo函數(shù)得不到的信息。這些信息也許不包含在文件的頭部,比如擁有file的公司和個(gè)人的名稱(chēng)。

      3、寫(xiě)入文件信息

      可以通過(guò)AVIFileWriteData函數(shù)來(lái)寫(xiě)入文件的一些額外信息。

      4、打開(kāi)和關(guān)閉一個(gè)流

      打開(kāi)一個(gè)數(shù)據(jù)流就跟打開(kāi)文件一樣,你可以通過(guò) AVIFileGetStream函數(shù)來(lái)打開(kāi)一個(gè)數(shù)據(jù)流,這個(gè)函數(shù)創(chuàng)建了一個(gè)流的接口,然后在該接口中保存了一個(gè)句柄。

      如果你想操作文件的某一個(gè)單獨(dú)的流,你可以采用AVIStreamOpenFromFile函數(shù),這個(gè)函數(shù)綜合了AVIFileOpen和AVIFileGetStream函數(shù)。

      如果你想操作文件中的多個(gè)數(shù)據(jù)流,你就要首先AVIFileOpen,然后AVIFileGetStream。

      可以通過(guò)AVIStreamAddRef來(lái)增加stream接口的引用。

      通過(guò)AVIStreamRelease函數(shù)來(lái)關(guān)閉數(shù)據(jù)流。這個(gè)函數(shù)用來(lái)減少streams的引用計(jì)數(shù),當(dāng)計(jì)數(shù)減少為0時(shí),刪除。

      5、從流中讀取數(shù)據(jù)和信息

      AVIStreamInfo函數(shù)可以獲取數(shù)據(jù)的一些信息,該函數(shù)返回一個(gè)AVISTREAMINFO結(jié)構(gòu),該結(jié)構(gòu)包含了數(shù)據(jù)的類(lèi)型壓縮方法,建議的buffersize,回放的rate,以及一些description。

      如果數(shù)據(jù)流還有一些其它的額外的信息,你可以通過(guò)AVIStreamReadData函數(shù)來(lái)獲取。應(yīng)用程序分配一個(gè)內(nèi)存,傳遞給這個(gè)函數(shù),然后這個(gè)函數(shù)會(huì)通過(guò)這個(gè)內(nèi)存返回?cái)?shù)據(jù)流的信息,額外的信息可能包括數(shù)據(jù)流的壓縮和解壓縮的方法,你可以通過(guò)AVIStreamDataSize宏來(lái)回去需要申請(qǐng)內(nèi)存塊的大小。

      可以通過(guò)AVIStreamReadFormat函數(shù)獲取數(shù)據(jù)流的格式信息。這個(gè)函數(shù)通過(guò)指定的內(nèi)存返回?cái)?shù)據(jù)流的格式信息,比如對(duì)于視頻流,這個(gè)buffer包含了一個(gè)BIMAPINFO結(jié)構(gòu),對(duì)于音頻流,內(nèi)存塊包含了WAVEFORMATEX或者PCMAVEFORMAT結(jié)構(gòu)。你可以通過(guò)給AVIStreamReadFormat傳遞一個(gè)空buffer就可以獲取buffer的大小。也可以通過(guò)AVIStreamFormatSize宏。

      可以通過(guò)AVIStreamRead函數(shù)來(lái)返回多媒體的數(shù)據(jù)。這個(gè)函數(shù)將數(shù)據(jù)復(fù)制到應(yīng)用程序提供的內(nèi)存中,對(duì)于視頻流,這個(gè)函數(shù)返回圖像禎,對(duì)于音頻流,這個(gè)函數(shù)返回音頻的sample數(shù)據(jù)。可以通過(guò)給AVIStreamRead傳遞一個(gè)NULL的buffer來(lái)獲取需要的buffer的大小。也可以通過(guò)AVIStreamSampleSize宏來(lái)獲取buffer的大小。

      有些AVI數(shù)據(jù)流句柄可能需要在啟動(dòng)數(shù)據(jù)流的前要做一下準(zhǔn)備工作,此時(shí),我們可以調(diào)用AVIStreamBeginStreaming函數(shù)來(lái)告知AVI數(shù)據(jù)流handle來(lái)申請(qǐng)分配它需要的一些資源。在完畢后,調(diào)用AVIStreamEndStreamming函數(shù)來(lái)釋放資源。

      6、操作壓縮的視頻數(shù)據(jù)

      如果你要演示一禎或者幾禎壓縮視頻圖像時(shí),你可以調(diào)用AVIStreamRead函數(shù),將獲取的數(shù)據(jù)傳遞給DrawDib函數(shù)來(lái)顯示圖像。這些函數(shù)可以顯示壓縮和未壓縮的圖像。

      AVIFile也提供了一個(gè)函數(shù)AVIStreamGetFrameOpen,來(lái)獲取未壓縮的視頻禎,這個(gè)函數(shù)創(chuàng)建了內(nèi)存來(lái)獲取未壓縮的數(shù)據(jù)。也可以通過(guò)AVIStreamGetFrame函數(shù)來(lái)解壓縮一個(gè)單獨(dú)的視頻禎。這個(gè)函數(shù)可以解壓縮某一禎圖像,然后將數(shù)據(jù)以一個(gè)BIMAPINFOHEADER結(jié)構(gòu)返回。當(dāng)你調(diào)用完AVIStreamGetFrame函數(shù)后,要調(diào)用AVIStreamGetFrameClose函數(shù)釋放上一個(gè)函數(shù)申請(qǐng)的資源。

      7、根據(jù)已存在的數(shù)據(jù)流創(chuàng)建文件

      創(chuàng)建一個(gè)包含多個(gè)數(shù)據(jù)流的文件的方法就是整合多個(gè)數(shù)據(jù)流,將其寫(xiě)入一個(gè)新文件。這些數(shù)據(jù)流可以是內(nèi)存中的數(shù)據(jù),也可以是存在于另一個(gè)文件中。

      我們可以用AVISave這個(gè)函數(shù)來(lái)build一個(gè)文件。這個(gè)函數(shù)可以創(chuàng)建一個(gè)文件,并且將指定的多個(gè)數(shù)據(jù)流按照指定的順序?qū)懭胛募阋部梢酝ㄟ^(guò)AVISaveV函數(shù)來(lái)創(chuàng)建一個(gè)新的文件,這個(gè)函數(shù)的功能和AVISave的功能一樣,主要區(qū)別是AVISaveV采用的數(shù)據(jù)流數(shù)組,而AVISave是單個(gè)的數(shù)據(jù)流,多次保存。

      我們可以調(diào)用AVISaveOptions函數(shù)來(lái)顯示一個(gè)對(duì)話框,可以讓用戶來(lái)選擇壓縮方式。

      我們可以在調(diào)用AVISave和AVISaveV函數(shù)時(shí)指定一個(gè)回調(diào)函數(shù),用來(lái)顯示avi文件的生成進(jìn)度,可以讓用戶隨時(shí)地取消生成avi文件。

      我們可以調(diào)用GetSaveFileNamePreview函數(shù)來(lái)顯示保存的對(duì)話框讓用戶選擇保存的文件名。

      通過(guò)AVIMakeFileFromStreams函數(shù)我們可以創(chuàng)建一個(gè)虛擬的文件句柄,其他的avi函數(shù)可以通過(guò)這個(gè)虛擬的文件句柄來(lái)操作文件中的數(shù)據(jù)流,操作完畢要記得調(diào)用AVIFileRelease釋放。

    8、向文件寫(xiě)入一個(gè)數(shù)據(jù)流

      我們可以通過(guò)AVIFileCreateStream函數(shù)來(lái)在一個(gè)新文件或者已經(jīng)存在的文件中創(chuàng)建一個(gè)數(shù)據(jù)流。這個(gè)函數(shù)根據(jù)AVISTREAMINFO結(jié)構(gòu)定義了新的數(shù)據(jù)流,并為新的數(shù)據(jù)流創(chuàng)建一個(gè)接口,返回接口的指針。

      在寫(xiě)入新的數(shù)據(jù)前,一定要指定流的格式信息,通過(guò)AVIStreamSetFormat函數(shù),當(dāng)設(shè)置一個(gè)視頻流的時(shí)候,一定要使用BIMAPINFO結(jié)構(gòu)來(lái)設(shè)置,音頻就用WAVEFORMAT。

      然后我們就可以通過(guò)AVIStreamWrite函數(shù)將我們的多媒體數(shù)據(jù)寫(xiě)入數(shù)據(jù)流了。這個(gè)函數(shù)將應(yīng)用程序提供的內(nèi)存數(shù)據(jù)復(fù)制到指定的流。缺省的avi handler將數(shù)據(jù)寫(xiě)入流的最后。

      如果你有其他額外的信息需要寫(xiě)入流,你可以調(diào)用AVIFileWriteData或者AVIStreamWriteData,最后記得在完成數(shù)據(jù)寫(xiě)入后,要調(diào)用AVIStreamRelease。

      9、數(shù)據(jù)流中的禎的位置

      尋找起始禎:

      可以通過(guò)AVIStreamStart函數(shù)來(lái)獲取第一禎包含的sample number。也可以通過(guò)AVIStreamInfo函數(shù)來(lái)獲取這個(gè)信息,這個(gè)函數(shù)的AVISTREAMINFO結(jié)構(gòu)中包含了dwStart,可以通過(guò)AVIStreamStartTime宏來(lái)獲取第一個(gè)sample。

      可以通過(guò)AVIStreamLength函數(shù)來(lái)獲取流的長(zhǎng)度。這個(gè)函數(shù)返回流中的sample的數(shù)目。也可以通過(guò)AVIStreamInfo函數(shù)來(lái)獲取這些信息,可以通過(guò)AVIStreamLengthTime宏來(lái)獲取流的長(zhǎng)度,毫秒。

      在視頻流中,一個(gè)sample對(duì)應(yīng)著一禎圖像,所以,有時(shí)這些sample中沒(méi)有視頻數(shù)據(jù),如果你調(diào)用AVIStreamRead函數(shù)來(lái)數(shù)據(jù),可能返回NULL,也可以通過(guò)AVIStreamFindSample通過(guò)指定FIND_ANY標(biāo)志來(lái)查找指定的sample。

      查找關(guān)鍵禎

      通過(guò)AVIStreamFindSample函數(shù)查找符合要尋找的sample,然后可以通過(guò)下面的宏判斷是否關(guān)鍵禎。

      在time和sample間互相切換。

      AVIStreamSampleToTime這個(gè)函數(shù)可以將smaple轉(zhuǎn)換成毫秒。對(duì)于視頻,這個(gè)值代表的是這個(gè)禎開(kāi)始播放的時(shí)間。

      在了解了上面的知識(shí)后,我們對(duì)avi的文件結(jié)構(gòu)以及如何操作avi文件心里就明白了,下面我們可以開(kāi)始我們的編程了。我們要做兩件事情:

      1、如何將一組靜態(tài)的bmp位圖合成一個(gè)avi的視頻文件;

      2、如何將一個(gè)未壓縮的avi文件解析成一幅幅位圖。

      示例程序界面如下:


      下面的函數(shù)演示了如何將一個(gè)文件夾下面的所有bmp文件都保存為一個(gè)avi文件,函數(shù)的第一個(gè)參數(shù)是要生成的AVI的文件名,第二個(gè)參數(shù)是存放bmp文件的文件夾名,這個(gè)函數(shù)會(huì)枚舉該文件夾下的所有bmp文件,合成一個(gè)AVI文件。


    void Cbmp2aviDlg::AVItoBmp(CString strAVIFileName, CString strBmpDir)
    {
     // TODO: 在此添加控件通知處理程序代碼
     AVIFileInit();
     PAVIFILE avi;
     int res=AVIFileOpen(&avi, strAVIFileName, OF_READ, NULL);
     int n = GetLastError();
     if (res!=AVIERR_OK)
     {
      //an error occures
      if (avi!=NULL)
       AVIFileRelease(avi);
      return ;
     }
     AVIFILEINFO avi_info;
     AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO));
     PAVISTREAM pStream;
     res=AVIFileGetStream(avi, &pStream, streamtypeVIDEO /*video stream*/,
       0 /*first stream*/);
     if (res!=AVIERR_OK)
     {
      if (pStream!=NULL)
       AVIStreamRelease(pStream);
       AVIFileExit();
      return ;
     }

     //do some task with the stream
     int iNumFrames;
     int iFirstFrame;
     iFirstFrame=AVIStreamStart(pStream);
     if (iFirstFrame==-1)
     {
      //Error getteing the frame inside the stream
      if (pStream!=NULL)
       AVIStreamRelease(pStream);
      AVIFileExit();
      return ;
     }
     iNumFrames=AVIStreamLength(pStream);
     if (iNumFrames==-1)
     {
      //Error getteing the number of frames inside the stream
      if (pStream!=NULL)
       AVIStreamRelease(pStream);
      AVIFileExit();
      return ;
     }

     //getting bitmap from frame
     BITMAPINFOHEADER bih;
     ZeroMemory(&bih, sizeof(BITMAPINFOHEADER));

     bih.biBitCount=24; //24 bit per pixel
     bih.biClrImportant=0;
     bih.biClrUsed = 0;
     bih.biCompression = BI_RGB;
     bih.biPlanes = 1;
     bih.biSize = 40;
     bih.biXPelsPerMeter = 0;
     bih.biYPelsPerMeter = 0;
     //calculate total size of RGBQUAD scanlines (DWORD aligned)
     bih.biSizeImage = (((bih.biWidth * 3) + 3) & 0xFFFC) * bih.biHeight ;

     PGETFRAME pFrame;
     pFrame=AVIStreamGetFrameOpen(pStream, NULL );

     AVISTREAMINFO streaminfo;
     AVIStreamInfo(pStream,&streaminfo,sizeof(AVISTREAMINFO));

     //Get the first frame
     BITMAPINFOHEADER bih2;
     long lsize = sizeof(bih2);
     int index=0;
     for (int i=iFirstFrame; i<iNumFrames; i++)
     {
      index= i-iFirstFrame;
      BYTE* pDIB = (BYTE*) AVIStreamGetFrame(pFrame, index); //
      AVIStreamReadFormat(pStream,index,&bih2,&lsize);
      BITMAPFILEHEADER stFileHdr;

      BYTE* Bits=new BYTE[bih2.biSizeImage];
      AVIStreamRead(pStream,index,1,Bits,bih2.biSizeImage,NULL,NULL);
      //RtlMoveMemory(Bits, pDIB + sizeof(BITMAPINFOHEADER), bih2.biSizeImage);

      bih2.biClrUsed =0;
      stFileHdr.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
      stFileHdr.bfSize=sizeof(BITMAPFILEHEADER);
      stFileHdr.bfType=0x4d42;

      CString FileName;
      FileName.Format("Frame-%05d.bmp", index);
      CString strtemp = strBmpDir;
      strtemp += "\\";
      strtemp += FileName;
      FILE* fp=_tfopen(strtemp ,_T("wb"));
      fwrite(&stFileHdr,1,sizeof(BITMAPFILEHEADER),fp);
      fwrite(&bih2,1,sizeof(BITMAPINFOHEADER),fp);
      int ff = fwrite(Bits,1,bih2.biSizeImage,fp);
      int e = GetLastError();
      fclose(fp);
      /////
      delete Bits;
      //CreateFromPackedDIBPointer(pDIB, index);
     }

     AVIStreamGetFrameClose(pFrame);

     //close the stream after finishing the task
     if (pStream!=NULL)
      AVIStreamRelease(pStream);
     AVIFileExit();
    }

      下面的這個(gè)函數(shù)演示了如何將AVI文件中的每一楨圖像單獨(dú)取出來(lái),保存為bmp文件。函數(shù)的頭一個(gè)參數(shù)是avi文件名,第二個(gè)參數(shù)是存放bmp文件的文件夾。

    //生成avi
    void Cbmp2aviDlg::BMPtoAVI(CString szAVIName, CString strBmpDir)
    {
     CFileFind finder;
     strBmpDir += _T("\\*.*");
     AVIFileInit();
     AVISTREAMINFO strhdr;
     PAVIFILE pfile;
     PAVISTREAM ps;
     int nFrames =0;
     HRESULT hr;

     BOOL bFind = finder.FindFile(strBmpDir);
     while(bFind)
     {
      bFind = finder.FindNextFile();
      if(!finder.IsDots() && !finder.IsDirectory())
      {
       CString str = finder.GetFilePath();
       FILE *fp = fopen(str,"rb");
       BITMAPFILEHEADER bmpFileHdr;
       BITMAPINFOHEADER bmpInfoHdr;
       fseek( fp,0,SEEK_SET);
       fread(&bmpFileHdr,sizeof(BITMAPFILEHEADER),1, fp);
       fread(&bmpInfoHdr,sizeof(BITMAPINFOHEADER),1, fp);

       BYTE *tmp_buf = NULL;
       if(nFrames ==0 )
       {
        AVIFileOpen(&pfile,szAviName,OF_WRITE | OF_CREATE,NULL);
        _fmemset(&strhdr, 0, sizeof(strhdr));
        strhdr.fccType = streamtypeVIDEO;// stream type
        strhdr.fccHandler = 0;
        strhdr.dwScale = 1;
        strhdr.dwRate = 15; // 15 fps
        strhdr.dwSuggestedBufferSize = bmpInfoHdr.biSizeImage ;
        SetRect(&strhdr.rcFrame, 0, 0, bmpInfoHdr.biWidth, bmpInfoHdr.biHeight);

        // And create the stream;
        hr = AVIFileCreateStream(pfile,&ps,&strhdr);
        // hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
       }
       tmp_buf = new BYTE[bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3];
       fread(tmp_buf, 1, bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3, fp);
       hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
       hr = AVIStreamWrite(ps, // stream pointer
          nFrames , // time of this frame
          1, // number to write
          (LPBYTE) tmp_buf,
          bmpInfoHdr.biSizeImage , // size of this frame
          AVIIF_KEYFRAME, // flags....
          NULL,
          NULL);

       nFrames ++;
       fclose(fp);
      }
     }

     AVIStreamClose(ps);

     if(pfile != NULL)
      AVIFileRelease(pfile);
     AVIFileExit();
    }

      結(jié)束語(yǔ):

      以上代碼在 vc 6.0 和windows xp平臺(tái)調(diào)試通過(guò)。這兩個(gè)函數(shù)你可以直接在你的程序中使用,更詳細(xì)的代碼可以參見(jiàn)隨著本文附上的示例源碼。這里我要指出的是,這個(gè)AVI文件和bmp互相轉(zhuǎn)換過(guò)程中,avi中的視頻數(shù)據(jù)都是存放的是沒(méi)有壓縮的數(shù)據(jù),如果你要分解AVI文件是經(jīng)過(guò)壓縮編碼,比如,DVSD,MPEG4編碼,首先你要采用相應(yīng)的解碼器對(duì)視頻數(shù)據(jù)解碼,然后將解碼過(guò)的數(shù)據(jù)保存為bmp文件。好了,關(guān)于avi文件的介紹就到這里結(jié)束了。

    posted on 2007-10-24 10:30 石正 閱讀(7539) 評(píng)論(16)  編輯  收藏

    FeedBack:
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2007-11-05 17:04 | 劃過(guò)天空
    我用你的代碼寫(xiě)了,怎么生成的圖片都是空白的阿  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2007-11-27 20:00 | mosina
    不錯(cuò),學(xué)習(xí)中。多謝  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2008-01-02 15:59 | VC學(xué)習(xí)者
    怎樣用API寫(xiě)這個(gè)程序呢?謝謝  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2008-01-05 15:51 | mafei
    我用你的代碼寫(xiě)了,怎么生成的圖片都是空白的阿
    能否將源程序給出啊,
    謝謝
    email: mafei0603@163.com

    謝謝
      回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2009-08-14 12:46 | 工學(xué)
    兩個(gè)函數(shù)的說(shuō)明顛倒了,不知道誰(shuí)轉(zhuǎn)誰(shuí)的,一錯(cuò)皆錯(cuò),呼  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2009-12-04 16:57 | 韓增義
    能不能也給我一份你的源碼呢?  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2009-12-04 16:58 | 韓增義
    我的郵箱是hanzengyi000@163.com  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2010-09-17 15:00 | dfdf
    怎么現(xiàn)在沒(méi)有下載鏈接了???  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作 [未登錄](méi)
    2010-12-09 22:55 |
    931318912@qq.com我的郵箱,謝謝  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2011-07-12 23:36 | 阿斯達(dá)
    yzwkin@163.com 代碼可以給我嗎?謝謝  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2011-07-12 23:36 | 阿斯達(dá)
    阿大蘇打撒旦撒旦撒旦撒旦撒打算的  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2012-04-01 17:57 | Jia
    非常好的文章,謝謝,辛苦了!  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作 [未登錄](méi)
    2012-05-09 00:34 | su
    有源代碼嗎??qq:603552120  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2014-04-24 16:39 | 學(xué)習(xí)
    FindFile 與合并 應(yīng)該放在2個(gè)函數(shù)里   回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2015-11-24 18:53 | wodeball
    純屬誤導(dǎo)呀。。。。。不夠完整  回復(fù)  更多評(píng)論
      
    # re: vc++實(shí)現(xiàn)avi文件的操作
    2015-11-24 20:51 | wodeball
    hr = AVIStreamWrite(ps, // stream pointer
          nFrames , // time of this frame
          1, // number to write
          (LPBYTE) tmp_buf,
    //改為 bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3
          //bmpInfoHdr.biSizeImage , // size of this frame
          AVIIF_KEYFRAME, // flags....
          NULL,
          NULL);
    查了原因,因?yàn)橛行┑膱D那個(gè)大小為0,所以做成的AVI都是空的。  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    淺陋見(jiàn)解,僅供參考。拋磚引玉,多加指教!
    主站蜘蛛池模板: 亚洲日本va在线观看| 希望影院高清免费观看视频| 午夜在线a亚洲v天堂网2019| 久久精品亚洲视频| 亚洲无线一二三四区手机| 午夜成人免费视频| 69xx免费观看视频| 久久青草免费91线频观看站街| 免费人成网站永久| 色婷婷六月亚洲综合香蕉| 亚洲人成网站日本片| 亚洲日本va午夜中文字幕一区| 国产亚洲精品拍拍拍拍拍| 国产jizzjizz视频全部免费| 成人免费视频一区二区三区| 99xxoo视频在线永久免费观看| 中文字幕在线免费播放| sss日本免费完整版在线观看| 国产成人+综合亚洲+天堂| 亚洲欧美国产国产一区二区三区| 亚洲精品视频在线播放| 亚洲国产成人久久综合碰碰动漫3d | 亚洲免费在线播放| 花蝴蝶免费视频在线观看高清版| 九一在线完整视频免费观看| 国产99久久亚洲综合精品| 亚洲AV噜噜一区二区三区| 亚洲av无码成人精品国产 | 免费一本色道久久一区| 久久久久久精品免费看SSS| 免费国产污网站在线观看15| 免费网站看av片| 鲁大师在线影院免费观看| 99久久国产免费-99久久国产免费| 日本免费在线观看| 在线免费中文字幕| 成年人视频免费在线观看| 日韩精品免费一级视频| 在线视频观看免费视频18| 最近的免费中文字幕视频| 久久不见久久见中文字幕免费|