NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 8566|回复: 5

FLV无损(不重编码)合并笔记

[复制链接]
发表于 2009-7-1 15:04 | 显示全部楼层 |阅读模式
我们通常可以使用一些工具,直接从在线视频网站下载FLV封装格式的视频文件。短一些的视频还好,有时候较长的视频会被分成多个文件存储。我们将这些分段的文件下载之后,为了方便播放,有时需要将文件合并到一起。网上也有很多此类教程和工具可以实现这点,但今天我遇到了一个比较特殊的情况。成功解决问题之后,我决定将解决过程写下来,供遇到同样问题的人参考。
这里强调一下:只有视频特性(分辨率、编码)、音频特性(采样率、编码)完全相同的视频才能够非重编码直接合并,否则必须经过重编码。
帧率(fps)不同的段落理论上是可以接合的,但因为涉及到手写mkv timecode,还需要对不同段落进行划分,很麻烦,所以没有这方面知识储备的人请谨慎尝试。
本文用到的软件是mkvmergegui、mkvextractgui和yamb。前两个用于分离flv extract无法分离的文件,并进行最后的重新封装,yamb则用语对RAW视频和音频进行合并(理论上copy命令也可以,下文会提到)。

1.我下来的是一个“FLV”封装的电影,全片118分钟,AVC视频(704*396@29.97fps)+AAC音频(41kHz、128k),被分成7段。这段视频的封装有些特别,所有的flv合并工具都没用,mencoder可以合并,但合并出来之后只有第一段视频,其余部分无法播放。或者,合并之后显示时间不正确,无法通过进度条跳转。
用mediainfo查看之后,怀疑这些视频只是mp4封装(把文件名改成flv),或者不是标准的flv封装。

2.分离
要想将文件进行无损的链接而不重新编码,首先需要将文件拆分成RAW格式的音频和视频。本例中,aac对应的RAW格式是.aac,avc对应的RAW格式是.264。
由于视频源FLV并不标准,所以flv extract不认,无法拆分。所以只好曲线救国,绕行mkv封装之后进行拆分。将flv拖进mkvmergegui,几秒钟之后mmg竟然奇迹般地识别了这段flv。不改变任何设置,直接输出mkv。然后开启mkvextractgui,对改封的mkv进行拆解,并顺利得到A_track1.h264和A_track2.aac。
顺序处理所有段落,得到A-G,7个视频文件和7个音频文件。

3.合并。
yamb的合并比较简单。只需要启动程序,在左侧列表中选择edit,之后在右侧选择join supported files选项,把要接合的文件拖进去就可以了。先接合视频、再接合音频。
接下来讲讲用copy命令来接合。VX曾经用copy命令接合了MBAFF压制的文件和非MBAFF压制的文件。这里的难度比弄MBAFF低。
copy /b a.aac+b.aac eureka.aac
copy /b a.264+b.264 eureka.264
为了简明,命令里面只写出两段视频/音频的接合。如果有需要,还可以加上更多的段落。

4.封装
RAW接合完成,但单独的RAW文件是无法播放的。RAW没有帧索引、不标记fps,所以通常不能正常播放。我们需要对RAW进行重新封装,才能顺利播放。
这里图省事只谈mkv封装,mp4封装欢迎自己探索。
把刚才接合得到的264文件和aac文件分别拖进mmg。拖入264的时候,mmg会弹出警告,让你指定fps,否则就按25fps走。这也是最重要的一个步骤。首先进入界面中部的Format specific options标签。在FPS一项中选择片源的fps(可以通过把源flv拖进mediainfo看到)。
因为fps通常是无限不循环/循环小数。只填写约数通常来说不会有什么问题,但为了精确,还是填写分数比较保险。这里提供几个常见fps的写法:
30fps/29.970fps : 30000/1001
24fps/23.97600fps : 24000/1001
15fps/14.985fps : 15000/1001
至于PAL制式的25fps,因为是整数,没有小数位,所以直接写25便好。
之后就没问题了,点Start muxing按钮就可以开始封装了。

5.善后
合并好之后,可以尝试一下能不能播放。一般来说是没问题的。
可能会出现的问题有音频/视频不同步。这个是比较难以避免的。照理说不同步的情况应该不会太严重才对。我遇到的这个片子当中,两小时的片子被分了6段,全部合并之后各部分不同步的范围大概在500ms以内,对于看片来说,应该已经是能够勉强接受的范围了。
觉得没问题之后,就可以删除之前用过的中间文件了。

有什么问题,欢迎讨论。
发表于 2009-7-1 15:30 | 显示全部楼层
如果不经过RAW,直接在MMG的APPEND功能下合并是否会发生RP事件?

然后一般的被视频网站强O过的FLV,Mediainfo显示视频编码为H.263,帧率为11.939 fps,
别的分段的帧率为11.996fps,等等各种接近12fps的帧率,那么在最后合并的时候统一用12fps来?
还是说参照Mediainfo,为每个分段写timecode?
不知道现在视频网站的东西是不是都是固定帧率,还是偶尔会出现VFR..
 楼主| 发表于 2009-7-1 18:51 | 显示全部楼层
目前视频网站的格式基本上都比较混乱,没有固定的标准,各个网站基本上都是使用自己的标准。比较流行的fps是12和15。
但是也有像泥扣那样的对视频格式要求相对宽松的网站。上传过去的文件只要符合他们的要求,就不会被服务器转码。我就见过很多素质特别棒的文件。
我遇到的,估计就是服务器段转码设置的不规范,导致flv似乎不太合乎标准,很多软件都不认。
发表于 2009-7-7 20:43 | 显示全部楼层
3# dgwxx


如果是这种情况,我一般会选择 MMG分离 视频轨和音频,然后采用MP4封装,然后用ffmpeg 转换格式,不经过编码就可以输出FLV文件。具体代码因为我是小白,背不下来。等我明天开笔记本电脑的时候贴上来
发表于 2009-7-8 08:34 | 显示全部楼层
3# dgwxx


如果是这种情况,我一般会选择 MMG分离 视频轨和音频,然后采用MP4封装,然后用ffmpeg 转换格式,不经过编码就可以输出FLV文件。具体代码因为我是小白,背不下来。等我明天开笔记本电脑的时候贴上来
xiao1 发表于 2009-7-7 20:43
FLV.BAT内容
ffmpeg -vcodec copy -acodec copy -i video-in.mp4 -f flv video-out.flv
 楼主| 发表于 2009-7-8 13:01 | 显示全部楼层
5# xiao1
谢谢您分享
相信以后会有用的。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2024-3-28 20:28 , Processed in 0.255943 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表