视频转换 视频水印 mencoder+ffmpeg+aviysth+ffdshow (1)

印视频转换总结(win):

一.              视频转换水印资料的搜集整理如下:

二.              1.现在网络上大多都用页面中内嵌flash播放器播放flv格式的视频,原理是通过mencoder+ffmpeg+avisyth通过mencoder将上传的视频通转换为avi格式,用ffmpeg将avi格式转换为flv格式,在配合avisyth添加水印,字幕,以及格式的转换等,了解到还有一种添加水印的方式就是用ffmpeg将视频按每一帧截图,添加水印,再用mencoder将图片合成视频,比较繁琐。

三.              mencoder(隶属Linux下MPlayer播放器的一个插件)

1.转换格式:

mencoder 7.wmv -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o 7.avi

       2.字幕格式:(一般是通过.srt的文件来加字幕的)

mencoder ../file/test.mov -o ../flv/zbzbzb.flv -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:v4mv:last_pred=3 -subpos 5 -subfont
-text-scale 10 -unicode -font c:\arial.ttf -sub ../file/test.srt -lavfopts
i_certify_that_my_video_stream_does_not_use_b_frames -srate 22050

四.              ffmpeg(有很多版本,我用的是svn)

1.转换格式:

C:\ffmpeg\ffmpeg –y –i c:\avi\1.avi –ab 56 –ar 22050 –r 15 –b 320k –s 320*240 c:\1.flv

2.水印格式

①:ffmpeg -y -i 1.avs -b 320k avs.flv

②:mpeg -i /home/erlang/1.wmv -vhook ‘/usr/lib/vhook/watermark.so -m 1 -f logo.png’ test_1.mpg(我找到了vhook文件夹,但不知道如何编译入ffmpeg)

五.AviSyth(是一个滤镜,也可以叫插件,有自己的语法)

       编写格式:

LoadPlugin("C:\WINDOWS\system32\vsfilter.dll")

video =DirectShowSource("C:/ffmpeg/avi/3.avi")

logo = ImageSource("C:/ffmpeg/logo.png")

logomask = ImageSource("C:/ffmpeg/logo.png")

overlay(video,logo,mask=logomask, opacity=0.8)

Subtitle("Anterms software",size=28, align=2, first_frame=0, last_frame=1000)

a1 = FadeIO0(ImageSource("c:/1.jpg", 0, 124, 25), 7)

a2 = FadeIO0(ImageSource("c:/2.jpg", 0, 124, 25), 7)

return a1 + a2

六.在c#中的调用

Process p = new Process();//建立外部 调用 线程

p.StartInfo.FileName = @"c:\ffmpeg1\ffmpeg.exe";//要调用外部程序的绝对路径

p.StartInfo.Arguments = @"-i c:\1.avs -ab 56 -ar 22050 -b -r c:\text123.flv";//参数(这里就是FFMPEG的参数了)

p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序 启动 线程(一定为FALSE)

p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中

p.StartInfo.CreateNoWindow = false;//不创建 进程 窗口

p.Start();//启动线程

p.BeginErrorReadLine();//开始异步读取

p.WaitForExit();//阻塞等待进程结束

p.Close();//关闭进程

p.Dispose();//释放资源

七:可能出现的问题,只能转换其中几种,或者转换后播放视频倒着,或者用mencoder转换后的没法加水印,出现未找到用于流呈现的筛选器,解决方法,安装ffdshow解码器,给avisyth配置相应的参数和插件,通过avs的加载插件或者从注册表更改对应的选项即可。

附录:

一.Ffmpeg的参数内容

-formats 输出所有可用格式

-f fmt 指定格式(音频或视频格式)

-i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头

-y 覆盖已有文件

-t duration 记录时长为t

-fs limit_size 设置文件大小上限

-ss time_off 从指定的时间(s)开始, [-]hh:mm:ss[.xxx]的格式也支持

-itsoffset time_off 设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

-title string 标题

-timestamp time 时间戳

-author string 作者

-copyright string 版权信息

-comment string 评论

-album string album名

-v verbose 与log相关的

-target type 设置目标文件类型("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...)

-dframes number 设置要记录的帧数

视频选项:

-b 指定比特率(bits/s),似乎ffmpeg是自动VBR的,指定了就大概是平均比特率

-vb 指定视频比特率(bits/s)

-vframes number 设置转换多少桢(frame)的视频

-r rate 桢速率(fps)

-s size 分辨率

-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 底补齐(in pixels)

-padleft size 左补齐(in pixels)

-padright size 右补齐(in pixels)

-padcolor color 补齐带颜色(000000-FFFFFF)

-vn 取消视频

-vcodec codec 强制使用codec编解码方式('copy' to copy stream)

-sameq 使用同样视频质量作为源(VBR)

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file

-newvideo 在现在的视频流后面加入新的视频流

高级视频选项

-pix_fmt format set pixel format, 'list' as argument shows all the pixel formats supported

-intra 仅适用帧内编码

-qscale q 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好

-loop_input 设置输入流的循环数(目前只对图像有效)

-loop_output 设置输出视频的循环数,比如输出gif时设为0表示无限循环

-g int 设置图像组大小

-cutoff int 设置截止频率

-qmin int 设定最小质量

-qmax int 设定最大质量

-qdiff int 量化标度间最大偏差 (VBR)

-bf int 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

音频选项:

-ab 设置比特率(单位:bit/s,也许老版是kb/s)

-aframes number 设置转换多少桢(frame)的音频

-aq quality 设置音频质量 (指定编码)

-ar rate 设置音频采样率 (单位:Hz)

-ac channels 设置声道数

-an 取消音频

-acodec codec 指定音频编码('copy' to copy stream)

-vol volume 设置录制音量大小(默认为256)

-newaudio 在现在的音频流后面加入新的音频流

字幕选项:

-sn 取消字幕

-scodec codec 设置字幕编码('copy' to copy stream)

-newsubtitle 在当前字幕后新增

-slang code 设置字幕所用的ISO 639编码(3个字母)

Audio/Video 抓取选项:

-vc channel 设置视频捕获通道(只对DV1394)

-tvstd standard 设置电视标准 NTSC PAL(SECAM)

二.Mencoder参数

-of lavf:是输出文件格式,这里不是flv而是lavf,是因为flv属于libavformat;
-oac oac=output audio codec 编码音频部分。这儿是mp3lame。
-oac mp3lame 音频采用mp3编码
-lameopts abr:br=56:
br是指设置音频比特率为56(比特率:每秒钟输出的音频大小,单位kb/s);
#-lameopts mode=3:cbr:br=32:vol=1,mode=3是音体声,mode=0单声道;  vol=1-10控制音量
# -lameopts 顾名思义,即lame选项,这儿只需定义一下码率就可以了。
vbr 设定音频码率的方法
0  cbr average bitrate
1  mt
2  rh   constant bitrate Also forces CBR mode encoding on subsequent ABR presets modes.
3 abr
4 mtrh
br 就是设定我们所需要的码率值,格式为br=<0-1024>,只能在vbr为0和3的情况下才能使用该选项。
-ovc lavc #ovc=output video codec ;
-ovc 编码文件的视频部分。主要有以下几个选项
-ovc copy        不进行编码,只是复制视频流
-ovc divx4       编码成DivX4/DivX5
-ovc raw         编码成任意不压缩的格式(用‘-vf format’设定具体的格式)
-ovc lavc        使用libavcodec进行编码
-lavcopts vcodec=flv:vbitrate=350:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1
# 对lavc进行一些设置,vcodec=flv:指定视频编码器为flv
# vbitrate=500:指定视频比特率为500(低品质为150kb/s,中等品质为400kb/s,高品质为700kb/s)
# mbd:宏模块选择算法,值为0~2默认为0,值越大转换越缓慢,但在品质和文件大小方面有好处;
# mv0:编译每个宏模块并选择最好的一个,当mbd=0时无效;
# v4mv:会稍微增加品质,mbd>0时效果更明显;
# trell:量子化网格搜索,对每8×8block找到最优化编码;
# cbp:只能和trell一期使用,评估失真的图像块编码;
# last_pred=3:与上一帧相比的移动数量预测,值为0~99,1~3比较合适,大于3时对品质的提高已经无关紧要,但却会降低速度;
# dia=4:移动搜索范围,值为-99~6,对于快速转换,-1是个不错的值,如果不是很重视速度,可以考虑2~4;
# cmp=6:值为1~2000,默认为0,设置用于全象素移动预算的比较函数
# vb_strategy=1:对动作很大的场景会有帮助,对有些视频,设置vmax_b_frames会有损品质,加上vb_strategy=1会好点。
-vf scale=512:-3 #5-vf表示视频格式,scale是缩放,512:-3表示强制将宽度设置为512,高度写为-3表示保持高宽比
-ofps 12 帧速率设置,现为12fps
-srate 22050 声音采样频率设置,现为22K

 mencoder进行操作的常用方法: mencoder infile.* -o outfile.* [-ovc 目标视频格式] [-oac 目标音频格式] [-of 目标文件格式]

   1.转换成flv文件: mencoder infile.* -o outfile.flv -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 22050
                                mencoder infile.rmvb -o outfile.flv -vf scale=-3:150 -ofps 12 -oac mp3lame -ovc xvid -xvidencopts bitrate=112
   2.转换成avi文件: mencoder infile.* -o outfile.avi -of avi -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600

   3.转换成wmv文件(复杂写法,其中高级参数可以省去): mencoder infile.* -o outfile.wmv -of lavf -ofps 25 -oac mp3lame -lameopts cbr:preset=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=768:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=320:240 -srate 22050 -sws 9 -subcp cp936 -subpos 0 -subalign 0 -subfont-text-scale 3 -lavfopts i_certify_that_my_video_strea

   其中-ovc,-oac和-of是必须的,-ovc是指定视频codec,指定了ovc之后通常带一个该codec的opt参数,-oac是指定音频codec,也会在其后带一个codec的opt参数.可以指定细节以决定视频音频质量和转换速率.具体的细节可以参看专业的技术文档.


猜你喜欢

转载自blog.csdn.net/liangsongjun/article/details/7865575
今日推荐