`
samuschen
  • 浏览: 398455 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

从MPG切割,合并到转换成FLV视频过程中可能遇到的一些问题(主要用到mencoder ffmpeg flvtool2)

阅读更多

目标:将MPG或AVI等其他格式的视频源进行切割或合并 最终转换成FLV视频文件 并能够在FLVPlayer中播放 可以随意拖放 前进n秒 后退n秒
具体步骤
目前有两个非常出名的视频处理工具 都是在命令行下使用 可以做成批处理命令 相当方便
1. mencoder 著名的视频处理工具
2. ffmpeg 著名的视频处理工具

先来介绍下两个工具的特点
mencoder在网上一搜可以搜出许多的资料 可以用来转换视频 切割视频 合并视频.
ffmpeg的资料也有不少 同样用来转换视频格式 切割视频等 ,但是不能支持视频的合并 .(但我们最终还是采用了ffmpeg而非mencoder)
两者都支持大部分的视频格式.

还有一个工具: FLVtool2 是为FLV添加标签信息的工具 添加之后 FLV的信息就完整了 ,可以进行拖放等操作.

对视频源的切割和转换成FLV格式mencoder和ffmpeg都可以实现
对于视频的合并, ffmpeg不直接支持.

我们首先用mencoder切割一段视频 然后转换成FLV格式 , FLVPlayer可以播放,但出现了问题 , 点击播放器的前进1s ,结果视频前进了10s,点前进5s,视频还是前进了10s . 这一点很是纳闷 , 后来找到Flvtool2这个加flv信息的工具 对该FLV文件进行处理时 发现FLV的KeyFrames是每隔10s一帧.我们知道FLV视频的播放原理和Flash的一样 ,是通过关键帧实现的,非关键帧中没有包括完整的图像信息,播放器的跳转到某一秒的功能是通过NetStream.Seek(n)方法实现的.而seek 是找到第n秒时最近的关键帧 , 所以当我们点击前进1到10s时 , 都是前进到了10s . 这样看来mencoder转换出来的FLV是不符合要求的. 虽然能播放但不能随意调整播放进度.

于是只有转向ffmpeg这个工具 发现ffmpeg转出来的FLV,用FLVtool2添加上信息后, 每秒钟有两个关键帧 , 这样就满足了需求.

下面面临的是视频合并的问题 , 用mencoder合并的视频文件虽然在暴风影音里面可以播放 ,但实际上是损坏了视频文件的格式 , 合并的文件在ffmpeg或flvtool2中都不能被识别出来 .看来mencoder的视频合并功能也并不理想 .

现在就面临视频合并的难题 ,mencoder转换的不合格,ffmpeg又不能支持合并 . 后来查到可以通过windows下的copy命令或linux下的cat命令实现. 于是尝试了一下.
命令打开如下:
copy test1.mpg/b + test2.mpg/b test3.mpg/b
其中test1 和 test2是要合并的文件 test3.mpg是输出的视频文件 我们注意到在每个文件的后面加了个"/b" , 这个参数很重要 , 使用help copy就可以了解到对于二进制文件的拷贝需要在后面加\b . 然后在利用FLVtool2添加标记信息 发现flvtool2是能处理合并后的文件的 .

这样得到FLV文件可以在FLVPlayer中随意的拖放和精确到秒的定位.于是大功告成了.

到这里我们可以发现都是mencoder误了事情 , 用ffmpeg进行视频的切割和转换格式都满足了要求 .因此可以把mencoder给淘汰出去了, 呵呵 .

mencoder和ffmpeg的命令行参数 网上的资料多的很 我就不在这里罗列了 ,其实在命令行中看它们自带的帮助信息就可以了解个大概 ,够用了.

FLVTool2的资料用google的英文搜索也可以搜到一篇讲如何添加信息的教程 .

FLVPlayer用的是Javascript 控制 Flash FLV视频播放器 --国外开源 这篇文件介绍的播放器 功能是十分强大的 有源码可以方便自己定制 .

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics