我在尝试删除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文件系统上,我可以完全访问它们,然后在上传之前我想检查值并根据需要移除和旋转视频。
答案 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以来仅支持旋转值。