工作中发现手机拍出来的竖屏视频导出到电脑上播放也是竖屏,但是用各种软件识别出来的确是横屏尺寸(ffmpeg也是),甚是诧异。
后来才发现原来mp4文件有个 rotate
旋转 属性,常规播放器播放的时候能识别这个属性,自动转为竖屏。
这样的话在实际使用中会出现一些问题,比如mp4解复用或者转换为mkv等格式后,这个属性就会丢失,再把这个视频传出去就会变成一下躺下的横屏视频。
于是就在网上搜到了上面旋转视频的命令,感觉好玩就记录一下。
本以为把手机拍出来的这个视频用上面的-vf "transpose=1"
命令右旋一下就好了,结果发现转换后的变成向右躺下的横屏视频了!
原来ffmpeg旋转的时候能识别这个 Rotation
属性,如果Rotation=90
就会认为是竖屏,然后再右旋。
这样的话可以先想办法把这个Rotation
属性去掉,再进行右转90°,即
ffmpeg -i VID_000.mp4 -metadata:s:v rotate="0" -c:v copy -c:a copy r0.mp4
ffmpeg -i r0.mp4 -vf "transpose=1" out.mp4
这样的话,Rotation
属性也没了,变成了真正的竖屏视频了。
-vf "transpose=1"
命令会识别原文件的Rotation
属性,但是转换后的文件是没有这个属性的,所以也可以把这个文件 右旋再左旋,即使用了两次滤波器,可能计算量会大那么一丢丢。
ffmpeg -i VID_000.mp4 -vf "transpose=1,transpose=2" out.mp4
- 手机拍出来的mp4视频无论横着拍还是竖着拍,都是横屏尺寸,(试过几个品牌的安卓机是这样),手机会根据拍摄时角度设置
rotate
旋转 属性,一般为90°(正常竖拍)或者270°(手机倒着拍)。播放器播放时会识别rotate
属性就行相应旋转显示。 ffmpeg -i input -metadata:s:v rotate="90" -c:v copy -c:a copy out.mp4
可以设置视频的rotate
旋转 属性,只影响播放显示效果,不改变实际尺寸,此命令可以不重编码音视频。ffmpeg -vf
会使用视频过滤器 切切实实地 旋转或者翻转视频图像,这个环节会重编码视频。此过滤器同样适用于普通图片文件处理。
究其原因是因为存放时确实是按照横着来存放的,但是在mp4中会有一个参数标志着播放时需要旋转的角度。rotate。
1.如何找到标志着需要旋转的角度:
在文件格式描述符AVFormatContext的AVStream中有个源数据metadata,用来描述文件的响应信息,将其打印出来发现会有相对应操作的参数,其中就有rotate参数。
AVStream *stre
class FFmpeg:
def __init__(self, editvdo, addlogo=None, addmusic=None,
addvdohead=None, addvdotail=None):
self.editvdo = editvdo
self.a
一、如果初始视频是ios或者安卓手机拍摄的竖拍视频,那么这个视频是有90,180,270这样的旋转角度的。
比如本来宽高比是720*1080,但是安卓和iphone手机拍出的视频的宽高却是1080*720,但是在metadata里标记了rotate=90。
当你从原...
简介:在使用ffmpeg做.h264编码后可能会使用vlc播放出现了图像垂直颠倒。可能的原因:RGB图像有两种存储方式:一种是从上往下扫描;另一种是从下往上扫描。OpenCV为从上往下扫描的方式,ffmpeg可能也是从上往下的存储方式,而OpenGL/Unity中的帧缓冲数据可能是从下往上的扫描的方式,导致了图像的垂直翻转的问题。
垂直旋转:
ffmpeg -i 原视频.mp4 -vf vflip -y 左右翻转.mp4
水平左右翻转:
ffmpeg -i 原视频.mp4 -vf hflip -y 左右翻
tar -zxvf ffmpeg-4.0.tar.gz
cd ffmpeg-4.0
./configure --enable-shared --prefix=/usr/local/ffmpeg
make install