Mit der avifil32.dll in deinem Systemverzeichnis geht das zumindest für AVI Dateien. Ich habe vor kurzem auch damit angefangen ein kleines Program zum skalieren von Videostream-Bildern zu machen. Es funktioniert bisher ganz gut. Nur gibts noch keine Komprimierung. Leider gottes hat man die avifil32.dll so verwurschtelt, dass ich erst 3 weitere Streams erstellen muss um letztendlich 2 von denen wieder zu löschen.
Code: Alles auswählen
Structure WAVEFORMATEX
wFormatTag.w
nChannels.w
nSamplesPerSec.l
nAvgBytesPerSec.l
nBlockAlign.w
wBitsPerSample.w
cbSize.w
EndStructure
Structure AVISTREAMINFO
fccType.l
fccHandler.l
dwFlags.l
dwCaps.l
wPriority.w
wLanguage.w
dwScale.l
dwRate.l
dwStart.l
dwLength.l
dwInitialFrames.l
dwSuggestedBufferSize.l
dwQuality.l
dwSampleSize.l
rcFrame.RECT
dwEditCount.l
dwFormatChangeCount.l
szName.c[64]
EndStructure
Structure AVIFILEINFO
dwMaxBytesPerSec.l
dwFlags.l
dwCaps.l
dwStreams.l
dwSuggestedBufferSize.l
dwWidth.l
dwHeight.l
dwScale.l
dwRate.l
dwLength.l
dwEditCount.l
szFileType.c[64]
EndStructure
Structure AVICOMPRESSOPTIONS
fccType.l
fccHandler.l
dwKeyFrameEvery.l
dwQuality.l
dwBytesPerSecond.l
dwFlags.l
*lpFormat
cbFormat.l
*lpParms
cbParms.l
dwInterleaveEvery.l
EndStructure
Macro MAKEFOURCC(ch0, ch1, ch2, ch3)
(ch0 | (ch1 << 8)) | (ch2 << 16) | (ch3 << 24)
EndMacro
Macro mmioFOURCC(ch0, ch1, ch2, ch3)
MAKEFOURCC(ch0, ch1, ch2, ch3)
EndMacro
#streamtypeVIDEO = 1935960438
#streamtypeAUDIO = 1935963489
#streamtypeMIDI = 1935960429
#streamtypeTEXT = 1937012852
#AVIIF_KEYFRAME = $10
#AVISTREAMREAD_CONVENIENT = -1
#ICMF_CHOOSE_KEYFRAME = $01
#ICMF_CHOOSE_DATARATE = $02
#ICMF_CHOOSE_PREVIEW = $04
#ICMF_CHOOSE_ALLCOMPRESSORS = $08
Import "avifil32.lib"
AVIBuildFilter(lpszFilter.p-unicode, cbFilter.l, fSaving.l) As "_AVIBuildFilterW@12"
AVIClearClipboard()
AVIFileAddRef(pfile.l)
AVIFileCreateStream(pfile.l, ppavi.l, *psi.AVISTREAMINFO) As "_AVIFileCreateStreamW@12"
AVIFileEndRecord()
AVIFileExit()
AVIFileGetStream(pfile.l, *pavi.IAVIStream, fccType.l, lParam.l)
AVIFileInfo(pfile.l, *pfi.AVIFileInfo, lSize.l) As "_AVIFileInfoW@12"
AVIFileInit()
AVIFileOpen(*ppfile.l, szFile.p-unicode, uMode.l, lpHandler.l) As "_AVIFileOpenW@16"
AVIFileReadData(pfile.l, ckid.l, lpData.l, *lpcbData.l)
AVIFileRelease(pfile.l)
AVIFileWriteData(pfile.l, ckid.l, lpData.l, cbData.l)
AVIGetFromClipboard(*lppf.l)
AVIMakeCompressedStream(ppsCompressed.l, ppsSource.l, *lpOptions.AVICOMPRESSOPTIONS, *pclsidHandler.l)
AVIMakeFileFromStreams(*ppfile.l, nStreams.l, papStreams.l)
AVIMakeStreamFromClipboard(cfFormat.l, hGlobal.l, ppstream.l)
AVIPutFileOnClipboard(pf.l)
AVISave(szFile.p-unicode, *pclsidHandler.l, lpfnCallback.l, nStreams.l, pfile.l, *lpOptions.AVICOMPRESSOPTIONS, OptionalArguments.l) As "_AVISaveW"
AVISaveOptions(hwnd.l, uiFlags.l, nStreams.l, ppavi.l, *plpOptions.AVICOMPRESSOPTIONS)
AVISaveOptionsFree(nStreams.l, *plpOptions.AVICOMPRESSOPTIONS)
AVISaveV(szFile.p-unicode, *pclsidHandler.l, lpfnCallback.l, nStreams.l, ppavi.l, *plpOptions.AVICOMPRESSOPTIONS) As "AVISaveVW@24"
AVIStreamAddRef(pavi.l)
AVIStreamBeginStreaming(pavi.l, lStart.l, lEnd.l, lRate.l)
AVIStreamCreate(ppavi.l, lParam1.l, lParam2.l, *pclsidHandler.l)
AVIStreamEndStreaming(pavi.l)
AVIStreamFindSample(pavi.l, lPos.l, lFlags.l)
AVIStreamGetFrame(pg.l, lPos.l)
AVIStreamGetFrameClose(pg.l)
AVIStreamGetFrameOpen(pavi.l, *lpbiWanted.BITMAPINFOHEADER)
AVIStreamInfo(pavi.l, *psi.AVISTREAMINFO, lSize.l) As "_AVIStreamInfoW@12"
AVIStreamLength(pavi.l)
AVIStreamOpenFromFile(ppavi.l, szFile.p-unicode, fccType.l, lParam.l, mode.l, *pclsidHandler.l) As "_AVIStreamOpenFromFileW@24"
AVIStreamRead(pavi.l, lStart.l, lSamples.l, lpBuffer.l, cbBuffer.l, *plBytes.l, *plSamples.l)
AVIStreamReadData(pavi.l, fcc.l, lp.l, *lpcb.l)
AVIStreamReadFormat(pavi.l, lPos.l, lpFormat.l, *lpcbFormat.l)
AVIStreamRelease(pavi.l)
AVIStreamSampleToTime(pavi.l, lSample.l)
AVIStreamSetFormat(pavi.l, lPos.l, lpFormat.l, cbFormat.l)
AVIStreamStart(pavi.l)
AVIStreamTimeToSample(pavi.l, lTime.l)
AVIStreamWrite(pavi.l, lStart.l, lSamples.l, lpBuffer.l, cbBuffer.l, dwFlags.l, *plSampWritten.l, *plBytesWritten.l)
AVIStreamWriteData(pavi.l, fcc.l, lp.l, cb.l)
CreateEditableStream(ppsEditable.l, psSource.l)
EditStreamClone(pavi.l, ppResult.l)
EditStreamCopy(pavi.l, *plStart.l, *plLength.l, ppResult.l)
EditStreamCut(pavi.l, *plStart.l, *plLength.l, ppResult.l)
EditStreamPaste(pavi.l, *plPos.l, *plLength.l, pstream.l, lStart.l, lEnd.l)
EditStreamSetInfo(pavi.l, *lpInfo.AVISTREAMINFO, cbInfo.l) As "_EditStreamSetInfoW@12"
EditStreamSetName(pavi.l, lpszName.p-unicode) As "_EditStreamSetNameW@8"
EndImport
Ich weiß nicht ob alle funktionieren, da PureBasic das erst ausspuckt wenn man auch alle in seinem code benutzt. Falls nicht bitte ich um Rückmeldung.