旋转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
修复。
在你的问题中有几件事情你已经触及:
- 没有重新编码,几乎没有机会能够旋转。 这个规则(MJPEG编解码器)的例外已经被指出,但是你不太可能使用它,所以它超出了这个问题的范围。 我会提到这个能力的原因是JPEG可以通过元数据转换。 因此,如果您能够find具有元数据旋转的容器,则您可以旋转,但目前为止还没有(或足够广泛)的旋转。
- 如果花了你的时间旋转和重新编码3分钟的video,那么问题可能在于一个巨大的决议。 我的意思是巨大的 ! 你能否提供
avprobe original.mp4
的输出,以便能够确定。 - 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