Pages

Thursday, 6 June 2013

linux下快速旋转视频文件

朋友发来的一段视频中,是用iPhone拍的,结果呢。。视频看上去是躺着的。。。于是呢。。。需要把脖子正向旋转90度看,或者旋转文件。
于是呢,用Promire这样的软件貌似太麻烦了。。。
于是呢,我就想到强大的全世界视频网站的奠基人——Mencoder,果然可以。
最终的格式以及参数是:
mencoder -oac mp3lame -lameopts vol=10 -ovc lavc -vf rotate=1 IMG_1357.MOV -o 90_CW_IMG_1357.mpg4
就是说,音频格式为mp3lame,音量增益到10,顺时针旋转90度。

mencoder -oac copy -ovc lavc -vf rotate=1 original.mp4 -o 90_CW_rotated.mp4

mencoder -oac copy -ovc lavc -vf rotate=2 original.mp4 -o 90_CCW_rotated.mp4
man mplayer
/rotate

rotate[=<0-7>]
              

Rotates  the  image  by 90 degrees and optionally flips it.  For
              values between 4-7 rotation is only done if the  movie  geometry
              is portrait and not landscape.


                 0    Rotate by 90 degrees clockwise and flip (default).

                 

1    Rotate by 90 degrees clockwise.

                 

2    Rotate by 90 degrees counterclockwise.

                 

3    Rotate by 90 degrees counterclockwise and flip.

还有,ffpmeg也有类似功能:
ffmpeg -vf "transpose=1" -i input.mp4 output.mp4


推荐大家看看这位仁兄的日志:
http://www.hanselman.com/blog/HowToRotateAnAVIOrMPEGFi
leTakenInPortrait.aspx

对了采用-oac copy的方式,也就是完全从原始格式里复制音频编码方式可能会没声音,至少我对mov文件转换的时候是这样的。
所以就用了 -oac mp3lame,这样就好了。

---对于dvd光盘的转换,源文件的格式为 dvd://1 -dvd-device z:/
其中z是dvd光驱号.
---对于源是ac3的音频,往往比较轻,可以在lameopts中指定vol=n(取值0-10)来提高增益(音量)
--使用-vf scale -zoom -xy 320 可以指定输出视频的宽度为320,由mencoder自行计算合适的高度
--使用-noskip 禁止编码中跳帧
--使用-ss 00:30 -endpos 60编码电影中30分钟开始的60秒内容,在编码整部电影之前,可以尝试编码片断以看看效果,并且根据结果调整参数
--对于采样率为22KHZ的音频,如果转换后的音频存在问题,可以在mencoder参数的第3部分指定-ssrate 44100进行重采样
--质量优先的情况下,对于源音频不大于128kbps的,建议保留,大于这个值的,重新编码为128kbps
--质量优先的情况下,建议视频编码不低于250kbps,300kbps可以得到相当满意的结果
--质量优先的情况下,建议保留原始的fps

更多的参数:
-------------------------------------------------------------------------------------------------------------------
mencoder.exe -srate 22050 -vf scale=208:-3 -ofps 12 -oac mp3lame -lameopts mode=3:cbr:br=24 -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vhq:vbitrate=112 "需要转换的视频文件" -o "输出的.avi" 2> 2.txt
1、-srate 22050 声音采样频率设置,现为22K
2、-vf scale=208:-3 宽度为208,高度自动调整保持比例;-vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数
3、-ofps 12 帧速率设置,现为12fps
4、-oac mp3lame 音频采用mp3编码
5、-lameopts mode=3:cbr:br=24单声道,音频码率为24kbps;-lameopts mode=0:cbr:br=24立体声,音频码率为24kbps;
还可设置音量,-lameopts mode=3:cbr:br=32:vol=1,设置范置为1~10,但不宜设得太高
6、-ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:vhq:vbitrate=112采用高质DivX视频编码,视频码率为112kbps;
-ovc xvid -xvidencopts bitrate=112采用XviD视频编码
附文:
使用mencoder制作pda使用的电影
1 mplayer和mencoder
mplayer 是最为强大和灵活的多媒体播放器软件之一,在windows平台能够和他相提并论的只有media player classic而已。mencoder是和mplayer共享同样架构和底层库的多媒体编码软件。这使得mencder有很好的兼容性,和很快的速度。大 家只要记住一点:
MPLAYER能够播放的电影,就能够通过mencoder编码。
但反过来,MPLAYER播放有问题的电影,MENCODER也无能为力。这是mencoder最强的,也是最弱的一点。
注意:在此首先提醒,mplayer和mencoder是基于命令行的软件,不过对于mencoder来说,常用的参数就那么几个,可以用简单的脚本来驱动。
2 准备工作
作为典型的unix风格的软件(也包括他的开放源代码性质),mplayer不需要运行什么安装程序,也不需要系统提供的codec,他的安装过程可以参考:
http://www5.eastgame.net/index.p ... flat&tid=483408
(不能够访问连接的,可以通过访问TLF论坛--软件讨论版--神乎奇迹的播放软体mplayer 找到,这个帖子的名字和点击量还是相当匹配的)
当按照这篇文章按照以后,能够正常的使用mplayer播放wmv9,quicktime,和大部分的rm/rmvb时候,代表mplayer和mencoder的配置完成。
3 使用mencoder进行编码
首先选择一部avi文件,假设文件名为src.avi,启动命令行,运行
mencoder.exe src.avi -o dst.avi -endpos 60 -oac copy -ovc copy
他的含义是截取src.avi的前60秒,并且不通过再编码,直接输出为dst.avi。这时候dst.avi应该是src.avi的前60秒的内容。
这个命令行参数中,有一些需要注意的地方:
1 src.avi 源文件名是src.avi
2 -o dst.avi 编码输出的文件名是dst.avi
3 -endpos 60 在第60秒的地方结束编码,这个位置也可以跟其它的全局参数(任何在mplayer播放时指定的参数,都可以在这个位置给出)
4 -oac 指定音频编码方式
5 -ovc 指定视频编码格式
无论后面的mencoder参数多么复杂,都是由这5个部分组成,这点需要牢记。而通过第3点,可以在编码中延伸出非常多的技巧。
接着,使用更加复杂一些的参数:
mencoder.exe src.avi -o dst.avi -endpos 60 -oac mp3lame -lameopts vbr=3:br=128 -ovc copy
他的含义是截取src.avi的前60秒,视频不重新编码,音频使用lame进行重新编码,指定vbr编码方式为abr,比特率为128kbps。
命令行的参数:
1 -lameopts 编码的参数
2 : 各个编码参数使用":"隔开,并列列出
这一步成功以后,试着对音频不重新编码,对视频重新编码:
mencoder.exe src.avi -o dst.avi -endpos 60 -vf scale=320:240 -oac copy -ovc xvid -xvidencopts pass=1:bitrate=300
mencoder.exe src.avi -o dst.avi -endpos 60 -vf scale=320:240 -oac copy -ovc xvid -xvidencopts pass=2:bitrate=300
和上一个不同的是,在编码前视频被scale成320*240格式,接着使用xvid进行编码,1pass,bitrate为300(1 pass的bitrate选项好像无效?),接着使用2pass编码一遍
如果mencoder报错误,首先检查以上的命令行参数是否正确,特别是空格。
通过以上3步,而且都成功的话,那么可以实际试验真正的编码格式了,我目前使用的参数为:
mencoder.exe src.avi -o dst.avi -noskip -vf scale=320:240 -oac mp3lame -lameopts vbr=3:br=128 -ovc xvid -xvidencopts pass=1:bitrate=300:keyframe_boost=20:trellis:quant_type=h263
mencoder.exe src.avi -o dst.avi -noskip -vf scale=320:240 -oac mp3lame -lameopts vbr=3:br=128 -ovc xvid -xvidencopts pass=2:bitrate=300:keyframe_boost=20:trellis:quant_type=h263
无论是电影还是动画,这个参数设置都可以得到非常理想的效果。速度方面,在音频视频都重新编码的情况下,2pass的情况下,在我的C4 2G的机器上,略小于播放时间。我的经验不足,不然2pass中第一遍pass的速度还可以提高。体积方面,一部127分钟的dvd光盘编码后大小为 340M,一部25分钟的动画,编码后结果在76M左右。
在dell x5(pxa255 300MHZ),使用betaplayer播放,除了偶尔停顿以外,整体相当流畅。
4 一些编码提示
---对于dvd光盘的转换,源文件的格式为 dvd://1 -dvd-device z:/
其中z是dvd光驱号.
---对于源是ac3的音频,往往比较轻,可以在lameopts中指定vol=n(取值0-10)来提高增益(音量)
--使用-vf scale -zoom -xy 320 可以指定输出视频的宽度为320,由mencoder自行计算合适的高度
--使用-noskip 禁止编码中跳帧
--使用-ss 00:30 -endpos 60编码电影中30分钟开始的60秒内容,在编码整部电影之前,可以尝试编码片断以看看效果,并且根据结果调整参数
--对于采样率为22KHZ的音频,如果转换后的音频存在问题,可以在mencoder参数的第3部分指定-ssrate 44100进行重采样
--质量优先的情况下,对于源音频不大于128kbps的,建议保留,大于这个值的,重新编码为128kbps
--质量优先的情况下,建议视频编码不低于250kbps,300kbps可以得到相当满意的结果
--质量优先的情况下,建议保留原始的fps
5 存在问题
希望高手多来指点迷津
--外挂字幕问题待研究
--mplayer播放一部分特定特征的rm文件会崩溃,这些文件没有办法通过mencoder编码
--mplayer播放一部分wmv8电影会出问题,mencoder对这些文件也没有办法
--源音频采样率22KHZ情况下,mencoder通过lame转换的音频会有问题,通过-ssrate可绕开这个问题
--xvid编码参数的选择,betaplayer不支持qpel和gmc,其他一些编码的参数,自己用着合适,没有更深入的研究.
----------------------------------------------

Linux下视频旋转和高清转码-万能的ffmpeg


手头有一个竖屏拍摄的视频(真诚建议不要这么做。。),导入到电脑上以后势必要把它旋转90°,可是没想到就这样简单的一个功能,尝试了N个非编软 件(openshot, pitivi,还有坑爹的lives)后竟然没有一个可以满足我的要求。要么是不支持自定义分辨率(openshot),要么是图像比例失调 (pitivi),要么是奇慢无比(lives,感觉这货是面向工作站的大型非编工具,我等屌丝驾驭不了)。最后无奈,自己google,发现还是老外靠 谱,一条命令拯救世界:
ffmpeg -i INPUT.AVI -vcodec libx264 -preset slower -crf 18 -threads 4 -vf transpose=2 -acodec copy OUTPUT.MKV
解释一下参数:
  • -i 待转码文件
  • -vcodec 选择视频编码。做过一番搜索,相比与MPEG2, MPEG4等,H.264是公认最好的高清编码格式,同时压缩率也高于MPEG4,所以我选择使用H.264(libx264)进行视频编码。
  • -preset 选择编码预设,更慢=更好的视频质量,可选取值为 ultrafast,superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo,placebo是没用的取值。
  • -crf Constant Rate Factor,0~51之间取值,0为无损,23为默认取值,取值越大,视频整体质量越差。一般建议在18~28之间取值。18已经达到视觉无损的效果,即人眼几乎察觉不到和原片的差别。
  • -threads 编码使用线程数,CPU几个核心就设置几个线程好了。
  • -vf 滤镜,我们只需要用到旋转滤镜 transpose=2,transpose滤镜可取0-3,0为逆时针90°且垂直翻转,1为顺时针旋转90°,2为逆时针旋转90°,3为顺时针90°且垂直翻转。
  • -acodec 音频编码,这里直接设置为copy保留原文件音频编码。
  • 最后设置输出文件为OUTPUT.MKV
详细参数说明可以参考FFmpeg and x264 Encoding Guide