.Net 玩视频
2012-02-22 15:16 熬夜的虫子 阅读(4528) 评论(6) 编辑 收藏 举报由于平台的特点 用.net做视频网站的不多 作为兴趣研究下
背景
经常上土豆 youku的朋友可能会发现播放的视频格式大多是flv格式的 那么我们先来扫盲下flv
FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。
更多参考百科 http://baike.baidu.com/view/364757.htm
但是用户手上的资源未必都是flv格式,所以需要格式转换。这里介绍2款工具
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
更多参考百科 http://baike.baidu.com/view/856526.htm
mencoder 是一款命令行方式的视频处理软件,mencoder支持几乎所有的格式的视频转换,可以将任意格式转换到任意格式,转换功能可以说是相当强大。目前市面上流行的格式转换器,都是基于mencoder开发的GUI,比如暴风转码,格式工厂等。可以说转换器能办到的,mencoder都能办到,但mencoder能办到的,转换器就不一定能办到了。
更多参考百科 http://baike.baidu.com/view/3353694.htm
不过FFmpeg和在mencoder在应用领域还是有些区别
网摘:
1,在实际的使用当中,ffmpeg 在 Redhat与Suse Linux 下面都运行正常,但是我在Suse Linux 10 上面压缩rm与 rmvb 视频时,压出来的片子声音不正常。在其他参数都完全一样的情况下使用Redhat 压缩,居然是正常的。看来 Suse 对企业应用比较好,但是对多媒体的应用(偏向个人方面)还是 Redhat 比较好一些。
2,ffmpeg 也可以压缩视频,不过,效果可是比mencoder 差好些。所以,基本上我只使用 ffmpeg 来抓取视频中的图片。可以使用 ffmpeg-php 这个开源项目程序来抓取任何一帧的图片,这样,我们就可以很方便地大致了解这个视频的内容了。
3,ffmpeg 压缩一个 wmv 文件,可能使用不到一分钟,但是 mencoder 却压缩了好几分钟,由于 mencoder 需要计算更多东西,所以,需要花更多的时间。
4,mencoder 支持的视频格式非常多,如常见的 wmv,avi,mpg,rm,rmvb,mov,3gp,mp4 等,大约有上百种,不过,我还无法一一测试,估计也是没有问题的。而ffmpeg 不支持 rm与rmvb 格式。
5,做为视频压缩,对机器的要求是比较高的,对系统资源的占用比较大,主要是对CPU与磁盘IO要求高。前两天压缩一个视频,使用 宝德 PR2700D 用了4分钟,使用宝德 PR4800 用了12分钟,使用一台 Dell 2950 上面的 Vmware 虚拟机使用了大约8分钟。综合来看,最好是CPU强一些,内存不要小于2GB,磁盘的IO要快一些。
实践
上述2款工具都有对应的win平台版本 那么我们只需要用.net启动软件进程就可以了 很简单 需要花功夫的是对工具各种复杂参数的把握
先上个简单的demo
我们选举一个很简单的视频 windows自带的示例视频 可以在目录C:\WINDOWS\clock.avi找到
每秒换一个数字
ffmpeg 压缩一个 视频 文件,可能使用不到一分钟,但是 mencoder 却压缩了好几分钟,由于 mencoder 需要计算更多东西,所以,需要花更多的时间。ffmpeg 也可以压缩视频,不过,效果可是比mencoder 差好些。并且ffmpeg对","wmv", "rmvb", "rm" 的效果不是很好,所以考虑的性能以及功能,"asf", "avi", "mpg", "3gp", "mov" 类型和截图功能使用ffmepg,"wmv", "rmvb", "rm"类型使用mencoder实现
所以我们这里用ffmpeg来转换
到输出目录中确认下我们转换的视频是否可用
我们再试试截图功能
我们截取2秒后和4秒后的 按照视频进度 应该截取到3和5 这2个数字
OK 貌似很顺利
下面给出具体的参数配置
ffmpeng
使用: ffmpeg [[infile options] -i infile]... {[outfile options] outfile}... -L 查看许可证 -h 显示说明 -version 显示版本 -formats 显示可用的格式,编解码器,协议... -f fmt 输出格式 -i filename 输入文件名称 -y 覆盖输出文件 -t duration 设定录音时间 -fs limit_size 设置限制文件大小 -ss time_off 设置开始时间偏移 -itsoffset time_off 设置输入时间偏移 -title string 设置标题 -timestamp time 设定时间戳记 -author string 设置作者 -copyright string 设置版权 -comment string 设置评论 -album string 设置相册 -v verbose 控制总额日志 -target type 指定的目标文件类型 ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...) -dframes number 设置数据帧的记录 -scodec codec 强制字幕编码器 ('copy' to copy stream) -newsubtitle 添加一个新的字幕流,以目前的输出流 -slang code 设置ISO 639语言代码(3 字母)目前字幕高级视频设置: -vframes number 设置视频帧记录 -r rate 设置帧比率(Hz value, fraction or abbreviation) -s size 设置帧大小 (WxH or abbreviation) -aspect aspect 设置的长宽比 (4:3, 16:9 or 1.3333, 1.7777) -croptop size 设置顶端作频率的大小 (in pixels) -cropbottom size 设置底端作频率的大小 (in pixels) -cropleft size 设置左端作频率的大小 (in pixels) -cropright size 设置右端作频率的大小(in pixels) -padtop size 设置顶端频率的大小 (in pixels) -padbottom size 设置底部频率的大小(以像素) -padleft size 设置左频率的大小(以像素) -padright size 设置右频率的大小(以像素) -padcolor color 设置颜色的频率(十六进制000000通过ffffff ) -vn 禁用视频 -vcodec codec 强制视频编码器 ('copy' to copy stream) -sameq 使用相同视频质量作为源(implies VBR) -pass n 选择通过数量(1 or 2) -passlogfile file 选择两个通过日志文件名称 -newvideo 添加一个新的视频流,以目前的输出高级视频流选项: -pix_fmt format 设置像素格式 -intra 使用内部帧 -vdt n 放弃起增点 -qscale q 使用固定的视频量化规模(VBR) -qdiff q 最大值之间的差异量化表(VBR) -rc_eq equation 设置速率控制方程 -rc_override override 速率控制特定间隔覆盖 -me method 设置运动估计方法 -me_threshold 运动估计起增点 -strict strictness 如何严格按照标准 -deinterlace 反交错图片 -psnr 计算的PSNR压缩帧 -vstats 转储视频编码统计文件 -vhook module 插入视频处理模块 -intra_matrix matrix 指定内部矩阵系数 -inter_matrix matrix 指定跨矩阵系数 -top top=1/bottom=0/auto=-1 场首要 -dc precision 内直流精度 -vtag fourcc/tag 强制视频四字符代码/标记 -qphist 显示 QP 柱形统计图 -vbsf bitstream filter 流过滤器的音频选项: -aframes number 设置音频帧记录 -ab bitrate 设置音频比特率(在kb的速率/秒) -aq quality 设定质量的音频质量(编解码器的具体) -ar rate 设定音频采样率(赫兹) -ac channels 指定数目的音频通道 -an 禁用音频 -acodec codec 强制音频编码 ('copy' to copy stream) -vol volume 改变声音大小 (256=normal) -newaudio 增加一个新的音频流到当前输出流 -alang code 设置ISO 639语言代码(3 字母)目前字幕高级音频设置: -atag fourcc/tag 强制音频四字符代码/标记 -absf bitstream filter 过滤比特流子标题选项 -scodec codec 强制子标题编码('copy' to copy stream) -newsubtitle 增加一个新的子标题流到当前输出流 -slang code 设置ISO 639语言代码(3 字母)目前字幕音频流/视频抓取设置: -vd device 设置音频抓取设备 -vc channel 设置视频抓取频道(DV1394 only) -tvstd standard 设置电视标准 (NTSC, PAL (SECAM)) -ad device 设置音频设备 -grab format 设置抓取用的格式 -gd device 设置高级抓取设备选项: -map file:stream[:syncfile:syncstream] 设置输入数据流 -map_meta_data outfile:infile 设置中继数据信息从输入文件到输出文件 -benchmark 添加基准时间 -dump 转储每个输入数据包 -hex 当转储数据包时,也转储载重量 -re 在本帧读入。比率 -loop_input 回路(目前只有工程与图片) -loop_output 多少次循环的输出格式,支持循环( 0循环永远) -threads count 线程计数 -vsync 视频同步方法 -async 音频同步方式 -vglobal 全球视频头存储类型 -copyts 复制时间戳 -shortest 最快完成输入编码 -dts_delta_threshold转换过程中数据包的大小, 即数据缓冲区的大小按照本意, 数据缓冲区越大转换速度越快, 但这与系统的运行状态有关 -ps size 设置数据包大小 -muxdelay seconds 设定最高解复用器-解码延迟 -muxpreload seconds 设置初始解复用器-解码延迟
Mencoder 参考http://www.ylmf.net/ubuntu/qa/2010122918996.html
附demo 随笔之作 不工整比较丑陋就不直接贴项目了 未加密 有兴趣的同学直接反编译看吧
demo下载 https://files.cnblogs.com/dubing/MaoyaVideo.rar
ffmpeng和mencoder的工具在网上搜一下 然后按照程序里的目录存放就可以了
原创作品允许转载,转载时请务必以超链接形式标明文章原始出处以及作者信息。 作者:熬夜的虫子 点击查看:博文索引 |
|