FFmpeg 视频旋转处理命令

前面介绍ffmpeg 一些简单视频过滤器,后面分析手机拍出来的竖屏视频为什么是横屏尺寸。

因为某种原因发现ffmpeg处理视频旋转这个特别好玩,记录一下,为了演示效果还特意做了个字母小视频(abc.mp4),后面不贴GIF了,眼快闪瞎啦。
FFmpeg 视频旋转处理命令_第1张图片

ffmpeg -vf

-vf指令是一些简单的视频过滤器。

顺时针旋转90°

ffmpeg -i abc.mp4 -vf "transpose=1" abc-r90.mp4

效果
FFmpeg 视频旋转处理命令_第2张图片

逆时针旋转90°

ffmpeg -i abc.mp4 -vf "transpose=2" abc-r270.mp4

效果
FFmpeg 视频旋转处理命令_第3张图片

水平翻转

 ffmpeg -i abc.mp4 -vf hflip hflip.mp4

效果
FFmpeg 视频旋转处理命令_第4张图片

垂直翻转

 ffmpeg -i abc.mp4 -vf vflip vflip.mp4

效果
FFmpeg 视频旋转处理命令_第5张图片

逆时针旋转90°后再水平翻转

ffmpeg -i abc.mp4 -vf "transpose=3" abc-trsps3.mp4

等效于

ffmpeg -i abc.mp4 -vf "transpose=2,hflip" r270hf.mp4

效果
FFmpeg 视频旋转处理命令_第6张图片

顺时针旋转90°后再水平翻转

也可以理解为水平翻转后逆时针旋转90°

ffmpeg -i abc.mp4 -vf "transpose=0" abc-trsps0.mp4

等效于

ffmpeg -i abc.mp4 -vf "transpose=1,hflip" r90hf.mp4

效果
FFmpeg 视频旋转处理命令_第7张图片

旋转180°

直接让右旋2次

ffmpeg -i abc.mp4 -vf "transpose=1,transpose=1" r180.mp4

效果
FFmpeg 视频旋转处理命令_第8张图片

顺时针旋转45°

使用rotate进行旋转,不改变源图像分辨率,背景为黑色。

ffmpeg -i abc.mp4 -vf rotate=PI/4 rotate45.mp4

效果
FFmpeg 视频旋转处理命令_第9张图片

MP4文件的 rotate 旋转属性

工作中发现手机拍出来的竖屏视频导出到电脑上播放也是竖屏,但是用各种软件识别出来的确是横屏尺寸(ffmpeg也是),甚是诧异。

后来才发现原来mp4文件有个 rotate 旋转 属性,常规播放器播放的时候能识别这个属性,自动转为竖屏。
FFmpeg 视频旋转处理命令_第10张图片
FFmpeg 视频旋转处理命令_第11张图片

这样的话在实际使用中会出现一些问题,比如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

总结

  1. 手机拍出来的mp4视频无论横着拍还是竖着拍,都是横屏尺寸,(试过几个品牌的安卓机是这样),手机会根据拍摄时角度设置rotate 旋转 属性,一般为90°(正常竖拍)或者270°(手机倒着拍)。播放器播放时会识别rotate 属性就行相应旋转显示。
  2. ffmpeg -i input -metadata:s:v rotate="90" -c:v copy -c:a copy out.mp4可以设置视频的rotate 旋转 属性,只影响播放显示效果,不改变实际尺寸,此命令可以不重编码音视频。
  3. ffmpeg -vf 会使用视频过滤器 切切实实地 旋转或者翻转视频图像,这个环节会重编码视频。此过滤器同样适用于普通图片文件处理。

你可能感兴趣的:(ffmpeg,音视频,ffmpeg,视频旋转)