ffmpeg+mencoder视频处理问题汇总

1.如何获取视频信息

网上大多说要用ffmpeg,使用形如ffmpeg -i xxx.flv的命令从中取出视频的相关信息,如宽高,比特率,帧率等。但实际情况,感觉使用ffmpeg来获取视频信息并不方便,其一,信息挤在一行里,根据视频不同可能还有变化,对正则的书写要求较高;其二,信息不够充分,且含义标识不非常明确。

解决办法,改用mediainfo来获取视频信息。具体命令如mediainfo -f xxx.flv,-f表示显示完整的信息,这样获取的视频信息被分成3部分(General/Video/Audio),其间的信息非常详实,包括文件大小,格式,时长,具体编码,比特率,帧率,采样率,声道等应有尽有,并且格式固定,对需要的视频信息采用正则分析后保存比较方便。

安装mediainfo还需要装有libmediainfo和libzen,3个东西均可在sourceforge.net下到。例如,为使用mediainfo我共下载安装了3个deb,分别是libmediainfo0_0.7.31-1_amd64.Ubuntu_8.04.deb,libzen0_0.4.11-1_amd64.Ubuntu_8.04.deb,mediainfo_0.7.31-1_amd64.Debian_5.deb。

2.如何截图

在旧版本ffmpeg中使用的截屏/截取缩略图/生成预览图的命令形如 ffmpeg -y -i test.flv -f image2 -ss 8 -t 0.001 -s 320x240 thumb.jpg ,在SVN-r23004版下用不了,报个错就没有了结果。还有就是旧版ffmpeg执行截图命令时,如果设置一个不存在的时间点让其截屏,不会生成图片文件,而使用新命令的svn版ffmpeg截屏后,即使该时间点并不存在,也会生成一个大小为零的图片文件。

svn版下使用以下命令正常,可获取截图: ffmpeg -y -i test.flv -f mjpeg -ss 8 -vframes 1 -s 320x240 -an thumb.jpg

3.水印位置设置(使用avfilter的-vfilters参数)

本来按理说,可以使用如下的方式设置水印在视频中出现的位置:
显示在左上角overlay参数为 overlay=0:0 显示在右上角为 overlay=mainW-overlayW:0
显示在右下角为 overlay=mainW-overlayW:mainH-overlayH 显示在左下角为 overlay=0:mainH-overlayH
结果,使用上述参数添加水印,左侧的左上和左下均能正常显示,但是设置到右侧时,水印始终只能位于视频画面的中间偏右一点点,无法达到期望的效果。

解决方法是,设置一个与被处理视频宽度一致的透明水印,水印实际位于该图片的右侧,overlay参数选择左对齐方式,采用这样的方法获得右上角或右下角的水印显示效果。

4.合并视频时不能加的参数

mencoder除了编码外,还可以用于合并多个视频,如果多个视频的参数不完全一致的话,还需要在合并的同时进行编码,这样处理比较便捷。

但是,开始时使用如下命令进行合并编码操作,mencoder input1.flv input2.flv -of lavf -oac mp3lame -lameopts abr:br=32:vol=1.2:mode=3 -srate 22050 -ovc lavc -lavcopts vcodec=flv:vbitrate=384:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:vb_strategy=1 -sws 3 -vf harddup -ofps 24 -idx -o output.flv,结果生成的视频出现问题,前半部分播放input1.flv的内容时正常,播放到input2.flv时,视频播放速度加快,播放的声音也加快,音调也变高了,并且整个视频的时长显示为与input2.flv一致。

一番测试之后,发现问题原来出在lameopts的mode参数上,去掉上述命令中的“:mode=3”后视频压制一切正常。也就是说,用mencoder合并编码视频并选用mp3音频格式时,不能对其进行声道设置,要改声道得在其它步骤处理。

点赞