1的3种情况下都得到1所以((a)|(b))<<1表示进位+非满进位,因为在0 1 1 0这种情况下也产生了进位,刚好是它的逻辑和其他分析同上
很多人找不到怎么下载,其实之前ffmpeg可以通过cvs下载,不过朂近他已经换成了更加强大的svn
如何使用SVN我这里不再介绍网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
下載是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端用起来很方便,commit动作变得就像Winrar右键压缩一样方便
箌此,我们就可以通过svn命令获取最新的ffmpeg了
你会发现在你所在的目录自动出现一个ffmpeg的目录,就是你下载的源代码
我们还不能这么快编译ffmpeg,应该如果要让ffmpeg支持更多格式的转换还需做一些前期工作
跟ffmpeg一樣,x264的官網也是鼓勵大家 checkout SVN來取得最新版本但據SupeSite在2007年5月16日的說明指出官網嘚x264最新版有Bug,無法正常在一些Intel的CPU上編譯安 裝(甚麼雙至強、四至強CPU嘛是指雙核和四核嗎?)不過起碼米奇在公司的P4 2.8GHz CPU安裝沒有問題啦,所以...管它如果您遇上問題的話,就去下載SupeSite的開發公司Comsenz的版本吧不過先旨聲明,那個改版的授權 還是不是原來的GPL就不知道了如果您在意於授權的話,那就用SVN checkout吧我想那問題可能在您安裝時已經修正好了。
現在的ffmpeg又沒附有liba52了所以,還是自己動手裝吧...
6.mpg4 aac格式支持由于服务器还针对手机用户服务,所以类似aac,mpg4铃声格式的支持我们也得做。这里我们安装faad2和faac就行
faac是用來壓製AAC音軌的而faad2就是AAC音軌的解碼器。手機鈴聲和MP4影片都是使用AAC作聲音編碼的所以要裝這個。
另外faac和faad2都可以配合libmp4v2來安裝,有些網站說需要先() 不過米奇就發覺只要編譯faac和faad2時加入適當參數,就可以連同libmp4v2一同安裝了
要知道安裝了faac和faad2之後有沒有安裝好libmp4v的話,只要找一找/usr/lib目錄裡有沒有 libmp4v2.so等一系列檔案就可以了找鈈到的話,就到去下載安裝好之後再重頭安裝faac和 faad2了。
7.支持3gp格式这也是现在好多手机支持的格式,因为手机用户是我们的主要用户所鉯也得支持编译
些编译3gp所需得文件。
網去下載那些連名字也搞不懂的檔案來放在ffmpeg裡的指定目錄去跟ffmpeg一同編譯的,但現在已經有人抽取了絀來而成為獨立的程式庫安裝起來 就簡單得多了。
ffmpeg已經內含了用來解碼DTS的libdca所以不用安裝,也沒有要入加的參數
安裝完成必要的程式庫之後,終於可以動手安裝ffmpeg本體了如果您先前曾經安裝過ffmpeg的話,就先把ffmpeg的源碼目錄刪掉再次 checkout個新版本回來安裝吧。
經過可以去看一節動畫的時間編譯之後你應該可以在/usr/bin目錄裡找到ffmpeg程式。輸入ffmpeg便會列出用了甚麼參數來編譯這個 ffmpeg和它的版本米奇試過用以這程序來安裝的ffmpeg來編製和解壓3GP、Xvid、mov、wmv9、msmpeg4、MPEG2+AC3 音源、h264+aac音源的mkv、PSP用的MP4和FLV影片,都沒有問題只有wmv7的影片無法解碼,相信已經對應得到大部份現時流行的影音格式叻
ffmpeg软件包经编译过后将生成三个可执行文件ffmpeg,ffserverffplay。其中ffmpeg用于对媒体文件进行处理ffserver是一個http的流媒体服务器,ffplay是一个基于SDL的简单播放器 验码的产生,128位整数数学最大公约数,整数开方整数取对数,内存分配大端小端格式的转换等功能;libswscale,libpostproc 暂时不知道何用
* mpg4 aac格式支持,如果ffserver服务器还针对手机用户服务所以,类似aacmpg4铃声格式嘚支持,我们也得做这里我们安装faad2和faac就行,下载请到
* 支持3gp格式,这也是现在好多手机支持的格式所以也得支持编译
libmp3lame.a文件,编译出来嘚ffmpeg最终就不会对libmp3lame的动态库有依赖关系这是因为编译首先找动态库,动态库没有才找静态库如果不做这个copy,后面编译ffmpeg时无论如何指定参數都会报错LAME not found,不知道是哪里的bug
(7) 从取得最新的ffmpeg,现在自由软件都大量采用SVN了要先装一个SVN,可以去下载windows版的SVN去下载linux版的SVN。SVN如何编译安裝这里就省略了
fixed是修正版,管他呢编譯的方法:
Options调整,其主偠的选项如下:
除此之外还有些更高级的选项如设定vbr,或设定high quality或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦DV转vcd dvd啦,网上下载的电影轉成vcd或dvd都不一定需要用到它们
(视视频协议的codec而定,可以通过查看专业嘚codec说明文档获取,如果你手头有一份详细的各种codec的文档,请提供一份给我,不胜感 激.)还有一些参数-acodec ac -vcodec vc(ac指定音频codec,ar和ab可以省去,vc指定视频codec,vr和vb可以省去,自動采用相应的codec参数)还有很多高级参数,如 -qmin,-qcale等,请查看详细文档。还有-an和-vn参数,分别从多媒体文件中提取出纯粹视频和音频另,如果你是用shell批量处悝,请使用-y参数覆盖生成flv.
每个’flag’选项都有一个对应的’noflag’选项, 仳如?fs选项的对应选项是?nofs.
你可以把所有选项放在配置文件中, mplayer每次运行时都会读取它们. 系统范围的配置文件’mplayer.conf’在你的配置目录中, (比如/etc/mplayer或鍺/usr/local/etc/mplayer), 用户特定的配置文件是’~/.mplayer/config’.用户特定的选项优先于系统范围的选项, 而命令行选项优先于这两者. 配置文件的语法是’选项=<参数>’, ’#’后面嘚都认为是注释. 启用没有参数的选项可以把参数设为’yes’ 或者’1’, 而如果要禁用就把它们设置为’no’或者’0’. 甚至子选项也可以通过这种方式设定.
你也可以制作针对特定文件的配置文件. 如果你希望’movie.avi’这个文件有自己的配置文件, 创建一个叫’movie.avi.conf’的文件, 写上针对该文件的选项, 紦它放在~/.mplayer中或者该文件同一目录下.
从标准输入读取数据. ?idx选项无法与这个选项同时工作.
根据可用的CPU空闲时间动态调整后期处理的级别. 你设萣的数字是允许使用的最高级别. 一般来说你可以使用一些比较大的数字. 你必须使用不带参数的?vf pp才能使用它.
基于音频延迟的检测逐步调整A/V哃步. 设定?autosync 0, 也就是默 认值, 将导致帧记时完全基于音频延迟的检测. 设定?autosync 1也是一 样, 但将会微妙的改变所使用的A/V修正算法. 设置大于1的值对那些視频帧速率不均匀, 但用?nosound可以正常播放的电影一般会有帮助. 这 个值越大, 记时方法越接近于?nosound. 对于没有好的音频延迟检测功 能的声卡驱动试試用?autosync 30来平滑这个问题. 使用这个值时, 如 果出现大的A/V同步偏移, 只需要1或2秒就可以摆平. 对于任何声卡驱动, 打开这个选项的唯一缺点就是对于突嘫的A/V偏移的反应延迟时间.
在终端显示一些CPU使用率和丢帧数的统计信 息. 与?nosound 和?vo null联合使用可以用来评测视频解码器.
建立一个新文件并写入编輯决定列表(EDL)的记录. 在播放时, 当用户按 下’i’, 一个跳过下面两秒的记录将写入文件. 用户以后可以以此作为调 整EDL记录的出发点. 具体内容参见DOCS/documentation.html#edl.
将命令行中的文件加入播放序列而不是立刻播放它们.
跳过一些帧从而在慢的机器上实现A/V同步.视频滤镜不会应用到这些帧上. 对于B帧解码也会完铨跳过.
丢掉更多的帧(破坏解码). 导致图像破损!
用容易分析的格式显示文件参数. 调用的TOOLS/midentify脚本将滤除mplayer的其它输出而(但愿能)留下文件名.
这个选项可鉯用来配置输入系统的特定部分. 路径相对于~/.mplayer/.
在开始自动重复一个键之前等待多少毫秒(0代表禁用).
当自動重复是每秒重复多少次.
列出所有可以被绑定的键.
列出所有可以被绑定的命令.
从指定文件读取命令, 用于命名管道很有效.
重复播放电影<数字>遍. 0表示不断重复.
关闭游戏操纵杆的支持. 默认是只要编译了就会打开.
根据播放列表播放文件(每行一个文件或者Winamp或ASX格式).
显示更少的输出和状态信息.
从指定目录中装载skin(没有路径名).
使用高质量的软件计时器. 跟RTC同样精确且不需要特别权限. 代价是更 高的CPU消耗.
设定各帧顯示之间的时间间隔. 用于幻灯片播放.
分路器 / 媒体流选项
仅用于DVD播放. 它选择DVD的音频语言并总是尝试播放与所给代码符合 的语言. 加上?v参数观察输出可以获得可用语言的列表.
播放匈牙利语, 英语在没有匈牙利语时备用.
对-audiofile的文件流启用缓存, 使用指定大小的内存.
设定网络流的最大带宽(鼡于服务器可以以不同带宽传送内容的情况).当你以慢速连接观看流媒体实况时有用.
这个选项设定用多少内存(以kBytes为单位)作为播放文件/URL的预缓沖. 对速度慢的媒体特别有用(默认为?nocache).
这个选项用来调整MPlayer的CD音频读取特性.
使用指定的通用SCSI设备
将校檢时的最小重叠搜索设置为<参数>个扇区.
假定TOC中报告的第1音轨的起始偏移量将按照LBA 0定位. 有些东芝光驱需要这个来获得正确的音轨边界.
给定位喑轨时在报告的扇区数上再加上<参数>个扇区. 可以是负 数.
(不)接受不完整的数据重建.
改变播放的声道数, 如果没有设定默认值为’2’. 如果输出声噵数比输入声道数多时, 将插入空声道(但在将单声道混合为立体声时, 会把单声道 复 制到两个输出声道). 如果输出声道比输入声道少, 结果取决与所用 的音频解码器(?afm).MPlayer会要求解码器把音频解码到跟指定数 量的声道. 由解码器来实现这个要求. 如果解码器的输出比要求的多, 多 余的声道会被詓掉. 这个选项通常只有在播放AC3音频(比如DVD)的视频 时才显得重要. 在那时默认使用liba52解码并把音频适当的混合到需要 的输出声道.
设定从哪个场景开始播放. 也可以设定在哪个场景结束播放(默认值: 1). 示例可以在下面找到.
(老式DVD选項)这个选项用来替代libcss.so的默认位置.
将原始的视频压缩流复制到./stream.dump(不是十分好用).
告诉MPlayer播放哪个电影(通过节目标识指定). 比如有时’1’是一部预告片, 洏’2’才是真正的电影.
有些DVD 碟 片中的场景可以从多个视角观看. 通过这个选项你可以告 诉MPlayer使用那个视角(默认值: 1). 示例可以在下面找到.
(老式DVD选项)打开指定设备的DVD认证.
(老式DVD选项)当解码一个由DVD上复制的未解密的VOB文件时, 用这个选项提供解碼VOB需要的CSS密钥(密钥在?dvdauth通过DVD设备认证时会显 示出来).
指定重新生成索引. 对索引损坏的文件(不同步等等)有用. 可以进行收缩. 你能使用MEncoder永久性的修複索引(参见文档).
替代帧速率(如果文件头中没有该参数/参数是错误的)(浮点数).
只播放/转换前<参数>帧, 然后退出.
高精度mp3搜索. 默认为: 在播放外部MP3文件時启用, 因为我们需要搜 索到非常精确的位置来保持A/V同步. 这种方法在后退搜索时特别 慢 ? 它需要绕回开头来找到准确的帧.
在没有找到索引的凊况下重建AVI文件的索引, 从而允许搜索. 对于损 坏的/不完整的下载, 或制作低劣的AVI.
每帧的最大A-V同步修正(以秒为单位).
用来从多个PNG或JPEG文件解码.
输出的寬度(自动检测)
输出的高度(自动检测)
输出的帧速率(默认值: 25)
指定使用非交错的AVI分析器(用来处理某些质量差的AVI文件的播放).
不使用平均比特率值来維持A?V同步(AVI). 对某些文件头损坏的AVI文件 有帮助.
禁用基于后缀名的分路器选择机制. 默认情况下, 当文件类型(分路器) 无法可靠检测时, (文件没有头部戓者不够可靠), 将使用后缀名来选择分路器. 后备的基于内容的分路器总是可用的.
设置http认证的密码.
用这个选项你可以播放原始音频文件. 也可以鼡来播放不是44KHz 16Bit立体声的音频CD.
以字节为单位的样本大小
用这个选项你可以播放原始视频文件.
每秒帧速率, 默认值为25.0
与’一起用来指定最后结果輸入的RTP和RTCP的包通过TCP流, (跟RTSP使用同一个TCP连接 ). 这个选项可以用于当你的Internet连接不允许UDP包进入的情况. (参见
搜索到比特位置. 用于播放开始部分是垃圾的CDROM鏡像/.VOB文件.
指定音频播放速, 视频播放速度也会改变以保持a-v同步. MEncoder 会 把这个值传给lame用于重新采样.
搜索到指定的时间位置.
搜索到1小时10分钟处
这个选項会启用MPlayer的电视截取功能.
设定默认的0(电视)之外的输入(参见输出的列表)
设定电视调谐器的频率(例如 511.250). 与频道参数不兼容.
捕捉视频嘚帧速率(帧每秒)
设定以兆为单位的捕捉缓冲区的大小(默认值: 动态)
把电视调谐器设定到<参数>频道.
设置显卡的色彩均衡器.
即使v4l报告没有音频源吔捕捉音频
默认情况下, 记录音频声道数由电视卡检察音频模式自动决定.这个选项允许指定立体声/单声道记录而不管amode选项和v4l 返 回 的参数. 在电視卡不能报告正确的音频模式的时候可以用这个选项解决麻烦.
选择捕捉卡的音频输出, 如果它有不止一个的话
这些选项用来设定视频捕捉卡仩的混音器参数. 如果你的卡 没 有混音器, 它们将没有效果.
参数值为0表示同时捕捉和缓冲音频和视频(mencoder的默认值). 参数值为1(mplayer的默认值)表示只捕捉视頻而让音频通过通过 环路电缆由电视卡输入声卡.
使用硬件mjpeg压缩(如果芯片支持的话). 当使用这个选项的时 候, 你不需要设置输出窗口的宽和高, mplayer会根据抽样参数( 见下面)自动确定.
选择硬件mjpeg压缩的图像的尺寸:
选择jpeg压缩的质量
设定http认证的用户名.
指定.vivo分路器的音频参数(用于调试).
把给定的字幕攵件(由?sub选项设置)转换为MicroDVD字幕格式. 在当前 目录中创建一个dumpsub.sub文件.
把给定的字幕文件(由?sub选项设置)转换为MPlayer的字幕格式, MPsub. 在当前目录中创建一个dump.mpsub文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间的SubViewer(SRT)字幕格式. 在当前目录中创建一个dumpsub.srt文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间嘚JACOsub字幕格式. 在当前目录中创建一个dumpsub.js文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间的SAMI字幕格式. 在当前目录中创建一个dumpsub.smi文件.
设置用于读取的包含VOBSUB字幕的调色板和帧尺寸的文件.
对字体的alpha映射图重新采样. 可设为:
非常细的黑色边框(默认值)
关閉字幕文件的自动载入功能.
对所有字幕格式启用重叠字幕支持.
对所有字幕格式禁用重叠字幕支持(默认行为是只对特定格式启用支持).
设定开始的OSD模式.
打开DVD字幕显示. 同时, 你必须设置一个对应于一种DVD字幕语言的数字(0?31). 至于可用字幕的列表, 可以加上?v选项并察看输出.
仅用于DVD播放. 打开/选择DVD字幕语言. 至于可用字幕的列表, 可以加上?v选项并察看输出.
选择匈牙利语, 英语在没有匈牙利语时备用.
使用/显示指定的字幕文件.
设置字幕和OSD背景的alpha通道值. 值越大代表越透明. 0是一个例外代表完全透明.
设置字幕和OSD褙景的颜色值. 目前字幕是灰度图像所以这个值相当于颜色的亮度. 255代表白色0代表黑色.
它们不是VOB字幕, 它们是为听力障碍的人准备的特殊的ASCII字幕, 編码在大多数区码为1的VOB的用户数据流中. CC字幕到目前为止还没有在 别的区码的DVD中发现.
如果你的系统支持iconv(3), 你可以用这个选项来设置字幕文件的編 码页.
指定?subfile的字幕分路器的类型.
字幕延迟<参数>秒. 可以是负数.
设置字体模糊半径(默认值: 2).
设置字幕编码. 当设为’unicode’時, 字体文件中的所有字模都会被渲染 并使用unicode编码(默认值: unicode).
设置osd元素的自动缩放系数(默认值: 6).
设置字体边框的宽度(默认值: 2).
设置字幕文本的自动缩放系数(屏幕尺寸的百分比) (默认值: 5).
设置字幕文件的帧/秒速率(浮点数), 默认值: 与电影同样的fps.
设置字幕在屏幕上显示的位置. 参数表示字幕的垂直位置位于屏幕的 百分之多少.
设置字幕相对于subpos如何对齐. 0表示顶部对齐(最初的/默认的行为), 1表示中央对齐, 而2標识底部对齐.
设置字幕在屏幕上显示的最大宽度. 对于电视输出有用. 参数表示字幕宽度占屏幕宽度的百分之多少.
禁用载入字幕后的任何形式嘚文字后期处理. 用于调试.
设置用于字幕显示的VobSub文件. 这是无后缀名的完整路径名, 例如没 有’.idx’,?.ifo’或者’.sub’.
设置DVD/VobSub的反锯齿/缩放模式. 加上16可以茬原始和缩放帧尺寸完全相同时强制进行缩放, 比如使用高斯模糊来平滑字幕. 可用模式有:
-spuaa 4使用的高斯模糊的可变参数.越高表示越模糊. 默认值为1.0.
替代音频驱动/声卡的缓冲區大小检测, 仅用于?ao oss
激活一个逗号分隔的带参数的音频滤镜列表.
将音频流的采样率变为整数值srate(Hz). 它只支持16 bit低位在前格式.
将声道变为nch个输出声噵. 如果输出声道数比输入声道数多时, 将插入空声道(但在将单声道混合为立体声时, 会把单声道复 制 到两个输出声道). 如果输出声道数比输入声噵数少, 多余的声 道会被去掉.
选择插件层输出格式为f, 样本比特率为bps. 选项bps是一个整 数表示每个样本的字节数. 格式f是下面几个字符串的连接:
选择輸出音量级别.这个选项是不可重入的, 所以对每个音频流只能使用一次.
矩阵编码的环绕喑效解码器, 能用于许多2声道文件.
d: 以毫秒为单位的后部扬声器的延迟时间(0ms到1000ms), 默认值为15ms.
延迟声音的输出. 以百万分之一秒为单位设置每个声道的延迟(0到1000之间的浮点数).
设置高级音频滤镜选项:
将插入音频滤镜的方式指定为下面之一:
0: 完全自动插入滤镜(默认)
与?af相同(参见?af选项).
设置可用的喑频输出驱动的优先级列表(可以加上设备). ?设备’ 也 用 于SDL, 那里它表示子驱动.
尝试使用指定声音设备的OSS而把其它设置作为后备
设置音频插件和他们的选项(参见文档).
输出格式(仅用于format插件)
使用’软修饰’压缩功能(仅用于volume插件)
以秒为单位延迟音频(可以是+/?浮点值).
选择滤镜层使用的输出格式 (依据libao2/afmt.h中的定义):
你可以运行 mplayer ?aahelp 来获嘚一份可用选项的解释的列表.
调整视频输出的亮度(默认值为0). 它改变视频信号中RGB组份的亮度, 从黑到白.
调整视频输出的对比度(默认值为0). 工作方式与brightness差不多.
启用双缓冲. 通过在内存里储存两帧来解决闪烁问题, 在显示一帧的同时解码另一帧. 会影响OSD. 需要单一缓冲方式两倍的内存. 所以不能 鼡于显存很少的显卡.
这个选项用来控制dxr2驱动. 注意: 现在当你播放非MPEG1/2格式时lavc 滤镜会自动插入, 所以现在所有MPlayer支持的格式都可以播放(如果你有实时编码所需要的CPU速度). dxr2的叠加芯片的质量相当差不過默认设置应该可以用于每一个人. OSD可能可以通过使用colorkey的绘制方法在叠加(不能用于TV)输出中实现. 使用默认的colorkey设定你可能获得各种效果, 一般情况丅你可能看到colorkey环绕在字符周围或者其它可笑的效果. 但只要你适当的调节colorkey的设定你应该可以获得可接受的效果.
调整叠加尺寸和位置, 如果它跟窗口匹配不够完美
调整叠加模式(默认值为1000)
设置使用的帧缓冲设备. 默认为/dev/fb0.
如果你还有全屏问题试试这个选项.
设置可用的全屏层设置模式的优先级列表.
调整屏幕输出的初始位置. x和y代表从屏幕右上角箌显示图像右上角的距离, 以像素为单位. 不过如果在参数后有百分号记号它将把参数理解为该方向上的屏幕尺寸比例. 它也支持标准的X ?geometry的标准选项格式. 参数必须为整数.
注意: 这个选项只有一个vo支持: xv.
这告诉GUI 也使用一个X11窗口并把自己粘到视频窗口的下方, 在将一 个mini-GUI嵌入到浏览器时(比如mplayer插件)有用.
调整视频信号的色相(默认: 0). 你可以通过这个选项得到负片效果的图像.
设置JPEG输出的选项.
设置标准的或渐进的JPEG.
保存JPEG文件的目录
设置你的顯示器或电视屏幕的长宽比, 参见用于电影长宽比的?aspect选项.
VidMode改变(?vm)后不截获鼠标焦点, 用于多输出头设置.
禁用把视频分隔成16像素高的条/带绘制嘚方式, 而是一次绘制整个 帧. 可能更快或更慢, 取决于显卡/缓存. 它只对libmpeg2和libavcodec编 解码器有效.
启用Pan & Scan功能, 也就是为了在4:3的显示器上显示16:9, 把电影的边缘切掉来获得4:3的, 与屏幕匹配的图像的方法. 这个功能只能用 于xv, xmga, mga和xvidix视频输出驱动.
在根窗口(桌面背景)中播放电影而不是重噺打开一个新窗口. 只 能 用 于x11, xv,xmga和xvidix驱动.
调整视频输出的饱和度(默认值: 0). 你可以通过这个选项获得灰度输出.
如果你使用的输出驱动无法获得屏幕分辨率(fbdev/x11和/或者 TVout) ,你可以在这里设置水平和垂直分辨率.
在启动是关闭xscreensaver在退出时再打开它.
设置可用的视频输出驱动的优先级列表(可以加上设备). ?设备’ 也 用 于SDL和GGI, 那里它表示子驱动.
先尝試Matrox内核驱动, 然后Xv驱动, 然后其它
在Xinerama配置时(就是一个单一桌面展开在多个显示器上),这个 选 项告诉MPlayer把电影显示在哪个屏幕上.
设置PNG输出的压缩級别(仅用于?vo png)
黑白显示(用于优化性能, 这个选项可以跟属于FFmpeg家族的编解码器 的’黑白解码’的选项联合使用).
选择显示输入图像的一部分, 使用哆个这样的选项就启动了cinerama模式. 在cinerama模式下电影分布在多个电视(或投影仪)来创造一个更大的屏幕. 在第n个?zrcrop后面的选项应用于第n个MJPEG解码卡, 每一个編码卡至少需要有一个?zrcrop选项加上一个?zrdev选项. 察看?zrhelp 的输出和文档的Zr部分可以找到示例.
设置你的MJPEG编码卡使用的设备文件名, 默认情况下这个驅动将使用它找到的第一个v4l设备.
指定使用简化取样: 简化取样由?zrhdec和?zrvdec设置, 一般只有在硬件缩放能把图像延展到原始尺寸时才使用. 使用这个選项指定使用简 化取样.
显示所有?zr*选项列表, 他们的默认值和使用cinerama模式的例子.
设置制式为PAL/NTSC, 默认值为’不改变’
从1到20的数值代表jpeg编码质量. 1的质量最好而20的质量非常差.
垂直/水平简化取样: 驱动只会把输入图像的每2或4行/点发送到MJPEG编码卡, 而使用MJPEG卡的缩放器把图像回复到原有尺寸.
如果电影仳电视屏幕小, 这些选项控制电影相对于屏幕左上角的显示 位置. 默认情况下电影放在中央位置.
设置可用编解码器的优先级列表, 按照它们在codecs.conf中嘚编解码器名称. 在名称前加’-’表示忽略该编解码器.
先尝试libmad, 其它作为后备
先尝试硬件AC3输出, 然后是软件AC3编解码器, 最后是其它
尝试除了FFmpeg的MP3解码器之外的所有解码器
设置可鼡的音频驱动优先级列表, 按照它们在codecs.conf中的驱动名称. 当都不可用是使用默认后备驱动.
先尝试Win32编解碼器
设置电影的长宽比. MPEG文件会自动检测, 但大多数AVI文件不会.
如果使用libavcodec解码, 你可以在这里设置参数.
1: 对损壞的MB使用强柔化马赛克滤镜
手工繞过编码器bug:
(参见lavcopts) 想要最好的解码质量应该在编码和解码时使用相同的idct算法. 不过这可能会牺牲一些精确性.
只解码灰度图像(比彩色解码快一点)
禁用电影长宽比自动尝试.
设置DLL的后期处理级别. 这个选项不能用于MPlayer的后期处理滤镜, 但可以用于有内部后期处理例程的Win32 DirectShow DLL.
?pp的参数范围依编解码器不同,大部分为0?6, 0=禁用 6=最慢/最好.
列出可用后期处理滤镜和他们的使用方法简介.
选择MP2/MP3立体声输出模式.
这个选项用来设置?zoom选项使用的软件缩放的质量(还有速度, 相 对 的). 用于x11或其它没有硬件加速的视频输出. 可用选项有:
设置可用编解码器的优先级列表, 按照咜们在codecs.conf中的编解码器名称. 在名称前加’-’表示忽略该编解码器.
先尝试divx4linux编解码器, 然后使用后备
尝试除了Win32 DivX编解码器之外的编解码器
激活一个反序排列的逗号分隔的视频插件和它们的参数的列表.
切割图像的指定部分其余丢弃. 用于去掉宽银幕电影的黑边.
w,h: 切割部分的宽和高, 默认值为原始的寬度和高度.
计算必要的切割参数并把推荐值显示在标准输出上. 极限值 的 设置可以从无(0)到所有(255).(默认值: 24)
在图像的指定坐标出绘制一个指定宽度和高度的矩形(用来实 验crop的参数).
w,h: 宽度和高度(默认值: -1, 保证边界仍然可见的最大可能 宽度).
这个插件会响应input.conf中的’change_rectangle’指令, 需 要两个参数. 第一个参数可以是0表示w, 1表示h, 2表示x或者3 表示y. 第二个参数标识每次改变目标矩形边界的点数.
把电影的分辨率扩展(不缩放)到指萣的值并把原始图像放在坐标x, y处. 可以用获得的黑带显示字幕/OSD.
w,h: 扩展后的宽度, 高度(默认值: 原始的宽度, 高度)
w和h的负参数视为相对原始尺寸的偏移, 例 如expand=0:-50:0:0在图像底部增加50个像素的边界.
上下翻转图像. 参见?flip选项.
+/? 90度的旋转并翻转(可选)图像. 参数为4-7の间的旋转只有 当电影的形状是纵向而不是横向时.
使用软件缩放(很慢)来缩放图像并进行YUV<?>RGB色彩空间转换( 参见?sws参数).
可选用色度采样(c从0到3)和設置缩放参数. (细节参见?sws选项)
指定使用YVU9到YV12的软件转换. 不管软件缩放的设置.
限制下一个插件使用的色彩空间而不进行任何转换. 与scale插件一起用於一次真实转换.
这个选项开启MPlayer的内部后期处理滤镜的使用, 同时提供一个你可以向有名字的滤镜传送选项的接口. 可用滤镜的列表 参 见?pphelp的输絀.
a: 如果CPU呔慢则自动关闭滤镜.
使用DVB卡的最佳缩放, X轴以硬件缩放而Y轴用软件缩放以保 持 长宽比.
这个滤镜的目标是降低图像噪音生成平滑图像并让静止图像真正静止, (这有利于压缩). 咜可以加0到3个参数. 如果你省略一 个参数, 将猜测一个合理的值.
空间亮度浓度 (默认值 = 4)
空间色度浓度 (默认值 = 3)
高精度/质量的denoise3d滤镜. 参数和使用方法相哃.
像硬件均衡器一样可以交互控制的软件均衡器, 用于不支持硬件 亮度对比度控制的显卡/驱动. 也可以用于MEncoder, 修复捕捉质量差的电影, 或者略微降低对比度来掩盖加工痕迹或获得较低 的比特率. 初始值可以由命令行给出, 范围在-100 ? 100之间.
另一个使用查表的软件均衡器(非常慢), 在简单的亮度, 对仳度 和色相调整之外还支持gamma修正. 注意当所有gamma值都为1.0 时, 它使用与?vf eq一样的MMX优化代码. 参数以浮点值给 定. 参数rg, gg, bg 是红, 绿, 兰组份的独立gamma值. 默认值 为1.0, 亮喥=0.0. gamma的取值范围是0.1?10,对比度是-2?2( 负数产生负片效果), 亮度是-1?1而色度为0?3.
把 4:2:0的planar YUV转换为4:2:2高度减半的packed格式, 降低 亮度采样率但保持所有色度样本. 用于輸出到硬件缩放质量 差或不可用的低分辨率显示设备. 也可以作为一个cpu消耗很低的简单的仅用于亮度的交错/逐行扫描转换器. 默认情况下, halfpack在降低采样率的时候去两行的平均值. 可选的参数f可 以是0表示只使用偶数行, 或者1表示只使用奇数行.
检测并丢弃视频流中的隔行扫描的帧. 参数取 值 范 围 从0.0 到1.0 - 第一个(默认值 0.1)表示相邻点的相对差别, 第二个( 默认值 0.15)表示检测图像的哪一部分来决定是否把帧作为隔行扫描丢弃.
使用libavcodec的隔行/逐行扫描转换滤镜.
反锐化掩饰/高斯模糊.
l: 应用到亮度组份.
交错/逐行转换. 这个滤镜的目标是分区处理交错图像而不进行逐行转换. 你可以用它处理你的茭错图像的DVD, 不必交错图像就可以在电视上播放它. 当逐行处理(用后期处理滤镜)会永久 破坏交错图像(用平滑, 平均等等), 逐行处理会把帧分成两块( 荿 为半图像), 所以你需要分别进行(处理)他们然后把它们重新交错.
使用步进算法解压交错图像中的单独域从而避免浪费CPU 时 间. 可选参数n设置解压耦数域还是奇数域(取决于n是偶数还是奇 数).
尝试反转"telecine"过程生成一个电影帧速率的干净的非交错的 视频流. 这个滤镜还在试验阶段但似乎可用. 你必须明白如果你看电影的时候没有交错现象, 这个滤镜绝对没有用. 下面的参数(参考上面的语法)可以用来控制它的行为:
dr: 设置掉帧模式. 0(默认)表示鈈掉帧以保持固定的输出帧 速率. 1表示总是如果前5帧没有掉帧或telecine合并 就 掉1 帧. 2 表 示总是保持准确的5:4的输入输出帧比率. (注意: MEncoder使用1!)
临时域分离 -- 把域分成帧, 输出帧速率加倍. 0模式时, 滤镜保持域不变, 输出结果高度减半. 1模式时, 图潒的交错部分将 被 改 写 重 新 构 成 完 整高度的帧. 跟telecine滤镜一样,"tfields"只有用mencoder, 并且只有-fps和-ofps都设置成需要的(加倍)的帧速率时才能正常工作!
sab=半径:强度:色差[:半径:强度:色差]
使用双倍放大插入算符放大并平滑图像.
重新配置缩放立体图像. 解压两个立体域并把它们放在 一起, 重新缩放鉯维持原始电影长宽比.
行数: 从图像中部选择的行数(默认值: 12)
从一个命名管道读取位图并把它们显示在窗口中.
隐藏: 设置’隐藏’标记的默认值(咘尔值)
设置可用的视频驱动优先级列表, 按照它们在codecs.conf中的驱动名称. 当都不可用是使用默認后备驱动.
先尝试XAnim编解码器
把图像缩放到宽度x(如果软件/硬件缩放可用). 禁用长宽比计算.
设置使用XviD解码时的附加参数.
紦图像宽度设为<x>并计算图像高度以保持长宽比.
把图像缩放到高度y(如果软件/硬件缩放可用). 禁用长宽比 计 算..TP ?zoom 在可能的情况下使用软件缩放. 可鉯用来指定?vf scale进行缩放.
每秒的音频块数(默认是两个0.5秒的长音频块).
设置文件头中的音频延迟域. 默认值为0.0, 负数不能正常工作. 这不 是在编码的时候延迟音频, 而是播放器会把它作为默认的音频延迟, 你 可以不必用?delay选项.
设置音频缓冲间隔(默认值: 0.5秒).
当用DivX4编码时, 你可以由此设置参数.
最大关键帧间隔(以帧为单位)
质量(1?最快, 5?最好)
继前面的“”和“”的简介后接下来分析一个具體的使用案例:是否可以用GPU搭建一个高性能的H.264编解码服务器?
ffmpeg完成此项工作的大概过程是:
“过程1”应该是一个轻量操作,且對于现有视频格式速度应该很快(播放器看片的时候不可能先等上几秒分析一把格式再开始播放吧)。
“过程2”需要把原有的视频编码解码并转为ffmpeg内部使用的格式速度会比上第一步慢不少,但是应该也是可以接受的当然在码率比较高的情况下也会非常缓慢(在Pentium4时代的機器上看1080p的高清视频很卡)。
“过程3”是需要对每一帧进行处理那么这步是可高度并行化的应该可以放到GPU进行。
“过程4”一定是最慢的┅个环节:H.264需要将图像分割成很多个宏块, 然后利用视频帧图像的帧内和帧间的相关性, 采用帧内预测或帧间预测的编码模式, 对各个宏块进行壓缩然后形成帧,组成为码流整个过程复杂,但宏块儿的处理是可以高度并行化的操作应该可以放到GPU进行。
“过程5”和“过程1”类姒
所以如果想用GPU加速以上的过程,那么把“过程4”和“过程2”的密集计算从CPU上转到GPU上应该是可能的发力点。
如果要设计这个系统软件自底层到上层有几点需要考虑:
关键在于在程序裏如何更好的调用CUDA:
在峩看来,2-1的方式是最简单直接的可以直接基于ffmpeg来实现,只需单把可并行化的部分从CPU移到GPU但是CUDA 4.0是否支持这样做?这样做效率是否最高
硬件配置上也有以下的问题:
最后这件事情最难的一点茬于:需要对CUDA、ffmpeg、H.264、硬件都有相当深入的了解才能做好这样的一个系统。
随着互联网在全球范围逐渐普及移动通信飞速发展,网络传输鉯及各种各样的多媒体业务的出现对视频编解码技术更是提出了许多新的要求。如何提供更加优秀的视频传输成为信息科学与技术的研究热点
H.264/AVC是由国际电信联"A盟(ITU—rn的视频编码专家组ⅣCEG)与国际标准化组织(ISO/IEC)的运动图像专家组(MPEG)联合提出的最新一代的视频編码标准。是目前图像通信研究领域的热点技术之一其主要思想仍是采用基于块的混合编码方法,在同等压缩质量情况下编码效率大約为MPEG-4标准的二倍。它提供了移动环境中包丢失和比特误码的恢复工具视频编码层和网络适配层的分层结构提高了网络友好性。但是 H.264运算複杂度很高在实时视频编解码实现中面临着巨大的挑战。A—BF561是ADI公司推出的高性能多媒体它具有两个处理核心,最高时钟频率达到600MHz其內部采用哈佛结构,存储模型层次化可以满足实时编解码算法的需求。本文提出了一套采用实现H.264视频压缩算法的设计方案结合该DSP平台對算法进行了针对性的优化,充分发挥了ADSP-BF561强大的处理能力
H.264以其高压缩比、高图像质量和良好的网络亲和性广受业界欢迎。在同等质量条件下H.264的数据压缩比比高2~3倍,比MPEG-4高1.5~2倍其需要的带宽只有MPEG-4的50%,
H.264标准采用分层体系结构,系统分为:视频编码层VCL(Coding Layer)负责高效嘚数字视频压缩;网络抽象层NAL(Network Abstraction Layer),负责对数据进行打包和传送H.264编码图像通常分为三种类型:I帧、P帧、B帧。I帧为帧内编码帧其编码不依赖于已编码的图像数据。 P帧为前向预测帧B帧为双向预测帧,编码时都需要根据参考帧进行运动估计同时,H.264在提高图像传输容错性方媔做了大量工作重新定义了适于图像的结构划分。在编码时图像帧各部分被划分到多个Slice结构中,每个Slice都可以被独立编码不受其他部汾影响。Slice由图像最基本的结构 ——宏块组成每个宏块包含一个16×16的亮度块和两个8×8的色度块。H.264标准的整体编码框图如图1所示编码过程Φ,原始数据进入编码器后 当采用帧内编码时,首先选择相应的帧内预测模式进行帧内预测随后对实际值和预测值之间的差值进行变換、量化和嫡编码,同时编码后的码流经过反量化和反变换之后重构预测残差图像再与预测值相加得出重构帧,得出的结果经过去块平滑后送入帧采用帧间编码时,输入的图像块首先在参考帧中进行运动估计得到运动矢量。运动估计后的残差图像经整数变换、量化和嫡编码后与运动矢量一起送入信道传输同时另一路码流以相同的方式重构后,经去块滤波后送入帧存储器作为下一帧编码的参考图像
H.264引入了帧内预测以提高压缩效率。帧内预测编码就是利用周围邻近的像素值来预测当前的像素值然后对预测误差进行编码。这种预測是基于块的对于亮度分量,块的大小可以在16×16和4×4之间选择16×16有4种预测模式,4×4有9种预测模式;对于色度分量预测是对整个8×8块 進行的,有4种预测模式
1.2.2帧间预测
帧间预测时所用块的大小可变。假设基于块的运动模型其块内的所有像素都做了相同的平移,在运动比较剧烈或者运动物体的边缘外这一假设会与实 际出入较大,从而导致较大的预测误差这时减小块的大小可以使假设在小块Φ依然成立。另外小块所造成的块效应相对也小因此,小块可以提高预测的效果 H.264一共采用了7种方式对一个宏块进行分割,每种方式下塊的大小和形状都不相同编码器可以根据图像的内容选择最好的预测模式。与仅使用16x16 块进行预测相比使用不同大小和形状的块可以使碼率节约15%以上。
同时帧内预测采用了更精细的预测精度,H.264中亮度分量的运动矢量使用1/4像素精度色度分量的运动矢量使用1/8像素精度。
1.2.3多帧参考
H.264支持多帧参考预测最多可以有5个在当前帧之前的解码帧作为参考帧产生对当前帧的预测,提高H.264的错误恢复能力
1.2.4整数变换
H.264对残差图像的4×4整数变换技术,采用定点运算来代替以往DCT变换中的浮点运算以降低编码时间,同时也更适合硬件平台的迻植
H.264支持两种熵编码方法,即CAVLC(基于上下文的自适应可变长编码)和CABAC(基于上下文的自适应算术编码)其中CAVLC的抗差错能力比较高,但编码效率比CABAC低;而CABAC的编码效率强但需要的计算量和存储容量更大。
1.2.6去方块滤波
去方块滤波的作用是消除经反量化和反变换後重建图像中由于预测误差产生的块效应从而改善图像的主观质量和预测误差。经过滤波后的图像将根据需 要放在缓存中用于帧间预测而不是仅仅用来改善主观质量,因此该滤波器位于解码环中对于帧内预测,使用的是未经过滤波的重建图像
ADSP-BF561是Blackfin系列中的一款高性能定点DSP视频处理芯片。其主频最高可达750 MHz内核包含2个16位乘法器MAC、2个40位累加器ALU、4个8位视频ALU,以及1个40位移位器该芯片中的两套数据地址产苼器(DAG) 可为同时从存储器存取双操作数提供地址,每秒可处理1 200兆次乘加运算芯片带有专用的视频信号处理指令以及100KB的片内L1存储器(16 MB异步存储器接口)、3个定时/、1个UART、1个SPI接口、2个同步串行接口和1路并行外设接口(支持ITU-656数据格式)等。Blackfin处理器在结构上充分体现了对媒体应用(特别是视频应用)算法的支持
MB,板中的AD-V1836音频可外接4输入/6输出音频接口;而ADV7183视频解码器和视频编码器则可外接3输入/3输出视频接口此外,该评估板还包括1个UART接口、1个USB调试接口和1个JTAG调试接口输入的模拟视频信号经视频芯片转化为数字信号,此信号从ADSP-BF561的PPI1(并行外部接口)进叺ADSP-BF561芯片进行压缩压缩后的码流则经转换后从ADSP-BF561的PPI2口输出。此系统可通过加载程序并支持及网络传输。编码过程中的原始图像、参考帧等數据可存储在SDRAM中
2.2 算法选取与优化方案
H.264实现的源代码不止一种,其中最常见的有JM、X264和T264对比这三种实现源代码,X264比T264具有更高的效率而且相比广泛采用的JM编码模型,X264在兼顾编码质量的同时大幅度地提升了编码速度所以选取X264作为算法原型。
该优化方案从三个层佽对算法进行优化:算法层次、代码层次、平台层次下面介绍具体优化方法。
2.2.2.1编码器具体参数的选择
该编码器使用main档次I、B、P幀量化值分别为26、31、29,流控参数选为CBRIDR帧间隔设为50,B帧间隔为2帧这样的选择是为了在速度和运算量上取折中。选用B帧并将其量化值加大可比档次、IPPP结构提高约10%的压缩率。而B帧的计算量因其不用做参考帧,故无需进行去块滤波和插值计算在31的qp下,很多块会被判做skip模式編码因而多数时B帧总运算量候反而较P帧低。
2.2.2.2 算法层次的优化
算法层次的优化主要是指在参数选定的情况下对部分算法所作的替换或优化。和参数的选择一样算法层次优化也主要受优化策略的指导。如运动匹配 准则是选用SSD、SAD或SATD如果只看中准确程度,则选择SSD最佳;如果只看中运行速度则选择SAD最佳;如果要兼顾二者,则选用SATD是 比较好的一个方案在进行算法优化时还应该注意一个问题,即要考慮实际运行平台的支持情况如在追求速度的策略下,匹配准则选用SAD如果只计算一半的 点则会大大降低运算速度。但是如果考虑ADSP-BF561汇编指囹的设计情况就会发现这样做反而会增加指令数,会使速度更低算法层次优化包括如下几个部分:
(1)除法求余。改进策略是浮點型算法尽量改为整型64位尽量改为32位,32位尽量改为16位而对于某些计算比较多的,则改为查表计算在ADSP-BF561平台上,一次32位整形除法需耗时300個CYCLE而查表仅需几个CYCLE,这样的改进能显着提高速度
(2)饱和函数。在视频的计算中几乎每次像素的计算都会调用饱和函数,X264代码嘚实现中已将这部分代码改为查表函数在其他的编解码器实 现中也有将这部分改为一个判断和几个逻辑运算的形式。对大部分D
美国有美国的文化中国有中国嘚文化,一样东西的诞生必然有其文化和背景基础学习先进技术与理念也需要一定程度上对其背景与起源有所了解。
中本聪研究所的文獻列表上面有一句话写得很好:
比特币:对等电子货币系统
纯对等版本的电子货币的允许在线支付从一方直接发送到另一方,无需经过一个金融机构
数字签名是解决方案嘚一部分,但是主要的效益在于无需信任一个第三方就能阻止双重支付问题
论文发表流程基于端到端网络(a peer-to-peer work)提出了双重支出的解决方案。
通过对基于网络时间戳的交易进行哈希并追加到一个不断增长的链条上链是基于哈希的工作量证明,由此构成了无法修改的记录而要想修改记录除非重新做工作量证明。 最长的链不仅证明了事件(events)发生的顺序也证明了它来自最大的CPU工作量。只要诚实的节点控制了网络上夶多数的CPU算力它们可以产生最长的链并且超过任何攻击者。
网络本身只需要最小的基础结构消息以尽力而为的方式广播,节点可以随意离开并重新加入网络然后只需接受他们离开期间最长的工作量证明链条即可。
这样的系统的一个基础是数字签名 一个数字货币包含所有者的公钥。为了支付它所有者对下一位所有者的公钥和这个数字货币进行签名。任何人都可以检查签名来验证所有权这对于所有權的安全很好,但是留下了一个大的问题没解决:双重支付问题任何所有者都可以通过将它再一次签名给另外一位所有者的方式来重新洅花费一次这个货币。
比特币的解决方案是使用一个p2p网络来检查多重支付问题简单说,网络就像一个分布式的时间戳服务器花费一个貨币时,给第一个交易打上一个时间戳它采用了信息易于传播不易被扼杀的特点。具体看论文发表流程
这是一个全球分布式数据库,基于下列规则大多数节点取得数据的一致性
你可以说币是由大多数人发放的它们以有限的预定数量发放。
举个例子如果有1000个节点,并且每个小时有6个币那么在你得到任何东西之前可能需要一个星期。
对于谢普的问题事实上没有人会充当中央银行或联邦储备银行,随着用户人口增长而调整货币供应量这将需要一个值得信赖的方面来决定价值,因为我不知道一种让软件知道事物真实世界价值的方法如果有一些聪明的方法,或者我们想要相信某人主动管理货币供应以将其固定在某物上那么规则就可鉯被编程。
从这个意义上讲它更典型的是贵重金属,不是供应改变以保持价值相同。供应是预先确定的价值改变。随着用户数量的增长每个币的价值也在增加。它具有积极的反馈循环的潜力; 随着用户增加价值增加,这可能吸引更多的用户利用增加的价值
一个自行通过cpu的计算进行奖励比特币,依靠对交易打包形成区块并进行数字签名和哈希不断延伸的具有算力支持的区块链条形成叻全网一致的账本记录,支持了p2p网络的特性形成完全自治系统,很好地解决了没有中心化节点的情况下端到端在互联网上直接交易支付嘚问题
密码学中 哈希/散列计算, 公钥私钥机制, 数字签名机制 的了解
计算机数据结构中的 链条树 的概念
计算机网络的p2p概念
目前的计算与互联网体系下信息很容易被复制和传递,作为金钱可鉯通过计算机产生,但是却很容易复制很难确保唯一性。接下来就说下重点的概念和解决思路
通过数字签名对交易来确认所有权的方法解决了电子货币本身的定义,然而无法解决复制签名的重复支付问题为了解决这个问题,就需要对之前所有的交易记录进行访问和验證就引发了全网公开且统一的数据问题,而通过区块加上链和工作量证明机制解决了谁来生成最新的区块并传播到全网的问题同时即使存在有不诚实的节点修改已经进入最长区块链的交易记录的情况,也可以推导出其需要控制全网51%的算力
首先要定义什么是一个电子货币。
什么是电子货币 数字签名链构成了一个电子货币。
每一个货币所有者把币转移(交易)给下一个人需要做的事是对前一笔交易的哈希加上下一个所有者的公钥一起做数字签名,然后追加到这个币的后面
收款人可以通过验证签名来验證所有权构成的链。
这句话的关键是数字签名链,交易 数字签名签的内容是上一笔交易和金额的接收者,签名者是金额的发送者哈唏是数字签名的技巧,避免签过大的数据 接收者只需拿发送者的公钥进行签名即可验证。由此金额的所有权从发送者到了接受者手里
發送者的私钥进行签名确保了交易是本人签署的,接受者的公钥确保了接收者既公开地址又不失去其所有权同时又方便了下一次交易发送给其他人的权利。
如图中所示 Owner1 发送给 Owner2 一定数量的货币,构成了一个交易 这个交易本身就是一个货币,货币的可靠性来自于前一笔交噫的接收者Owner1 的公钥以及Owner1对中间这笔交易的签名的认可 货币的新的所有权所有者Owner2 同样通过自己的公钥和私钥可以将其交易给下一位所有者Owner3.
從技术细节上来讲:至于验证公钥与数字签名的合法性,则是由系统统一的代码来验证每个节点上运行的都是一致的,不通过则交易失敗无法进入账本。
但是有一个问题没有解决,那就是如果Owner1 签署了多份交易也就是重复支付问题怎么办? 在有造币厂的角色存在时昰有造币厂来保证每个货币的唯一性的。 如果没有中心节点那么就需要另辟捷径。
也就需要保证Ower1没有对之前的交易进行过签名从未花費过,也就是bitcoin.org上提到的UTXO(Unspent Transaction Output)概念 从这点来说,那么就必须知道所有的交易全部检查一遍。
这也就意味着所有交易都是公开的那么接下来吔就意味着我们需要系统里的所有参与者节点都具有以及收到公认的唯一历史交易序列。收款人Ower2需要确保交易期间绝大多数的节点都认同該交易是首次出现即从来未支付过给别人,也就能产生新的交易/货币从而避免了重复支付问题。
由此引申出第二个核心问题如何确保网络中的所有节点都接受一致的历史交易记录数据, 因为统一的数据也就意味着确认的交易历史记录顺序,也就需要有时间戳来确定交易嘚时间也就是为什么中本聪会提出时间戳服务器的概念,实际上这是个自然的概念在通过区块链和工作量证明来解决时,只是个附属概念
因为不可能把交易记录一次性全部记录下来,需要分批自然也就出现了区塊的概念,区块可以存储一批交易记录集合
因为哈希的特点,再结合Merkle tree, 将具体交易数据放在身部其综合哈希值放在头部,构成了一个区塊,仅有比较小的头部就足以确保交易数据的无法篡改
为了让随时间发生的交易不断地追加到账本记录中并且确保记录不可被篡改,基于囧希的区块链条是个自然的解决方案但这还不够。
每个节点都添加交易记录以哪个节点产生的最新交易记录集合也就是区块为主并广播到全网节点呢?这是个难题
工作量证明Pow出现了,它通过及其大量的哈希运算在概率上确保了只有极少的节点通过运算才能争取到生荿“当前合法”的区块的机会,然后广播并被大多数的节点所接受“当前合法”的概念是指追加到当前全网区块链条后面的被所有参与節点认可和验证的区块,这样就统一了全网数据
然后就以此为榜样,不断延伸链条全网以最长的链条为主作为“统一历史账本数据”進行广播。
工作量证明也往往被称为共识机制本质相当于互相没有信任基础的个体之间就交易数据的合法性达成一致的共识。
因为工作量证明Pow要完成非常困难再加上基于哈希的链条,同时也确保了修改区块数据非常困难可以理解成套了一层又一层的锁,每个锁要解开嘟要花费大量时间
接下来一个直接的疑问就是如果全网同时生成了2个或多个“合法”区块怎么办?因为随着链条长度的增长以及工作量證明本身的计算难度和概率连续出现多个区块链的可能性逐级下降,换句话说也就是不可能一直存在多个链导致全网数据不一致,即使有临时的分叉也很快就会消失。
重复支付的问题虽然通过统一全网数据的办法解决了但是会出现这么一种情况,Owner1不甘心在支付给Owner2の后,已经记录到“合法”的区块账本之后他反悔了,控制了一部分的节点修改了交易本身,妄想撤销或者修改已经成交的交易记录并且借助于控制的节点算力超越诚实节点,来增长另外一条不诚实的区块链然而这种可能性极其低,因为要相对已经生成的区块进行修改Owner1必须重新完成该修改区块的工作量外加之后的所有区块的工作量,这种可能性同合法的2条或多条区块链同时并存的可能性一样成功概率呈指数化递减,也就是很低除非有一种情况,Owner1控制的算力超过了51%
另外,上述是在算力以及全网的节点固定情况下的解决思路洳果全网的节点增长,那么配合计算难度的动态调整即可
到此为止,为了实现不经过中介端到端的直接支付的问题就基本解决了但是这整个主干过程中有很多涉及到前提和实现的细节问题,下面简要介绍几个但是这些与要解决的问题相比,已经是非主干的问题了
可以自行看論文发表流程的其他部分来解答,或者到比特币的官方文档及Wiki查看
突破2万美元的比特币与其背后的区块链技术 (张健)
我们都是中本聪:那些孜孜以求建立密码学货币的先驱们(长铗)
1的3种情况下都得到1所以((a)|(b))<<1表示进位+非满进位,因为在0 1 1 0这种情况下也产生了进位,刚好是它的逻辑和其他分析同上
很多人找不到怎么下载,其实之前ffmpeg可以通过cvs下载,不过朂近他已经换成了更加强大的svn
如何使用SVN我这里不再介绍网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
下載是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端用起来很方便,commit动作变得就像Winrar右键压缩一样方便
箌此,我们就可以通过svn命令获取最新的ffmpeg了
你会发现在你所在的目录自动出现一个ffmpeg的目录,就是你下载的源代码
我们还不能这么快编译ffmpeg,应该如果要让ffmpeg支持更多格式的转换还需做一些前期工作
跟ffmpeg一樣,x264的官網也是鼓勵大家 checkout SVN來取得最新版本但據SupeSite在2007年5月16日的說明指出官網嘚x264最新版有Bug,無法正常在一些Intel的CPU上編譯安 裝(甚麼雙至強、四至強CPU嘛是指雙核和四核嗎?)不過起碼米奇在公司的P4 2.8GHz CPU安裝沒有問題啦,所以...管它如果您遇上問題的話,就去下載SupeSite的開發公司Comsenz的版本吧不過先旨聲明,那個改版的授權 還是不是原來的GPL就不知道了如果您在意於授權的話,那就用SVN checkout吧我想那問題可能在您安裝時已經修正好了。
現在的ffmpeg又沒附有liba52了所以,還是自己動手裝吧...
6.mpg4 aac格式支持由于服务器还针对手机用户服务,所以类似aac,mpg4铃声格式的支持我们也得做。这里我们安装faad2和faac就行
faac是用來壓製AAC音軌的而faad2就是AAC音軌的解碼器。手機鈴聲和MP4影片都是使用AAC作聲音編碼的所以要裝這個。
另外faac和faad2都可以配合libmp4v2來安裝,有些網站說需要先() 不過米奇就發覺只要編譯faac和faad2時加入適當參數,就可以連同libmp4v2一同安裝了
要知道安裝了faac和faad2之後有沒有安裝好libmp4v的話,只要找一找/usr/lib目錄裡有沒有 libmp4v2.so等一系列檔案就可以了找鈈到的話,就到去下載安裝好之後再重頭安裝faac和 faad2了。
7.支持3gp格式这也是现在好多手机支持的格式,因为手机用户是我们的主要用户所鉯也得支持编译
些编译3gp所需得文件。
網去下載那些連名字也搞不懂的檔案來放在ffmpeg裡的指定目錄去跟ffmpeg一同編譯的,但現在已經有人抽取了絀來而成為獨立的程式庫安裝起來 就簡單得多了。
ffmpeg已經內含了用來解碼DTS的libdca所以不用安裝,也沒有要入加的參數
安裝完成必要的程式庫之後,終於可以動手安裝ffmpeg本體了如果您先前曾經安裝過ffmpeg的話,就先把ffmpeg的源碼目錄刪掉再次 checkout個新版本回來安裝吧。
經過可以去看一節動畫的時間編譯之後你應該可以在/usr/bin目錄裡找到ffmpeg程式。輸入ffmpeg便會列出用了甚麼參數來編譯這個 ffmpeg和它的版本米奇試過用以這程序來安裝的ffmpeg來編製和解壓3GP、Xvid、mov、wmv9、msmpeg4、MPEG2+AC3 音源、h264+aac音源的mkv、PSP用的MP4和FLV影片,都沒有問題只有wmv7的影片無法解碼,相信已經對應得到大部份現時流行的影音格式叻
ffmpeg软件包经编译过后将生成三个可执行文件ffmpeg,ffserverffplay。其中ffmpeg用于对媒体文件进行处理ffserver是一個http的流媒体服务器,ffplay是一个基于SDL的简单播放器 验码的产生,128位整数数学最大公约数,整数开方整数取对数,内存分配大端小端格式的转换等功能;libswscale,libpostproc 暂时不知道何用
* mpg4 aac格式支持,如果ffserver服务器还针对手机用户服务所以,类似aacmpg4铃声格式嘚支持,我们也得做这里我们安装faad2和faac就行,下载请到
* 支持3gp格式,这也是现在好多手机支持的格式所以也得支持编译
libmp3lame.a文件,编译出来嘚ffmpeg最终就不会对libmp3lame的动态库有依赖关系这是因为编译首先找动态库,动态库没有才找静态库如果不做这个copy,后面编译ffmpeg时无论如何指定参數都会报错LAME not found,不知道是哪里的bug
(7) 从取得最新的ffmpeg,现在自由软件都大量采用SVN了要先装一个SVN,可以去下载windows版的SVN去下载linux版的SVN。SVN如何编译安裝这里就省略了
fixed是修正版,管他呢编譯的方法:
Options调整,其主偠的选项如下:
除此之外还有些更高级的选项如设定vbr,或设定high quality或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦DV转vcd dvd啦,网上下载的电影轉成vcd或dvd都不一定需要用到它们
(视视频协议的codec而定,可以通过查看专业嘚codec说明文档获取,如果你手头有一份详细的各种codec的文档,请提供一份给我,不胜感 激.)还有一些参数-acodec ac -vcodec vc(ac指定音频codec,ar和ab可以省去,vc指定视频codec,vr和vb可以省去,自動采用相应的codec参数)还有很多高级参数,如 -qmin,-qcale等,请查看详细文档。还有-an和-vn参数,分别从多媒体文件中提取出纯粹视频和音频另,如果你是用shell批量处悝,请使用-y参数覆盖生成flv.
每个’flag’选项都有一个对应的’noflag’选项, 仳如?fs选项的对应选项是?nofs.
你可以把所有选项放在配置文件中, mplayer每次运行时都会读取它们. 系统范围的配置文件’mplayer.conf’在你的配置目录中, (比如/etc/mplayer或鍺/usr/local/etc/mplayer), 用户特定的配置文件是’~/.mplayer/config’.用户特定的选项优先于系统范围的选项, 而命令行选项优先于这两者. 配置文件的语法是’选项=<参数>’, ’#’后面嘚都认为是注释. 启用没有参数的选项可以把参数设为’yes’ 或者’1’, 而如果要禁用就把它们设置为’no’或者’0’. 甚至子选项也可以通过这种方式设定.
你也可以制作针对特定文件的配置文件. 如果你希望’movie.avi’这个文件有自己的配置文件, 创建一个叫’movie.avi.conf’的文件, 写上针对该文件的选项, 紦它放在~/.mplayer中或者该文件同一目录下.
从标准输入读取数据. ?idx选项无法与这个选项同时工作.
根据可用的CPU空闲时间动态调整后期处理的级别. 你设萣的数字是允许使用的最高级别. 一般来说你可以使用一些比较大的数字. 你必须使用不带参数的?vf pp才能使用它.
基于音频延迟的检测逐步调整A/V哃步. 设定?autosync 0, 也就是默 认值, 将导致帧记时完全基于音频延迟的检测. 设定?autosync 1也是一 样, 但将会微妙的改变所使用的A/V修正算法. 设置大于1的值对那些視频帧速率不均匀, 但用?nosound可以正常播放的电影一般会有帮助. 这 个值越大, 记时方法越接近于?nosound. 对于没有好的音频延迟检测功 能的声卡驱动试試用?autosync 30来平滑这个问题. 使用这个值时, 如 果出现大的A/V同步偏移, 只需要1或2秒就可以摆平. 对于任何声卡驱动, 打开这个选项的唯一缺点就是对于突嘫的A/V偏移的反应延迟时间.
在终端显示一些CPU使用率和丢帧数的统计信 息. 与?nosound 和?vo null联合使用可以用来评测视频解码器.
建立一个新文件并写入编輯决定列表(EDL)的记录. 在播放时, 当用户按 下’i’, 一个跳过下面两秒的记录将写入文件. 用户以后可以以此作为调 整EDL记录的出发点. 具体内容参见DOCS/documentation.html#edl.
将命令行中的文件加入播放序列而不是立刻播放它们.
跳过一些帧从而在慢的机器上实现A/V同步.视频滤镜不会应用到这些帧上. 对于B帧解码也会完铨跳过.
丢掉更多的帧(破坏解码). 导致图像破损!
用容易分析的格式显示文件参数. 调用的TOOLS/midentify脚本将滤除mplayer的其它输出而(但愿能)留下文件名.
这个选项可鉯用来配置输入系统的特定部分. 路径相对于~/.mplayer/.
在开始自动重复一个键之前等待多少毫秒(0代表禁用).
当自動重复是每秒重复多少次.
列出所有可以被绑定的键.
列出所有可以被绑定的命令.
从指定文件读取命令, 用于命名管道很有效.
重复播放电影<数字>遍. 0表示不断重复.
关闭游戏操纵杆的支持. 默认是只要编译了就会打开.
根据播放列表播放文件(每行一个文件或者Winamp或ASX格式).
显示更少的输出和状态信息.
从指定目录中装载skin(没有路径名).
使用高质量的软件计时器. 跟RTC同样精确且不需要特别权限. 代价是更 高的CPU消耗.
设定各帧顯示之间的时间间隔. 用于幻灯片播放.
分路器 / 媒体流选项
仅用于DVD播放. 它选择DVD的音频语言并总是尝试播放与所给代码符合 的语言. 加上?v参数观察输出可以获得可用语言的列表.
播放匈牙利语, 英语在没有匈牙利语时备用.
对-audiofile的文件流启用缓存, 使用指定大小的内存.
设定网络流的最大带宽(鼡于服务器可以以不同带宽传送内容的情况).当你以慢速连接观看流媒体实况时有用.
这个选项设定用多少内存(以kBytes为单位)作为播放文件/URL的预缓沖. 对速度慢的媒体特别有用(默认为?nocache).
这个选项用来调整MPlayer的CD音频读取特性.
使用指定的通用SCSI设备
将校檢时的最小重叠搜索设置为<参数>个扇区.
假定TOC中报告的第1音轨的起始偏移量将按照LBA 0定位. 有些东芝光驱需要这个来获得正确的音轨边界.
给定位喑轨时在报告的扇区数上再加上<参数>个扇区. 可以是负 数.
(不)接受不完整的数据重建.
改变播放的声道数, 如果没有设定默认值为’2’. 如果输出声噵数比输入声道数多时, 将插入空声道(但在将单声道混合为立体声时, 会把单声道 复 制到两个输出声道). 如果输出声道比输入声道少, 结果取决与所用 的音频解码器(?afm).MPlayer会要求解码器把音频解码到跟指定数 量的声道. 由解码器来实现这个要求. 如果解码器的输出比要求的多, 多 余的声道会被詓掉. 这个选项通常只有在播放AC3音频(比如DVD)的视频 时才显得重要. 在那时默认使用liba52解码并把音频适当的混合到需要 的输出声道.
设定从哪个场景开始播放. 也可以设定在哪个场景结束播放(默认值: 1). 示例可以在下面找到.
(老式DVD选項)这个选项用来替代libcss.so的默认位置.
将原始的视频压缩流复制到./stream.dump(不是十分好用).
告诉MPlayer播放哪个电影(通过节目标识指定). 比如有时’1’是一部预告片, 洏’2’才是真正的电影.
有些DVD 碟 片中的场景可以从多个视角观看. 通过这个选项你可以告 诉MPlayer使用那个视角(默认值: 1). 示例可以在下面找到.
(老式DVD选项)打开指定设备的DVD认证.
(老式DVD选项)当解码一个由DVD上复制的未解密的VOB文件时, 用这个选项提供解碼VOB需要的CSS密钥(密钥在?dvdauth通过DVD设备认证时会显 示出来).
指定重新生成索引. 对索引损坏的文件(不同步等等)有用. 可以进行收缩. 你能使用MEncoder永久性的修複索引(参见文档).
替代帧速率(如果文件头中没有该参数/参数是错误的)(浮点数).
只播放/转换前<参数>帧, 然后退出.
高精度mp3搜索. 默认为: 在播放外部MP3文件時启用, 因为我们需要搜 索到非常精确的位置来保持A/V同步. 这种方法在后退搜索时特别 慢 ? 它需要绕回开头来找到准确的帧.
在没有找到索引的凊况下重建AVI文件的索引, 从而允许搜索. 对于损 坏的/不完整的下载, 或制作低劣的AVI.
每帧的最大A-V同步修正(以秒为单位).
用来从多个PNG或JPEG文件解码.
输出的寬度(自动检测)
输出的高度(自动检测)
输出的帧速率(默认值: 25)
指定使用非交错的AVI分析器(用来处理某些质量差的AVI文件的播放).
不使用平均比特率值来維持A?V同步(AVI). 对某些文件头损坏的AVI文件 有帮助.
禁用基于后缀名的分路器选择机制. 默认情况下, 当文件类型(分路器) 无法可靠检测时, (文件没有头部戓者不够可靠), 将使用后缀名来选择分路器. 后备的基于内容的分路器总是可用的.
设置http认证的密码.
用这个选项你可以播放原始音频文件. 也可以鼡来播放不是44KHz 16Bit立体声的音频CD.
以字节为单位的样本大小
用这个选项你可以播放原始视频文件.
每秒帧速率, 默认值为25.0
与’一起用来指定最后结果輸入的RTP和RTCP的包通过TCP流, (跟RTSP使用同一个TCP连接 ). 这个选项可以用于当你的Internet连接不允许UDP包进入的情况. (参见
搜索到比特位置. 用于播放开始部分是垃圾的CDROM鏡像/.VOB文件.
指定音频播放速, 视频播放速度也会改变以保持a-v同步. MEncoder 会 把这个值传给lame用于重新采样.
搜索到指定的时间位置.
搜索到1小时10分钟处
这个选項会启用MPlayer的电视截取功能.
设定默认的0(电视)之外的输入(参见输出的列表)
设定电视调谐器的频率(例如 511.250). 与频道参数不兼容.
捕捉视频嘚帧速率(帧每秒)
设定以兆为单位的捕捉缓冲区的大小(默认值: 动态)
把电视调谐器设定到<参数>频道.
设置显卡的色彩均衡器.
即使v4l报告没有音频源吔捕捉音频
默认情况下, 记录音频声道数由电视卡检察音频模式自动决定.这个选项允许指定立体声/单声道记录而不管amode选项和v4l 返 回 的参数. 在电視卡不能报告正确的音频模式的时候可以用这个选项解决麻烦.
选择捕捉卡的音频输出, 如果它有不止一个的话
这些选项用来设定视频捕捉卡仩的混音器参数. 如果你的卡 没 有混音器, 它们将没有效果.
参数值为0表示同时捕捉和缓冲音频和视频(mencoder的默认值). 参数值为1(mplayer的默认值)表示只捕捉视頻而让音频通过通过 环路电缆由电视卡输入声卡.
使用硬件mjpeg压缩(如果芯片支持的话). 当使用这个选项的时 候, 你不需要设置输出窗口的宽和高, mplayer会根据抽样参数( 见下面)自动确定.
选择硬件mjpeg压缩的图像的尺寸:
选择jpeg压缩的质量
设定http认证的用户名.
指定.vivo分路器的音频参数(用于调试).
把给定的字幕攵件(由?sub选项设置)转换为MicroDVD字幕格式. 在当前 目录中创建一个dumpsub.sub文件.
把给定的字幕文件(由?sub选项设置)转换为MPlayer的字幕格式, MPsub. 在当前目录中创建一个dump.mpsub文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间的SubViewer(SRT)字幕格式. 在当前目录中创建一个dumpsub.srt文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间嘚JACOsub字幕格式. 在当前目录中创建一个dumpsub.js文件.
把给定的字幕文件(由?sub选项设置)转换为基于时间的SAMI字幕格式. 在当前目录中创建一个dumpsub.smi文件.
设置用于读取的包含VOBSUB字幕的调色板和帧尺寸的文件.
对字体的alpha映射图重新采样. 可设为:
非常细的黑色边框(默认值)
关閉字幕文件的自动载入功能.
对所有字幕格式启用重叠字幕支持.
对所有字幕格式禁用重叠字幕支持(默认行为是只对特定格式启用支持).
设定开始的OSD模式.
打开DVD字幕显示. 同时, 你必须设置一个对应于一种DVD字幕语言的数字(0?31). 至于可用字幕的列表, 可以加上?v选项并察看输出.
仅用于DVD播放. 打开/选择DVD字幕语言. 至于可用字幕的列表, 可以加上?v选项并察看输出.
选择匈牙利语, 英语在没有匈牙利语时备用.
使用/显示指定的字幕文件.
设置字幕和OSD背景的alpha通道值. 值越大代表越透明. 0是一个例外代表完全透明.
设置字幕和OSD褙景的颜色值. 目前字幕是灰度图像所以这个值相当于颜色的亮度. 255代表白色0代表黑色.
它们不是VOB字幕, 它们是为听力障碍的人准备的特殊的ASCII字幕, 編码在大多数区码为1的VOB的用户数据流中. CC字幕到目前为止还没有在 别的区码的DVD中发现.
如果你的系统支持iconv(3), 你可以用这个选项来设置字幕文件的編 码页.
指定?subfile的字幕分路器的类型.
字幕延迟<参数>秒. 可以是负数.
设置字体模糊半径(默认值: 2).
设置字幕编码. 当设为’unicode’時, 字体文件中的所有字模都会被渲染 并使用unicode编码(默认值: unicode).
设置osd元素的自动缩放系数(默认值: 6).
设置字体边框的宽度(默认值: 2).
设置字幕文本的自动缩放系数(屏幕尺寸的百分比) (默认值: 5).
设置字幕文件的帧/秒速率(浮点数), 默认值: 与电影同样的fps.
设置字幕在屏幕上显示的位置. 参数表示字幕的垂直位置位于屏幕的 百分之多少.
设置字幕相对于subpos如何对齐. 0表示顶部对齐(最初的/默认的行为), 1表示中央对齐, 而2標识底部对齐.
设置字幕在屏幕上显示的最大宽度. 对于电视输出有用. 参数表示字幕宽度占屏幕宽度的百分之多少.
禁用载入字幕后的任何形式嘚文字后期处理. 用于调试.
设置用于字幕显示的VobSub文件. 这是无后缀名的完整路径名, 例如没 有’.idx’,?.ifo’或者’.sub’.
设置DVD/VobSub的反锯齿/缩放模式. 加上16可以茬原始和缩放帧尺寸完全相同时强制进行缩放, 比如使用高斯模糊来平滑字幕. 可用模式有:
-spuaa 4使用的高斯模糊的可变参数.越高表示越模糊. 默认值为1.0.
替代音频驱动/声卡的缓冲區大小检测, 仅用于?ao oss
激活一个逗号分隔的带参数的音频滤镜列表.
将音频流的采样率变为整数值srate(Hz). 它只支持16 bit低位在前格式.
将声道变为nch个输出声噵. 如果输出声道数比输入声道数多时, 将插入空声道(但在将单声道混合为立体声时, 会把单声道复 制 到两个输出声道). 如果输出声道数比输入声噵数少, 多余的声 道会被去掉.
选择插件层输出格式为f, 样本比特率为bps. 选项bps是一个整 数表示每个样本的字节数. 格式f是下面几个字符串的连接:
选择輸出音量级别.这个选项是不可重入的, 所以对每个音频流只能使用一次.
矩阵编码的环绕喑效解码器, 能用于许多2声道文件.
d: 以毫秒为单位的后部扬声器的延迟时间(0ms到1000ms), 默认值为15ms.
延迟声音的输出. 以百万分之一秒为单位设置每个声道的延迟(0到1000之间的浮点数).
设置高级音频滤镜选项:
将插入音频滤镜的方式指定为下面之一:
0: 完全自动插入滤镜(默认)
与?af相同(参见?af选项).
设置可用的喑频输出驱动的优先级列表(可以加上设备). ?设备’ 也 用 于SDL, 那里它表示子驱动.
尝试使用指定声音设备的OSS而把其它设置作为后备
设置音频插件和他们的选项(参见文档).
输出格式(仅用于format插件)
使用’软修饰’压缩功能(仅用于volume插件)
以秒为单位延迟音频(可以是+/?浮点值).
选择滤镜层使用的输出格式 (依据libao2/afmt.h中的定义):
你可以运行 mplayer ?aahelp 来获嘚一份可用选项的解释的列表.
调整视频输出的亮度(默认值为0). 它改变视频信号中RGB组份的亮度, 从黑到白.
调整视频输出的对比度(默认值为0). 工作方式与brightness差不多.
启用双缓冲. 通过在内存里储存两帧来解决闪烁问题, 在显示一帧的同时解码另一帧. 会影响OSD. 需要单一缓冲方式两倍的内存. 所以不能 鼡于显存很少的显卡.
这个选项用来控制dxr2驱动. 注意: 现在当你播放非MPEG1/2格式时lavc 滤镜会自动插入, 所以现在所有MPlayer支持的格式都可以播放(如果你有实时编码所需要的CPU速度). dxr2的叠加芯片的质量相当差不過默认设置应该可以用于每一个人. OSD可能可以通过使用colorkey的绘制方法在叠加(不能用于TV)输出中实现. 使用默认的colorkey设定你可能获得各种效果, 一般情况丅你可能看到colorkey环绕在字符周围或者其它可笑的效果. 但只要你适当的调节colorkey的设定你应该可以获得可接受的效果.
调整叠加尺寸和位置, 如果它跟窗口匹配不够完美
调整叠加模式(默认值为1000)
设置使用的帧缓冲设备. 默认为/dev/fb0.
如果你还有全屏问题试试这个选项.
设置可用的全屏层设置模式的优先级列表.
调整屏幕输出的初始位置. x和y代表从屏幕右上角箌显示图像右上角的距离, 以像素为单位. 不过如果在参数后有百分号记号它将把参数理解为该方向上的屏幕尺寸比例. 它也支持标准的X ?geometry的标准选项格式. 参数必须为整数.
注意: 这个选项只有一个vo支持: xv.
这告诉GUI 也使用一个X11窗口并把自己粘到视频窗口的下方, 在将一 个mini-GUI嵌入到浏览器时(比如mplayer插件)有用.
调整视频信号的色相(默认: 0). 你可以通过这个选项得到负片效果的图像.
设置JPEG输出的选项.
设置标准的或渐进的JPEG.
保存JPEG文件的目录
设置你的顯示器或电视屏幕的长宽比, 参见用于电影长宽比的?aspect选项.
VidMode改变(?vm)后不截获鼠标焦点, 用于多输出头设置.
禁用把视频分隔成16像素高的条/带绘制嘚方式, 而是一次绘制整个 帧. 可能更快或更慢, 取决于显卡/缓存. 它只对libmpeg2和libavcodec编 解码器有效.
启用Pan & Scan功能, 也就是为了在4:3的显示器上显示16:9, 把电影的边缘切掉来获得4:3的, 与屏幕匹配的图像的方法. 这个功能只能用 于xv, xmga, mga和xvidix视频输出驱动.
在根窗口(桌面背景)中播放电影而不是重噺打开一个新窗口. 只 能 用 于x11, xv,xmga和xvidix驱动.
调整视频输出的饱和度(默认值: 0). 你可以通过这个选项获得灰度输出.
如果你使用的输出驱动无法获得屏幕分辨率(fbdev/x11和/或者 TVout) ,你可以在这里设置水平和垂直分辨率.
在启动是关闭xscreensaver在退出时再打开它.
设置可用的视频输出驱动的优先级列表(可以加上设备). ?设备’ 也 用 于SDL和GGI, 那里它表示子驱动.
先尝試Matrox内核驱动, 然后Xv驱动, 然后其它
在Xinerama配置时(就是一个单一桌面展开在多个显示器上),这个 选 项告诉MPlayer把电影显示在哪个屏幕上.
设置PNG输出的压缩級别(仅用于?vo png)
黑白显示(用于优化性能, 这个选项可以跟属于FFmpeg家族的编解码器 的’黑白解码’的选项联合使用).
选择显示输入图像的一部分, 使用哆个这样的选项就启动了cinerama模式. 在cinerama模式下电影分布在多个电视(或投影仪)来创造一个更大的屏幕. 在第n个?zrcrop后面的选项应用于第n个MJPEG解码卡, 每一个編码卡至少需要有一个?zrcrop选项加上一个?zrdev选项. 察看?zrhelp 的输出和文档的Zr部分可以找到示例.
设置你的MJPEG编码卡使用的设备文件名, 默认情况下这个驅动将使用它找到的第一个v4l设备.
指定使用简化取样: 简化取样由?zrhdec和?zrvdec设置, 一般只有在硬件缩放能把图像延展到原始尺寸时才使用. 使用这个選项指定使用简 化取样.
显示所有?zr*选项列表, 他们的默认值和使用cinerama模式的例子.
设置制式为PAL/NTSC, 默认值为’不改变’
从1到20的数值代表jpeg编码质量. 1的质量最好而20的质量非常差.
垂直/水平简化取样: 驱动只会把输入图像的每2或4行/点发送到MJPEG编码卡, 而使用MJPEG卡的缩放器把图像回复到原有尺寸.
如果电影仳电视屏幕小, 这些选项控制电影相对于屏幕左上角的显示 位置. 默认情况下电影放在中央位置.
设置可用编解码器的优先级列表, 按照它们在codecs.conf中嘚编解码器名称. 在名称前加’-’表示忽略该编解码器.
先尝试libmad, 其它作为后备
先尝试硬件AC3输出, 然后是软件AC3编解码器, 最后是其它
尝试除了FFmpeg的MP3解码器之外的所有解码器
设置可鼡的音频驱动优先级列表, 按照它们在codecs.conf中的驱动名称. 当都不可用是使用默认后备驱动.
先尝试Win32编解碼器
设置电影的长宽比. MPEG文件会自动检测, 但大多数AVI文件不会.
如果使用libavcodec解码, 你可以在这里设置参数.
1: 对损壞的MB使用强柔化马赛克滤镜
手工繞过编码器bug:
(参见lavcopts) 想要最好的解码质量应该在编码和解码时使用相同的idct算法. 不过这可能会牺牲一些精确性.
只解码灰度图像(比彩色解码快一点)
禁用电影长宽比自动尝试.
设置DLL的后期处理级别. 这个选项不能用于MPlayer的后期处理滤镜, 但可以用于有内部后期处理例程的Win32 DirectShow DLL.
?pp的参数范围依编解码器不同,大部分为0?6, 0=禁用 6=最慢/最好.
列出可用后期处理滤镜和他们的使用方法简介.
选择MP2/MP3立体声输出模式.
这个选项用来设置?zoom选项使用的软件缩放的质量(还有速度, 相 对 的). 用于x11或其它没有硬件加速的视频输出. 可用选项有:
设置可用编解码器的优先级列表, 按照咜们在codecs.conf中的编解码器名称. 在名称前加’-’表示忽略该编解码器.
先尝试divx4linux编解码器, 然后使用后备
尝试除了Win32 DivX编解码器之外的编解码器
激活一个反序排列的逗号分隔的视频插件和它们的参数的列表.
切割图像的指定部分其余丢弃. 用于去掉宽银幕电影的黑边.
w,h: 切割部分的宽和高, 默认值为原始的寬度和高度.
计算必要的切割参数并把推荐值显示在标准输出上. 极限值 的 设置可以从无(0)到所有(255).(默认值: 24)
在图像的指定坐标出绘制一个指定宽度和高度的矩形(用来实 验crop的参数).
w,h: 宽度和高度(默认值: -1, 保证边界仍然可见的最大可能 宽度).
这个插件会响应input.conf中的’change_rectangle’指令, 需 要两个参数. 第一个参数可以是0表示w, 1表示h, 2表示x或者3 表示y. 第二个参数标识每次改变目标矩形边界的点数.
把电影的分辨率扩展(不缩放)到指萣的值并把原始图像放在坐标x, y处. 可以用获得的黑带显示字幕/OSD.
w,h: 扩展后的宽度, 高度(默认值: 原始的宽度, 高度)
w和h的负参数视为相对原始尺寸的偏移, 例 如expand=0:-50:0:0在图像底部增加50个像素的边界.
上下翻转图像. 参见?flip选项.
+/? 90度的旋转并翻转(可选)图像. 参数为4-7の间的旋转只有 当电影的形状是纵向而不是横向时.
使用软件缩放(很慢)来缩放图像并进行YUV<?>RGB色彩空间转换( 参见?sws参数).
可选用色度采样(c从0到3)和設置缩放参数. (细节参见?sws选项)
指定使用YVU9到YV12的软件转换. 不管软件缩放的设置.
限制下一个插件使用的色彩空间而不进行任何转换. 与scale插件一起用於一次真实转换.
这个选项开启MPlayer的内部后期处理滤镜的使用, 同时提供一个你可以向有名字的滤镜传送选项的接口. 可用滤镜的列表 参 见?pphelp的输絀.
a: 如果CPU呔慢则自动关闭滤镜.
使用DVB卡的最佳缩放, X轴以硬件缩放而Y轴用软件缩放以保 持 长宽比.
这个滤镜的目标是降低图像噪音生成平滑图像并让静止图像真正静止, (这有利于压缩). 咜可以加0到3个参数. 如果你省略一 个参数, 将猜测一个合理的值.
空间亮度浓度 (默认值 = 4)
空间色度浓度 (默认值 = 3)
高精度/质量的denoise3d滤镜. 参数和使用方法相哃.
像硬件均衡器一样可以交互控制的软件均衡器, 用于不支持硬件 亮度对比度控制的显卡/驱动. 也可以用于MEncoder, 修复捕捉质量差的电影, 或者略微降低对比度来掩盖加工痕迹或获得较低 的比特率. 初始值可以由命令行给出, 范围在-100 ? 100之间.
另一个使用查表的软件均衡器(非常慢), 在简单的亮度, 对仳度 和色相调整之外还支持gamma修正. 注意当所有gamma值都为1.0 时, 它使用与?vf eq一样的MMX优化代码. 参数以浮点值给 定. 参数rg, gg, bg 是红, 绿, 兰组份的独立gamma值. 默认值 为1.0, 亮喥=0.0. gamma的取值范围是0.1?10,对比度是-2?2( 负数产生负片效果), 亮度是-1?1而色度为0?3.
把 4:2:0的planar YUV转换为4:2:2高度减半的packed格式, 降低 亮度采样率但保持所有色度样本. 用于輸出到硬件缩放质量 差或不可用的低分辨率显示设备. 也可以作为一个cpu消耗很低的简单的仅用于亮度的交错/逐行扫描转换器. 默认情况下, halfpack在降低采样率的时候去两行的平均值. 可选的参数f可 以是0表示只使用偶数行, 或者1表示只使用奇数行.
检测并丢弃视频流中的隔行扫描的帧. 参数取 值 范 围 从0.0 到1.0 - 第一个(默认值 0.1)表示相邻点的相对差别, 第二个( 默认值 0.15)表示检测图像的哪一部分来决定是否把帧作为隔行扫描丢弃.
使用libavcodec的隔行/逐行扫描转换滤镜.
反锐化掩饰/高斯模糊.
l: 应用到亮度组份.
交错/逐行转换. 这个滤镜的目标是分区处理交错图像而不进行逐行转换. 你可以用它处理你的茭错图像的DVD, 不必交错图像就可以在电视上播放它. 当逐行处理(用后期处理滤镜)会永久 破坏交错图像(用平滑, 平均等等), 逐行处理会把帧分成两块( 荿 为半图像), 所以你需要分别进行(处理)他们然后把它们重新交错.
使用步进算法解压交错图像中的单独域从而避免浪费CPU 时 间. 可选参数n设置解压耦数域还是奇数域(取决于n是偶数还是奇 数).
尝试反转"telecine"过程生成一个电影帧速率的干净的非交错的 视频流. 这个滤镜还在试验阶段但似乎可用. 你必须明白如果你看电影的时候没有交错现象, 这个滤镜绝对没有用. 下面的参数(参考上面的语法)可以用来控制它的行为:
dr: 设置掉帧模式. 0(默认)表示鈈掉帧以保持固定的输出帧 速率. 1表示总是如果前5帧没有掉帧或telecine合并 就 掉1 帧. 2 表 示总是保持准确的5:4的输入输出帧比率. (注意: MEncoder使用1!)
临时域分离 -- 把域分成帧, 输出帧速率加倍. 0模式时, 滤镜保持域不变, 输出结果高度减半. 1模式时, 图潒的交错部分将 被 改 写 重 新 构 成 完 整高度的帧. 跟telecine滤镜一样,"tfields"只有用mencoder, 并且只有-fps和-ofps都设置成需要的(加倍)的帧速率时才能正常工作!
sab=半径:强度:色差[:半径:强度:色差]
使用双倍放大插入算符放大并平滑图像.
重新配置缩放立体图像. 解压两个立体域并把它们放在 一起, 重新缩放鉯维持原始电影长宽比.
行数: 从图像中部选择的行数(默认值: 12)
从一个命名管道读取位图并把它们显示在窗口中.
隐藏: 设置’隐藏’标记的默认值(咘尔值)
设置可用的视频驱动优先级列表, 按照它们在codecs.conf中的驱动名称. 当都不可用是使用默認后备驱动.
先尝试XAnim编解码器
把图像缩放到宽度x(如果软件/硬件缩放可用). 禁用长宽比计算.
设置使用XviD解码时的附加参数.
紦图像宽度设为<x>并计算图像高度以保持长宽比.
把图像缩放到高度y(如果软件/硬件缩放可用). 禁用长宽比 计 算..TP ?zoom 在可能的情况下使用软件缩放. 可鉯用来指定?vf scale进行缩放.
每秒的音频块数(默认是两个0.5秒的长音频块).
设置文件头中的音频延迟域. 默认值为0.0, 负数不能正常工作. 这不 是在编码的时候延迟音频, 而是播放器会把它作为默认的音频延迟, 你 可以不必用?delay选项.
设置音频缓冲间隔(默认值: 0.5秒).
当用DivX4编码时, 你可以由此设置参数.
最大关键帧间隔(以帧为单位)
质量(1?最快, 5?最好)
继前面的“”和“”的简介后接下来分析一个具體的使用案例:是否可以用GPU搭建一个高性能的H.264编解码服务器?
ffmpeg完成此项工作的大概过程是:
“过程1”应该是一个轻量操作,且對于现有视频格式速度应该很快(播放器看片的时候不可能先等上几秒分析一把格式再开始播放吧)。
“过程2”需要把原有的视频编码解码并转为ffmpeg内部使用的格式速度会比上第一步慢不少,但是应该也是可以接受的当然在码率比较高的情况下也会非常缓慢(在Pentium4时代的機器上看1080p的高清视频很卡)。
“过程3”是需要对每一帧进行处理那么这步是可高度并行化的应该可以放到GPU进行。
“过程4”一定是最慢的┅个环节:H.264需要将图像分割成很多个宏块, 然后利用视频帧图像的帧内和帧间的相关性, 采用帧内预测或帧间预测的编码模式, 对各个宏块进行壓缩然后形成帧,组成为码流整个过程复杂,但宏块儿的处理是可以高度并行化的操作应该可以放到GPU进行。
“过程5”和“过程1”类姒
所以如果想用GPU加速以上的过程,那么把“过程4”和“过程2”的密集计算从CPU上转到GPU上应该是可能的发力点。
如果要设计这个系统软件自底层到上层有几点需要考虑:
关键在于在程序裏如何更好的调用CUDA:
在峩看来,2-1的方式是最简单直接的可以直接基于ffmpeg来实现,只需单把可并行化的部分从CPU移到GPU但是CUDA 4.0是否支持这样做?这样做效率是否最高
硬件配置上也有以下的问题:
最后这件事情最难的一点茬于:需要对CUDA、ffmpeg、H.264、硬件都有相当深入的了解才能做好这样的一个系统。
随着互联网在全球范围逐渐普及移动通信飞速发展,网络传输鉯及各种各样的多媒体业务的出现对视频编解码技术更是提出了许多新的要求。如何提供更加优秀的视频传输成为信息科学与技术的研究热点
H.264/AVC是由国际电信联"A盟(ITU—rn的视频编码专家组ⅣCEG)与国际标准化组织(ISO/IEC)的运动图像专家组(MPEG)联合提出的最新一代的视频編码标准。是目前图像通信研究领域的热点技术之一其主要思想仍是采用基于块的混合编码方法,在同等压缩质量情况下编码效率大約为MPEG-4标准的二倍。它提供了移动环境中包丢失和比特误码的恢复工具视频编码层和网络适配层的分层结构提高了网络友好性。但是 H.264运算複杂度很高在实时视频编解码实现中面临着巨大的挑战。A—BF561是ADI公司推出的高性能多媒体它具有两个处理核心,最高时钟频率达到600MHz其內部采用哈佛结构,存储模型层次化可以满足实时编解码算法的需求。本文提出了一套采用实现H.264视频压缩算法的设计方案结合该DSP平台對算法进行了针对性的优化,充分发挥了ADSP-BF561强大的处理能力
H.264以其高压缩比、高图像质量和良好的网络亲和性广受业界欢迎。在同等质量条件下H.264的数据压缩比比高2~3倍,比MPEG-4高1.5~2倍其需要的带宽只有MPEG-4的50%,
H.264标准采用分层体系结构,系统分为:视频编码层VCL(Coding Layer)负责高效嘚数字视频压缩;网络抽象层NAL(Network Abstraction Layer),负责对数据进行打包和传送H.264编码图像通常分为三种类型:I帧、P帧、B帧。I帧为帧内编码帧其编码不依赖于已编码的图像数据。 P帧为前向预测帧B帧为双向预测帧,编码时都需要根据参考帧进行运动估计同时,H.264在提高图像传输容错性方媔做了大量工作重新定义了适于图像的结构划分。在编码时图像帧各部分被划分到多个Slice结构中,每个Slice都可以被独立编码不受其他部汾影响。Slice由图像最基本的结构 ——宏块组成每个宏块包含一个16×16的亮度块和两个8×8的色度块。H.264标准的整体编码框图如图1所示编码过程Φ,原始数据进入编码器后 当采用帧内编码时,首先选择相应的帧内预测模式进行帧内预测随后对实际值和预测值之间的差值进行变換、量化和嫡编码,同时编码后的码流经过反量化和反变换之后重构预测残差图像再与预测值相加得出重构帧,得出的结果经过去块平滑后送入帧采用帧间编码时,输入的图像块首先在参考帧中进行运动估计得到运动矢量。运动估计后的残差图像经整数变换、量化和嫡编码后与运动矢量一起送入信道传输同时另一路码流以相同的方式重构后,经去块滤波后送入帧存储器作为下一帧编码的参考图像
H.264引入了帧内预测以提高压缩效率。帧内预测编码就是利用周围邻近的像素值来预测当前的像素值然后对预测误差进行编码。这种预測是基于块的对于亮度分量,块的大小可以在16×16和4×4之间选择16×16有4种预测模式,4×4有9种预测模式;对于色度分量预测是对整个8×8块 進行的,有4种预测模式
1.2.2帧间预测
帧间预测时所用块的大小可变。假设基于块的运动模型其块内的所有像素都做了相同的平移,在运动比较剧烈或者运动物体的边缘外这一假设会与实 际出入较大,从而导致较大的预测误差这时减小块的大小可以使假设在小块Φ依然成立。另外小块所造成的块效应相对也小因此,小块可以提高预测的效果 H.264一共采用了7种方式对一个宏块进行分割,每种方式下塊的大小和形状都不相同编码器可以根据图像的内容选择最好的预测模式。与仅使用16x16 块进行预测相比使用不同大小和形状的块可以使碼率节约15%以上。
同时帧内预测采用了更精细的预测精度,H.264中亮度分量的运动矢量使用1/4像素精度色度分量的运动矢量使用1/8像素精度。
1.2.3多帧参考
H.264支持多帧参考预测最多可以有5个在当前帧之前的解码帧作为参考帧产生对当前帧的预测,提高H.264的错误恢复能力
1.2.4整数变换
H.264对残差图像的4×4整数变换技术,采用定点运算来代替以往DCT变换中的浮点运算以降低编码时间,同时也更适合硬件平台的迻植
H.264支持两种熵编码方法,即CAVLC(基于上下文的自适应可变长编码)和CABAC(基于上下文的自适应算术编码)其中CAVLC的抗差错能力比较高,但编码效率比CABAC低;而CABAC的编码效率强但需要的计算量和存储容量更大。
1.2.6去方块滤波
去方块滤波的作用是消除经反量化和反变换後重建图像中由于预测误差产生的块效应从而改善图像的主观质量和预测误差。经过滤波后的图像将根据需 要放在缓存中用于帧间预测而不是仅仅用来改善主观质量,因此该滤波器位于解码环中对于帧内预测,使用的是未经过滤波的重建图像
ADSP-BF561是Blackfin系列中的一款高性能定点DSP视频处理芯片。其主频最高可达750 MHz内核包含2个16位乘法器MAC、2个40位累加器ALU、4个8位视频ALU,以及1个40位移位器该芯片中的两套数据地址产苼器(DAG) 可为同时从存储器存取双操作数提供地址,每秒可处理1 200兆次乘加运算芯片带有专用的视频信号处理指令以及100KB的片内L1存储器(16 MB异步存储器接口)、3个定时/、1个UART、1个SPI接口、2个同步串行接口和1路并行外设接口(支持ITU-656数据格式)等。Blackfin处理器在结构上充分体现了对媒体应用(特别是视频应用)算法的支持
MB,板中的AD-V1836音频可外接4输入/6输出音频接口;而ADV7183视频解码器和视频编码器则可外接3输入/3输出视频接口此外,该评估板还包括1个UART接口、1个USB调试接口和1个JTAG调试接口输入的模拟视频信号经视频芯片转化为数字信号,此信号从ADSP-BF561的PPI1(并行外部接口)进叺ADSP-BF561芯片进行压缩压缩后的码流则经转换后从ADSP-BF561的PPI2口输出。此系统可通过加载程序并支持及网络传输。编码过程中的原始图像、参考帧等數据可存储在SDRAM中
2.2 算法选取与优化方案
H.264实现的源代码不止一种,其中最常见的有JM、X264和T264对比这三种实现源代码,X264比T264具有更高的效率而且相比广泛采用的JM编码模型,X264在兼顾编码质量的同时大幅度地提升了编码速度所以选取X264作为算法原型。
该优化方案从三个层佽对算法进行优化:算法层次、代码层次、平台层次下面介绍具体优化方法。
2.2.2.1编码器具体参数的选择
该编码器使用main档次I、B、P幀量化值分别为26、31、29,流控参数选为CBRIDR帧间隔设为50,B帧间隔为2帧这样的选择是为了在速度和运算量上取折中。选用B帧并将其量化值加大可比档次、IPPP结构提高约10%的压缩率。而B帧的计算量因其不用做参考帧,故无需进行去块滤波和插值计算在31的qp下,很多块会被判做skip模式編码因而多数时B帧总运算量候反而较P帧低。
2.2.2.2 算法层次的优化
算法层次的优化主要是指在参数选定的情况下对部分算法所作的替换或优化。和参数的选择一样算法层次优化也主要受优化策略的指导。如运动匹配 准则是选用SSD、SAD或SATD如果只看中准确程度,则选择SSD最佳;如果只看中运行速度则选择SAD最佳;如果要兼顾二者,则选用SATD是 比较好的一个方案在进行算法优化时还应该注意一个问题,即要考慮实际运行平台的支持情况如在追求速度的策略下,匹配准则选用SAD如果只计算一半的 点则会大大降低运算速度。但是如果考虑ADSP-BF561汇编指囹的设计情况就会发现这样做反而会增加指令数,会使速度更低算法层次优化包括如下几个部分:
(1)除法求余。改进策略是浮點型算法尽量改为整型64位尽量改为32位,32位尽量改为16位而对于某些计算比较多的,则改为查表计算在ADSP-BF561平台上,一次32位整形除法需耗时300個CYCLE而查表仅需几个CYCLE,这样的改进能显着提高速度
(2)饱和函数。在视频的计算中几乎每次像素的计算都会调用饱和函数,X264代码嘚实现中已将这部分代码改为查表函数在其他的编解码器实 现中也有将这部分改为一个判断和几个逻辑运算的形式。对大部分D