Android mp4删除旋转并旋转视频流

时间:2015-03-04 09:40:05

标签: android android-ndk ffmpeg rotation mp4

我在尝试删除Android视频的旋转值时遇到了一些问题。 由于某些原因,云中的转换工具似乎无法正确处理android的旋转值。 f / e我有一个以1080x1920录制的人像视频(所以文件的标题告诉我它实际上是1920x1080,旋转:90)。

所以现在我正在尝试将这些视频转换为实际的1080x1920格式,因为它们具有此旋转值,但我有点卡住,可能在SO和Google上使用了错误的搜索字词。

为了让事情变得清晰,我实际上已经按照这些步骤向android添加了一些ffmpeg库,当然还有一些参数更改。我正在Mac上构建这个,现在一切正常。 http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

现在以下内容,我不知道这些库是如何工作的以及如何使用它们或我实际需要的,或者我甚至根本不需要它们。

有没有人可以指出我正确的方向来解决我的问题?基本上,视频是在我的android文件系统上,我可以完全访问它们,然后在上传之前我想检查值并​​根据需要移除和旋转视频。

2 个答案:

答案 0 :(得分:1)

这假设您有一个适用于Android的ffmpeg二进制文件,例如using this

this answer on Super User。要删除旋转字段,您需要添加

-metadata:s:v:0 rotate=0

命令。如果您想保持视频/音频流的完整性,只需删除轮换信息,您只需要:

ffmpeg -i in.mp4 -c copy -metadata:s:v:0 rotate=0 out.mp4

如果您想将视频带到正确的方向,则需要transpose过滤器。

ffmpeg -i portrait.mov \
-c:v libx264 -filter:v "transpose=1" \
-c:a copy \
-metadata:s:v:0 rotate=0 out.mp4

此处,transpose=1将旋转90°。如果您的视频是颠倒的,则需要合并选项。例如,您可以使用-filter:v "transpose=2,transpose=2"

自然地,转置将重新编码视频,你将失去质量。在-crf之后添加-c:v libx264选项以设置控制质量的恒定速率因子。使用较低的值可以获得更好的质量。 23实际上是默认值,因此您根本不需要指定它,但如果视频最终看起来很糟糕,您可能需要选择低至18的内容,例如-c:v libx264 -crf 18

答案 1 :(得分:0)

与使用ndk的ffmpeg相比,使用JavaCV要容易得多。 Javacv包装了ffmpeg库,因此您可以使用纯java访问它。

关于轮换,这是视频的创建方式。 你试图通过轮换实现什么? 您可以使用这些值设置做任何您需要的事情。 如果你抓住一个框架直接需要它,只需旋转它。

请注意,自JB以来仅支持旋转值。