旋转MP4video,无需重新编码

我正在寻找一种方法来旋转在我的Debian Wheezy系统上使用我的Nexus 4拍摄的video。 这些video是以肖像模式拍摄的,我想将它们旋转到横向模式。 优选地,旋转是命令行驱动的。

我发现了几个以前的问题暗示了一个很好的解决scheme,但我似乎无法设法得到它的工作。

首先有一个问题: 用FFmpeg旋转video

但是这表明ffmpeg已经过时了,我应该使用avconv。 我发现这个问题详细说明了前进的方向。 https://askubuntu.com/questions/269429/how-can-i-rotate-video-by-180-degrees-with-avconv

这使我使用以下命令:

avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4 

但是,这是非常缓慢的(最后的testing花了我6个多小时,不到3分钟的片段),并没有导致一个可播放的电影。 logging输出中也会出现一个错误,指出Mb Rate> level limit。

这里重新编码有问题吗? 在应用旋转之前,我是否应该先将手机中的video重新编码为另一种更“可行”的编码? 还是我错过了另一个重要的一点?

提前致谢

如果您只想更改元数据,以便媒体播放器考虑该标志播放文件旋转,请尝试如下所示:

 ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4 

如在其他地方发现在stackoverflow 。

旋转= 0解决了我的问题。 我开始以纵向模式录制video,意识到我的错误,并立即将手机转向风景继续录制。 我的iPhone将video标记为整个video的肖像。

 ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4 

修复。

在你的问题中有几件事情你已经触及:

  1. 没有重新编码,几乎没有机会能够旋转。 这个规则(MJPEG编解码器)的例外已经被指出,但是你不太可能使用它,所以它超出了这个问题的范围。 我会提到这个能力的原因是JPEG可以通过元数据转换。 因此,如果您能够find具有元数据旋转的容器,则您可以旋转,但目前为止还没有(或足够广泛)的旋转。
  2. 如果花了你的时间旋转和重新编码3分钟的video,那么问题可能在于一个巨大的决议。 我的意思是巨大的 ! 你能否提供avprobe original.mp4的输出,以便能够确定。
  3. Libav与FFmpeg的辩论是非常适得其反的(你可以看到已经发布在这里fud的数量)。 基本上发生的事情是一些项目开发人员以某种方式拆分项目,事实上FFmpeg项目设法保持名称只是一种侥幸,而将一个项目称为原创项目而另一个项目是分支是没有意义的。 项目之间的差异主要是发展风格和理念。 如果您将FFmpeg描述为更多的开放源代码和Libav作为更多免费软件,那么您就不会这么说了。 有理性的人希望开发者最终会明白,也许不是合并项目,而是更大程度地合作。 当Ubuntu最初出现的时候,在每个Debian GNU / Linux聊天中,都有大量的消息,“Ubuntu不是Debian !!!!!!!”,但现在情况已经平息,双方都很满意另一个。

这个答案只是LordNeckbeard提供的意见的总结。

旋转而不编码

除非重新编码,否则无法进行旋转:

  • 你的input是MJPEG
  • 您播放时旋转

使用正确的ffmpeg进行编码旋转

为了正确理解所需的步骤,应该首先阅读或至less略读这个问题:

ffmpeg,libav和avconv有什么区别和相似之处?

总结:avconv是ffmpeg的一个分支,debian的维护者select了avconv,你必须从源代码编译正确的ffmpeg。

下一步是从源代码编译正确的ffmpeg,如下所述:

Debian的ffmpeg编译指南

最后一步是使用在其他post中find的命令:

如何用FFmpeg翻转video180°(垂直/倒置)? 或用FFmpeg旋转video

总结:ffmpeg -vfilters“rotate = 90”-i input.mp4 output.mp4