服务器端转码方法预研报告
1. 项目需求
提供一种用于视频转码的工具,此工具可以将目前主流网站中的视频文件转码成终端可以解码的格式,终端主要是手机平台。
2. 视频文件格式
2.1 文件格式
源文件格式:
主流网站的视频文件格式为FLV, F4V, MP4等,其中FLV占60%,F4V占20%,MP4占20%(共100个视频文件)。
FLV格式:早期的FlashVideo文件格式,目前支持的视频编解码器Sorenson H.263(FLV1), Screen Video, On2 VP6, AVC,音频编解码器PCM, ADPCM, MP3, Nellymoser, AAC。格式比较简单,目前主流的播放软件都能支持。视频网站主流的文件格式。
F4V格式:FlashVideo 9以上使用的文件格式,基于14496-12(MP4)的文件格式,也可以向下兼容FLV格式,目前主流视频网站上的F4V格式都是以早期的FLV方式打包的(目前看到的)。支持的视频编解码器H.264 Extend to High 4:4:4 Profile,音频编解码器MP3, AAC。
MP4格式:14496-12格式,以MP4作为文件的后缀名,主要应用于电影,电视剧等的一种常用文件格式。主流网站上的电影片段,电视连续剧等分辨率较大,文件较大的应用MP4格式的情况比较多。支持的首批音频编解码器很广泛,主流的视频编解码器H.263, MPEG2/4, AVC和主流的音频编解码器MP3, AAC, AMR等都可以很好的支持。
注:以上三种文件格式,FLV和F4V主要应用视频比较短,分辨率不是很大的情况,例如一些短片,搞笑集锦,小视频片段等,特点是分辨率、码率和帧率相对较低,质量相对不高,较多的应用于小视频短片,流媒体等的编码格式;MP4主要应用与时间较长,内容较多,分辨率相对较大的情况,例如,综艺节目,电影,电视剧等,特点是分辨率、码率和帧率相对较高,编码的质量也相对较好,较多的应用与文件的编码格式。
RM/RMVB格式:目前网络上较大尺寸电影较多采用的一种文件格式,有RealNetwork公司开发,可以支持的视频格式主要是Real自己的RV视频编解码格式,目前发展到RV40,也就是我们俗称的RMVB。目前开源的编码器几乎没有,编码和转码多采用Real公司提供的工具Producer Plus。Ffmpeg中支持对RM和RMVB的转码。
目标文件格式:
主要取决于终端平台的适应能力,例如3GP,AVI,MP4等格式都是常用的手机解码格式;当然也不排除目前一些智能手机有很强的解码能力,大多数码流不需要经过转码就可以在这样的终端上播放。
3GP格式:全名是3GPP,是MP4格式的一种简化版本,减少了储存空间和较低的频宽需
求,让手机上有限的储存空间可以使用。支持的视频编码器有H.263, MPEG4, AVC等,音频编解码器有AMR,AAC。3G2是3GPP2的简称,和3GP属同一格式应用于不同的地区和环境。3GP文件格式是手机上最常用的文件格式。
AVI格式:全名是Audio Video Interleaved,即音频视频交错格式。有Microsoft公司推出,早期广泛应用于多媒体光盘,电视,电影等各种影响信息的存储。几乎可以支持所有的视音频编解码格式,但是目前应用已经开始减少,大分辨率,大码率的文件应用已经逐渐被MKV,MOV,RMVB等格式取代。AVI格式被一些拥有较强解码能力的手机和终端支持,这些手机和终端可以支持较大分辨率、码率和帧率的视频文件。
MP4格式:同上。
MOV格式:MOV即QuickTime影片格式,它是Apple公司开发的一种音频、视频文件格式,用于存储常用数字媒体类型。支持的视频编解码器主要是MPEG1/2, MPEG4(XVID, DIVX), H.263等,音频编解码格式主要是AC3, MP3等。
注:对于手机平台而言,用的比较多的文件格式是3GP, MP4, AVI等,当然也不排除有些只能手机拥有比较强的解码能力时,可以支持更多的文件格式,例如,FLV, RM, RMVB, MKV, MOV等。
2.2 视频格式
源视频编码器格式:
H.264, Sorenson H.263(FLV1)。其中H.264占据大多数,FLV1只在FLV文件中存在,已经非常少了。
分辨率:320x240~640x480,典型分辨率:320x240, 352x288, 400x300, 448x336, 640x480等。
码率:150~500kbs,根据分辨率不同,典型码率在200~400kbs左右成线性分布。 帧率:典型帧率的是15, 20, 25fps
目标视频解码器格式:
对于3GP格式而言,最常用的编解码器是H.263和MPEG4,普通手机中的多媒体功能一般也会比较优先考虑支持MPEG4(包括H.263),目前一些比较先进的手机终端都配备了支持H.264解码器(分辨率不高),但是能直接解码RMVB的手机很少。如果是windows系统的手机会支持wmv格式。以3GP文件举例,普通手机一般的解码能力如下:
分辨率:典型分辨率如176x144, 320x240, 352x288等。
码率:典型码率范围是100~400kbs等。
帧率:典型分辨率为15, 20, 25等。
2.3 音频格式
源音频格式:AAC, MP3等。
目标音频格式:AAC,MP3, AMR等。
3. 转码工具
3.1 FFMPEG介绍
FFmpeg is a complete solution to record, convert and stream audio and video. It includes libavcodec, the leading audio/video codec library. FFmpeg is developed under Linux, but it can compiled under most operating systems, including Windows.
FFMPEG是一套完整的录制、转换和合成音频和视频的工具,它使用了目前最完善的Libavcodec视频编解码库。FFMPEG在Linux下开发,而且它可以在绝大多数系统中编译、使用,包括WINDOWS。
3.2 FFMPEG功能
FFMPEG支持的文件格式:
File formats:
D. = Demuxing supported
.E = Muxing supported
--
E 3g2 3GP2 format
E 3gp 3GP format
DE asf ASF format
DE avi AVI format
E dvd MPEG-2 PS format (DVD VOB)
DE flv FLV format
DE h261 raw H.261
DE h263 raw H.263
DE h264 raw H.264 video format
DE m4v raw MPEG-4 video format
DE matroska Matroska file format
DE mjpeg raw MJPEG video
E mov MOV format
D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG-4/Motion JPEG 2000 format E mp2 MPEG audio layer 2
DE mp3 MPEG audio layer 3
E mp4 MP4 format
DE mpeg MPEG-1 System format
E mpeg1video raw MPEG-1 video
E mpeg2video raw MPEG-2 video
D mpegvideo raw MPEG video
E psp PSP MP4 format
DE rm RealMedia format
E svcd MPEG-2 PS format (VOB)
DE swf Flash format
FFMPEG支持的音/视频编解码格式:
Codecs:
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...S.. = Supports draw_horiz_band
....D. = Supports direct rendering method 1
.....T = Supports weird frame truncation
------
DEA aac Advanced Audio Coding
D A amrnb Adaptive Multi-Rate NarrowBand
DEV D flashsv Flash Screen Video
DEVSD flv Flash Video (FLV) / Sorenson Spark / Sorenson H.263 DEVSDT h263 H.263 / H.263-1996
D V D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
DEA libopencore_amrnb OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band
D A libopencore_amrwb OpenCORE Adaptive Multi-Rate (AMR) Wide-Band EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 EV libxvid libxvidcore MPEG-4 part 2
D A mp3 MP3 (MPEG audio layer 3)
DEVSDT mpeg4 MPEG-4 part 2
DEVSD msmpeg4 MPEG-4 part 2 Microsoft variant version 3
D V D rv30 RealVideo 3.0
D V D rv40 RealVideo 4.0
D V D vp6f On2 VP6 (Flash version)
D V D vp8 On2 VP8
DEVSD wmv1 Windows Media Video 7
DEVSD wmv2 Windows Media Video 8
D V D wmv3 Windows Media Video 9
3.3 FFMPEG使用
FFMPEG命令行参数:
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Main options:
-f fmt force format
-i filename input file name
-y overwrite output files
-t duration record or transcode "duration" seconds of audio/video -fs limit_size set the limit file size in bytes
-ss time_off set the start time offset
-itsoffset time_off set the input ts offset
-timestamp time set the recording timestamp ('now' to set the current time) -dframes number set the number of data frames to record
-timelimit limit set max runtime in seconds
Video options:
-b bitrate set bitrate (in bits/s)
-vframes number set the number of video frames to record
-r rate set frame rate (Hz value, fraction or abbreviation)
-s size set frame size (WxH or abbreviation)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-vcodec codec force video codec ('copy' to copy stream)
-sameq use same video quality as source (implies VBR)
Audio options:
-ab bitrate set bitrate (in bits/s)
-aframes number set the number of audio frames to record
-aq quality set audio quality (codec-specific)
-ar rate set audio sampling rate (in Hz)
-ac channels set number of audio channels
-acodec codec force audio codec ('copy' to copy stream)
Subtitle options:
-sn disable subtitle
-scodec codec force subtitle codec ('copy' to copy stream)
-newsubtitle add a new subtitle stream to the current output stream
3.4 FFMPEG命令行使用实例:
⑴ FLV/F4V -> 3GP
ffmpeg -i test.flv -s qcif -vcodec mpeg4/h263 -acodec copy test.3gp
ffmpeg -i test.flv -s qcif -vcodec mpeg4/h263 -b 200000 -acodec libopencore_amrnb -ac 1 -ar 8000 -ab 12.2k test.3gp
ffmpeg -i test.flv -s qcif -vcodec mpeg4/h263 -sameq -r 15 -acodec libopencore_amrnb -ac 1 -ar 8000 -ab 12.2k test.3gp
⑵ FLV/F4V -> MP4
ffmpeg -i test.flv -vcodec mpeg4 -acodec libmp3lame test.mp4
ffmpeg -i test.flv -vcodec mpeg4 -acodec copy test.mp4
⑶ MP4 -> 3GP
ffmpeg -i test.mp4 -s qcif -vcodec mpeg4/h263 -acodec copy test.3gp
ffmpeg -i test.mp4 -s qcif -vcodec mpeg4/h263 -acodec aac -strict experimental test.3gp
⑷ 加水印
使用VHook为视频添加水印。具体用法请参见FFMPEG中文网站的《使用VHook为视频添加水印》
⑸ 加字幕
使用AviSynth可以为视频添加水印和字幕。具体用法请参见FFMPEG中文网站的《AviSynth入门与应用指南》
3.5 FFMPEG编译与开发
FFMPEG是在Linux平台下开发的,当然也可以在Windows这样的平台上使用和开发。 FFMPEG可以分成两个部分:libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的. libavformat 一个包含了所有的普通音视格式的解析器和产生器的库.
3.6 FFMPEG性能分析
在PC上实测的结果,PC性能为Intel(R) Core(TM) i5 CPU M5200 2.4GHz(4 CPUs)/2G/(注:实际转换过程中,只有一个CPU全负荷运行)
时间:
⑴ 640x480_H264_402kbs_20fps.mp4 -> 176x144_H263_COPY_200kbs_15fps.3gp 转换时间为28秒(5220->3915)
⑵ 640x480_H264_402kbs_20fps.mp4 -> 220x176_MPEG4_COPY_200kbs_15fps.3gp 转换时间为29秒
⑶ 640x480_H264_402kbs_20fps.mp4 -> 320x240_MPEG4_COPY_200kbs_15fps.3gp 转换时间为36秒
⑷ 448x336_H264_198kbs_15fps.mp4 -> 176x144_H263_AMR_128kbs_15fps.3gp 转换时间为29秒(6360->6360)
⑸ 448x336_H264_198kbs_15fps.mp4 -> 320x240_MPEG4_COPY_128kbs_15fps.3gp 转换时间为35秒
质量:
转码后的视频文件质量取决于几个方面:
1. 分辨率:对于用户来讲,在码率固定的情况下,分辨率低的图像相对清楚。分辨率
如果固定,则码率越高图像质量越好。
2. 码率:包含视频码率和音频码率,相对来讲码率越高则质量相对越好,但是码率与
压缩率成反比,因此需要在码率和压缩率之间找到一个中间点。
3. 编码特性:有编码器决定,一般来讲,H.264的编码效率最高,其次是MPEG4, H.263,
言外之意就是,在视频分辨率和码率一定的情况下,利用H.264作为编码工具得到的图像质量要优于后两者的质量。但是由于H.264的编码过程比MPEG4/H.263复杂很多,因此需要在质量和编码时间之间做出选择。对于手机应用而言,我们更倾向与使用MPEG4/H.263来作为目前编码器,文件格式是3GP或者MP4。
4. Flash Video
Flash Player 软件是一个跨平台浏览器插件, 是Adobe公司针对不同类型的浏览器发布的一款Flash支持补丁。严格来讲,Flash技术并不是视频编解码技术,它的文件格式是swf,这是一个完整的影片文档,由二维的动画,声音,矢量等组成。
Adobe公司提供了IE核心以及非IE核心,针对不同操作系统的Flash Player插件,
在公司网上可以下载。网址是/cn/flashplayer/。
20xx年6月,Adobe面向Windows、Mac和Linux三大桌面平台发布了Flash Player 10.1正式版,移动版Flash Player 10.1(Adobe Flash Lite)也正式发布。
除了Android平台外,Flash Player 10.1还将支持以下系统:RIM黑莓、Palm webOS、Windows Phone、LiMo、MeeGo、塞班,用户可以在线下载安装。
Adobe Flash Lite 是Adobe Flash Player的简化版,由Adobe公司发布。它主要是面向移动和便携式电子产品,使用户在嵌入式平台上像在PC上一样使用Adobe的Flash播放工具。Flash Lite可以使用在Symbian,Windows Mobile,iPhone,Android这样的嵌入式手机系统中。
第三方Flash Player工具(动画):
Swfdec: /wiki/
Gnash: /
5. 总结
FFMPEG可以满足服务器端视频转码功能的要求,主要体现在以下几个方面: 可用性:
通过试验和FFMPEG能支持的转码格式说明证明FFmpeg可以满足目前对转码格式和视音频编解码器的要求。
易用性:
FFMPEG提供了详细的安装和使用以及开发说明,利用命令行形式对文件进行转码。 专业性:
FFMPEG是专业的视音频录制,转码和合成音视频的工具,由专业团队开发,其中的编解码器大多数都是重新写的,准确高效。可以提供专业的,高效率的转码方法。几乎所有的编解码器性能,编码参数,质量等都是可调整的。
可开发性:
FFMPEG是基于Linux开发的,虽然比较复杂,也比较庞大,但是其完备的资料和清晰的架构给开发者提供过很好的再开发平台。
跨平台性:
虽然FFMPEG是基于Linux开发的,但是它也提供了其他平台(如Windows)下的可执行文件和编译方法。
总之,利用FFMPEG作为服务器端转码的工具可以满足目前对转码功能的要求。