下面的代码提取AVI中的视频,并另存一个AVI,可代码有问题(解决后,立即结贴)

jmcooler 2005-11-18 10:34:20
如果源AVI文件只有视频,则提取没问题,但源文件要是有视频和音频,那提取出来的视频播放不了,并且视频的码率参数和源文件不同。
long lStreamSize;

PAVIFILE pSrcFile = NULL;
PAVISTREAM pSrcStream = NULL;

AVISTREAMINFO SrcStreamInfo;
BITMAPINFOHEADER* pSrcBmpInfo = NULL;

PAVIFILE pDstFile = NULL;
PAVISTREAM pDstStream = NULL;

HRESULT hr = AVIFileOpen( &pSrcFile, "C:\\Downloads\\mg11.avi", OF_SHARE_DENY_WRITE|OF_READ, 0L );
hr = AVIFileGetStream( pSrcFile, &pSrcStream, streamtypeVIDEO, 0 );
if( hr != 0 )
return;

hr = AVIStreamInfo( pSrcStream, &SrcStreamInfo, sizeof(AVISTREAMINFO) );
if( SrcStreamInfo.fccType == streamtypeVIDEO )
{
hr = AVIStreamFormatSize( pSrcStream, 0, &lStreamSize );
pSrcBmpInfo = (BITMAPINFOHEADER*)new char[lStreamSize];
hr = AVIStreamReadFormat( pSrcStream, 0, pSrcBmpInfo, &lStreamSize );
}

//创建新的AVI文件
hr = AVIFileOpen( &pDstFile, "C:\\Downloads\\hld_1.avi", OF_WRITE|OF_CREATE, NULL );
hr = AVIFileCreateStream( pDstFile, &pDstStream, &SrcStreamInfo );
hr = AVIStreamSetFormat( pDstStream, 0, pSrcBmpInfo, lStreamSize );

long lReadBytes, lReadFrames, i;
char* pStreamBuf = new char[pSrcBmpInfo->biSizeImage];

for( i = AVIStreamStart(pSrcStream); i < AVIStreamEnd(pSrcStream); i++ )
{
DWORD dwKey = 0;
if( AVIStreamIsKeyFrame( pSrcStream, i ) )
dwKey = AVIIF_KEYFRAME;
hr = AVIStreamRead( pSrcStream, i, 1, pStreamBuf, pSrcBmpInfo->biSizeImage,
&lReadBytes, &lReadFrames );
hr = AVIStreamWrite( pDstStream, i, lReadFrames, pStreamBuf,
lReadBytes, dwKey, &lReadFrames, &lReadBytes );
}

AVIStreamRelease( pDstStream );
AVIFileRelease( pDstFile );

AVIStreamRelease( pSrcStream );
AVIFileRelease( pSrcFile );
delete [] pStreamBuf;
...全文
355 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkx2321 2006-06-22
  • 打赏
  • 举报
回复
要像根据自己的需要随心所欲的实现,首先想到的就应该是自己实现。

不麻烦如何能体现价值?

没有技术含量东西能值钱吗?
jmcooler 2005-11-21
  • 打赏
  • 举报
回复
这样好麻烦啊,还得自己解析读出的数据块
另外,我想在写AVI文件的时候,为每个采样/帧加上时戳,我想在每个采样数据的最后追加四个字节的“时间戳值”,一并写入流。以后当读出一个采样/帧后,我会从采样数据的末尾四个字节取出时戳,不知这样行不行。我还想当然地认为,这并不影响使用Window Media Player等播放器的播放,因为AVI文件中压缩采样/帧的解码,数据长度根本不重要,解码函数中根本就没有数据长度的参数,它会自己知道数据的字节数。因此系统解码器,自然会不理会我加的四个字节的时戳。
我想加时戳,出于这样的目的,当视频帧丢失,而音频没丢,或者当音频帧丢失,而视频没丢时,AVI标准格式无法表达这种情况,最后将导致视音频播放不同步的情况。AVI标准格式是假定视频音频本身没有任何丢失,因此它依顺序流写入,播放时,它计算每个帧相对的播放时间点,来处理解码播放。
不知道可行否,现在来不及做测试。
zkx2321 2005-11-19
  • 打赏
  • 举报
回复
根据RIFF文件格式直接读数据块。
jmcooler 2005-11-18
  • 打赏
  • 举报
回复
问zkx2321() ,你的解决方法是什么,能告诉我吗?
QQ号:41997220
zkx2321 2005-11-18
  • 打赏
  • 举报
回复
关于这个问题,我俩的解决方法根本不同,我对你的方法不熟悉,帮不了你。
借助 Movavi Video Converter 视频转换器,您可以准备多媒体文件,以便在任何设备上、以任何格式即时回放。 无需精通此操作: 只需从内容广泛的受支持选项列表选择所需的格式或设备,然后按一下按钮 – 您的文件就将在几秒钟后准备就绪。 此外,您还能获得各种令人激动的额外功能: 增强视频质量、调整和规范音量、在合并前修剪、合并、裁剪和旋转文件 – 所有操作都通过我们标志性且易于掌控的用户友好界面执行! Movavi 视频转换器 Movavi Video Converter 文特别版Movavi 视频转换器 Movavi Video Converter 文特别版 支持 AVI、MP4、FLV、MPEG-1,2、MOV、MKV、WMV、VOB、3GP、SWF、MP3、AAC、WAV 等格式 保存用于 iPad、iPhone、Android 设备、Samsung Galaxy、Xbox、Sony PlayStation、Google Nexus 包括基本编辑功能: 修剪、裁剪、旋转、防抖动、增强图像 第 1 步。 添加您的媒体文件,使用任何格式的视频、音频和图像 添加视频 打开任何格式和分辨率 (包括超高清) 的视频文件。 查看输入视频格式 MP4, QT, AVI, MPEG, MKV, FLV, SWF, DivX, MOV, MTS, WMV, 3GP, WebM, 等等 添加音频 单击一下,处理整个音乐库。 查看输入音频格式 MP3, APE, WAV, FLAC, WMA, M4A, M4B, OGG, AAC, AIFF, ALAC, PCM, 等等 添加 DVD 将您的 DVD 集合传输至硬盘 – 翻录 DVD 并将其另存视频文件。 添加图像 在最受欢迎的格式之间转换图像。 查看输入图像格式 JPEG, JPG, PNG, TIFF, GIF, BMP, TGA, 等等 第 2 步。 选择输出格式或设备,确保您尽可能获得最佳质量的结果 任何格式 选择您需要的准确格式: 该程序支持所有最新视频、音频和图像格式以及编解码器。 查看输出格式和编解码器 MP4, AVI, MPG, VOB, MKV, FLV, SWF, MOV, M2TS, WMV, 3GP, 3G2, WebM, OGV MP3, WAV, FLAC, WMA, M4A, OGG, AAC JPEG, JPG, PNG, TIFF, GIF, BMP …等等 任何设备 使用我们方便的现成预设,只需单击一下即可为 200 多种移动设备转换媒体文件。 查看受支持设备列表 iPad, iPhone, iPod, PlayStation, Xbox, Samsung, HTC, LG, Google Nexus, BlackBerry, Nokia, Sony, Lenovo, Motorola, Amazon Kindle, 等等 任何网站 准备视频,以便快速、轻松、自动地上传至视频托管站点和社交网络。 第 3 步。 根据需要编辑您的视频,在转换前完善您的视频 剪切和联接,防抖动并增强质量,剪切和旋转,添加字幕和水印 第 4 步。 快速转换文件,节约时间,这得益于尖端的技术 相较于使用传统转换方法,使用我们创新的 SuperSpeed 模式可以将视频转换速度提升高达 79 倍。 无需再压缩,质量不受损。 支持 NVIDIA CUDA、NVENC 和 Intel HD Graphics 硬件加速,最多可将压缩速度提高 6.2 倍。 将您的多核处理器发挥到极致! 该软件会估计您的 CPU 使用情况,并以最高效的方式加载处理器核心,可同时处理 2 个或 4 个 H.264 文件。 Movavi 转换器是市面上最快的视频转换器,查看我们的测试结果,然后亲身实测。将 AVI 文件 (H.264、720x480px、30 分钟、543 MB) 转换为 iPhone 5 预设 (MP4 格式) 。 Xilisoft Video Converter Ultimate 7 6 分 50 秒 慢 31.5 倍 Freemake Video Converter 4 3 分 22 秒 慢 15.5 倍 Movavi Video Converter 0 分 13 秒 Wondershare Video Converter Ultimate 8 3 分 9 秒 慢 14.5 倍 AVS Video Converter 9 18 分 15 秒 慢 84.2 倍 其他功能 提取音频 从视频提取音频,并保存电影声音轨的任一部分以创建示例铃声和音乐。 调整声音 设置声音参数 – 调低或调高音量,消除噪音,单击一下修复“静音”视频。 创建 GIF

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧