AVIにWAVをつける AVISaveV() 関数とAVISaveOptions() 関数を利用して、AVIファイルに音声を付けることができます。この方法、複数の音声ファイルをAVIに混合させることもできます。
#include <vfw.h> #pragma comment(lib, "vfw32.lib") void MixVideoAndAudio(LPCTSTR lpszPathnameAvi, LPCTSTR lpszPahtnameWav, LPCTSTR lpszPathnameMix) { PAVISTREAM pavistreamAvi; PAVISTREAM pavistreamWav; PAVISTREAM paviStreams[2]; AVIFileInit(); if (AVIStreamOpenFromFile(&pavistreamAvi, lpszPathnameAvi, streamtypeVIDEO, 0, OF_READ, NULL) != 0) { AfxMessageBox(_T("Can Open Avi-File.")); AVIFileExit(); return; } if (AVIStreamOpenFromFile(&pavistreamWav, lpszPahtnameWav, streamtypeAUDIO, 0, OF_READ, NULL) != 0) { AfxMessageBox(_T("Can Open Wav-File.")); AVIStreamRelease(pavistreamAvi); AVIFileExit(); return; } paviStreams[0] = pavistreamAvi; paviStreams[1] = pavistreamWav; AVICOMPRESSOPTIONS aviCompressoptions[2]; LPAVICOMPRESSOPTIONS lpAviCompressoptions[2]; ZeroMemory(aviCompressoptions, sizeof(aviCompressoptions)); lpAviCompressoptions[0] = &aviCompressoptions[0]; lpAviCompressoptions[1] = &aviCompressoptions[1]; if (!AVISaveOptions(NULL, 0, 2, paviStreams, lpAviCompressoptions)) { goto proc_end; } HRESULT hRes = AVISaveV(lpszPathnameMix, NULL, NULL, 2, paviStreams, lpAviCompressoptions); if (hRes != AVIERR_OK) { CString strResult; strResult.Format(_T("Can not mix Avi and Wav(errno=%08x)."), hRes); AfxMessageBox(strResult); AVISaveOptionsFree(2, lpAviCompressoptions); goto proc_end; } AVISaveOptionsFree(2, lpAviCompressoptions); proc_end: AVIStreamRelease(pavistreamAvi); AVIStreamRelease(pavistreamWav); AVIFileExit(); } void CXXXXXDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here MixVideoAndAudio(_T("d:\\video1.avi"), _T("d:\\sound.wav"), _T("d:\\video2.avi")); } |