搜索

Google
 
显示标签为“mplayer”的博文。显示所有博文
显示标签为“mplayer”的博文。显示所有博文

星期五, 三月 09, 2007

linux视频转换: mencoder

在网上发现一篇讲解利用mplayer的mencoder转换视频的文章,刚好适用我简陋的mp4转贴一下^_^,原文网址:Linux下的视频转换

制作适合在智能手机和PDA上观看的mpeg4视频。
Linux上有一个很强大的视频音频转换软件,就是Mplayer自带的mencoder (MPlayer's Movie Encoder)。mencoder就象是一台全手动的照相机,可调整的选项非常多,不过这儿只是把最常见的情况说一下。

转换avi文件,并把字幕内嵌到视频中。首先假设一下下列的条件:
文件名:video.avi
字幕文件名:video.srt
目标文件:new.avi
目标文件格式:mpeg4
目标文件视频码率:200
目标文件音频码率:64
目标文件分辨率: 320:240
制作内嵌字幕所需的字体:simsun.ttf
(上面各项都可以根据实际情况进行调整)
转换命令如下:

mencoder -oac mp3lame -lameopts vbr=3:br=64 -ovc lavc -lavcopts vcodec=mpeg4:mbd=1:vbitrate=200 -sub video.srt -o new.avi -font simsun.ttf video.avi -subcp cp936 -subfont-text-scale 4 -vf scale=320:240
各选项的含义:
-oac 编码文件的音频部分。这儿是用lame将音频encode成mp3,即mp3lame。其他可用的选项可以调用mencoder的man page查看。
-lameopts 顾名思义,即lame选项,这儿只需定义一下码率就可以了。
vbr 设定音频码率的方法,格式为vbr=<0-4>

0 cbr average bitrate
1 mt
2 rh constant bitrate Also forces CBR mode encoding on subsequent ABR presets modes.
3 abr
4 mtrh

在这儿用的是3,abr。
br 就是设定我们所需要的码率值,格式为br=<0-1024>,只能在vbr为0和3的情况下才能使用该选项。
-ovc 编码文件的视频部分。主要有以下几个选项

-ovc copy
不进行编码,只是复制视频流
-ovc divx4
编码成DivX4/DivX5
-ovc raw
编码成任意不压缩的格式(用‘-vf format’设定具体的格式)
-ovc lavc
使用libavcodec进行编码

-lavcopts 就是libavcodec的选项。
vcodec=使用指定的视频编码,下面列一下几个主要的值

h264
H.264
h263
H.263
h263p
H.263+
mpeg4
MPEG-4 (DivX 4/5)
msmpeg4
DivX 3
msmpeg4v2
MS MPEG4v2
wmv1
Windows Media Video, version 1 (又称 WMV7)
wmv2
Windows Media Video, version 2 (又称 WMV8)
rv10
旧的RealVideo格式
mpeg1video
MPEG-1 video
mpeg2video
MPEG-2 video

mbd 决定视频宏块的算法,这儿只需要mbd=1即可。其余的可以查看man page。
vbitrate 设定视频的码率(默认为800)。
-sub 设定字幕文件
-o 目标视频文件
-font 制作内嵌字幕所需字体的路径
-subcp 字幕的编码,简体中文就是cp936
-subfont-text-scale 字幕字体的大小
-vf scale 视频的分辨率
如果不需要将字幕内嵌入视频文件,只需要去掉-sub、-font、-subcp、-subfont-text-scale这几个选项。将rmvb转换成mpeg4也是如此。

星期四, 三月 08, 2007

mplayer使用技巧

在Linux下视频文件我一般都关联使用mplayer打开,~/.mplayer/config配置就显得非常重要了,先看看我的config文件内容吧:

# Write your default config options here!

ao=alsa
vo=xv
stop-xscreensaver=yes
monitoraspect=1280:800
font=/usr/share/fonts/zh_CN/simsun.ttf
subcp=GB18030
subfont-autoscale=2
subfont-text-scale=4
sub-fuzziness=1
cache=8192
ontop=yes

常见的ao和vo参考man pages即可。

如果你在使用宽屏如1280x800、1280x768之类的分辨率时,你会发现按默认配置播放时图像变形了(不过mplayer的GUI版本 gmplayer好象能自适应这个,但我不喜欢gmplayer另外再打开着一个控制窗口且非常难用,因此纯洁的mplayer就成了我的首选), monitoraspect参数配置方法就使用你的分辨率做比率就可以了。

字幕问题又来了,在播放带字幕文件的DVDRip格式的电影时按默认配置是不是又乱码了,那么接下来的几个参数就可以让你舒服地看到汉字,font配置字体文件的路径,字幕文件一般是由国人在windows下制作的,所以一般文件内容编码都是GBK(CP936),所以你可以设置成GBK或CP936,关于字符集编码的名称你可以使用iconv -l看看你的系统都支持些什么

到此为止你应该可以看到汉字了,不过字体有点太大,多行字体可能有点影响你看电影了,subfont-autoscale参数用来设置按什么方法来进行自动缩放(0-不自动缩放,1 -按电影高度缩放,2-按电影宽度缩放,3-按电影对角线缩放(默认值)),subfont-text-scale参数用来设置字幕文本的自动缩放系数 (屏幕尺寸的百分比),值范围为0~100,默认值为5。

mplayer是可以自动加载字幕文件的,但是这只是在字幕文件名跟媒体文件名相同时才起作用(后缀不同)例如这样的:

单刀直入
单刀直入-CD1.avi
单刀直入-CD1.srt
单刀直入-CD2.avi
单刀直入-CD2.srt

这样的就能自动加载字幕,通过j键切换。但像这种的就不行了:

单刀直入
单刀直入-CD1.avi
单刀直入-CD1.Chs.srt
单刀直入-CD1.Eng.srt
单刀直入-CD2.avi
单刀直入-CD2.Chs.srt
单刀直入-CD2.Eng.srt

这种情况下要使用参数具体指定一个字幕文件,其实mplayer还有一个聪明的参数可以使用的,就是
-sub-fuzziness
Adjust matching fuzziness when searching for subtitles:
0 exact match
1 load all subs containing movie name
2 load all subs in the current directory
可以使用-sub-fuzziness 1来让mplayer加载目录下的所有与电影文件相关的字幕文件,播放时可以通过j键切换。

最后这个cache主要是设置播放流媒体文件时使用的缓存大小,可以根据你机器的配置进行调整。