在不重新编码的情况下旋转MP4视频
-
21-12-2019 - |
题
我正在寻找用我的Nexus 4在我的Debian Wheezy Sytem上旋转视频的方法。视频以纵向模式拍摄,我想将它们旋转到横向模式。优选地,旋转是命令行驱动。
我发现了几个以前的问题暗示了一个良好的解决方案,但我似乎无法设法搞定它。
首先存在这个问题: 用ffmpeg
旋转视频但它表示ffmpeg过时,我应该使用avconv。我发现这个问题详细说明了前进的方式。 https://askubuntu.com/questions/269429//269429/ How-Can-i-rotate-video-by-180度 - avconv
这让我使用以下命令:
avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4
.
然而,这是痛苦的缓慢(最后一次测试花了超过6小时的镜头),不会导致可玩的电影。我还在记录输出时出错,其中陈述MB速率>级别限制。
在这里有重新编码吗?在应用旋转之前,我应该首先将来自手机的视频从我的手机重新编码到另一个,更多“可行”的编码?或者我错过了另一个重要点?
解决方案
如果您只想更改元数据,使得考虑标志播放文件的MediaPlayers旋转,请尝试类似的内容:
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
.
其他提示
旋转= 0修复了我的问题。我开始以纵向模式录制视频,实现了我的错误,并立即将手机转向景观继续录制。我的iPhone已经将视频标记为整个视频的肖像。
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4
.
固定它。
FFmpeg
和类似程序更改元数据即使是-map_metadata
选项。 exiftool
可以读取旋转矩阵和旋转标志,并且由于版本10.89也如下所述写入。
要获得真正的无损(包括元数据)旋转,我找不到一个解决方案,所以我抓住了一个十六进制编辑器(例如 hxd )并分析旋转的视频文件。
MP4的真实无损旋转:
- 打开MP4与十六进制编辑器,并搜索
vide
以查找视频轨道的元数据 - 上面的一些行(对于我的文件大多是9,有时12),您应该看到
trak...\tkhd
- 在那之间应该是一个生成的agode码(十六进制40)
- 在两行之前,旋转矩阵存储
-
没有旋转:
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40
-
180°:
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40
-
90°CW:
00 00 00 00 00 01 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40
-
90°CCW:
00 00 00 00 FF FF 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40
在需要时更改文件,它应该在支持旋转标志的播放器中旋转(最新的播放器DO)。
如果您的视频包含立体声音频,这显然没有切换,因此如果您希望声音匹配视频旋转(180°),则需要切换左右通道。
在您的问题中有几件您触动的事情:
- 几乎没有机会,无需重新汇总即可旋转。已经指出了该规则(MJPEG CODEC)的例外,但您不太可能使用它,因此超出了这个问题的范围。我会提到这种能力的原因是JPEG可以通过元数据转换。因此,如果您能找到具有元数据旋转的容器,您将能够旋转,但到目前为止,没有存在(或者广泛的方式)。
- 如果需要小时旋转和重新旋转3分钟的视频,则问题可以介绍巨大的分辨率。我的意思是巨大的!您能否提供
avprobe original.mp4
的输出,以便可以确定它。 - Libav与FFMPEG辩论非常适得其反(您可以看到在这里发布的FUD数量)。基本上发生了什么是与一些开发人员一起出现的项目的分裂,另一个是另一方面,FFMPEG项目已经设法保持名称只是一个侥幸,它没有意义调用一个项目原件和另一个叉子。项目之间的差异主要是发展风格和哲学。如果您将FFMPEG作为更多的开放来源和Libav作为更多的免费软件,则不误认为是错误的。理性人士希望,最终开发商会来到他们的感官,也许不会合并项目,而是合作到更大程度。当Ubuntu最初出来时,在每个Debian GNU / Linux聊天时,沿着“Ubuntu不是Debian !!!!!!!”的行业有很大的信息,但现在情况平静下来,双方都很满意另一个。
这个答案只是守卫恩克布德提供的评论的摘要。
旋转而不编码
除非:
,否则不再重新编码而无需重新编码- 您的输入是mjpeg
- 你在播放时旋转
使用正确的ffmpeg
旋转编码 要正确理解这一点所需的步骤,应该首先读或至少撇去这个问题:ffmpeg,libav和avconv之间的差异和相似性是什么?
摘要:avconv是ffmpeg的叉子,debian维护者选择avconv,您必须从源代码编译正确的ffmpeg。下一步将从源编译正确的ffmpeg,如下所示:
如何用ffmpeg翻转视频180°(垂直/颠倒)? 或者 用ffmpeg
旋转视频摘要:ffmpeg -vfilters“rotate= 90”-i输入.mp4 output.mp4