我正在寻找一种方法来旋转我的Debian Wheezy系统上使用Nexus 4拍摄的视频。视频以纵向模式拍摄,我想将它们旋转到横向模式。优选地,旋转是命令行驱动的。
我发现以前的一些问题暗示了一个很好的解决方案,但我似乎无法让它发挥作用。
首先,有一个问题: Rotating videos with FFmpeg
但它表明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
然而,这是非常慢的(上次测试花了不到3个小时的镜头超过6个小时)并且不会导致可播放的电影。我还在记录输出中出现错误,该错误表明Mb Rate>等级限制。
这里有重新编码的问题吗?在应用轮换之前,我是否应首先将视频从手机重新编码为另一种,更“可行”的编码?或者我错过了另一个重点?
答案 0 :(得分:93)
如果您只是想更改元数据,以便考虑该标志的媒体播放器播放文件,请尝试以下操作:
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
答案 1 :(得分:43)
Rotation = 0解决了我的问题。我开始以纵向模式录制视频,意识到我的错误并立即将手机转为横向以继续录制。我的iphone已将视频标记为整个视频的肖像。
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4
修正了它。
答案 2 :(得分:16)
FFmpeg
以及类似的计划change the metadata即使使用-map_metadata
选项也是如此。 exiftool
可以读取旋转矩阵和旋转标志,但无法写入。
为了获得真正的无损(包括元数据)旋转,我找不到解决方案,所以我抓住了一个十六进制编辑器(例如HxD)并分析了旋转的视频文件。
vide
以查找视频轨道的元数据trak...\tkhd
@
标志(HEX 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
根据需要更改文件,并且应该在支持旋转标记的玩家中旋转(大多数当前玩家都可以)。
如果您的视频包含立体声音频,显然不会切换,因此如果您希望声音与视频旋转(180°)匹配,则需要切换左右声道。
答案 3 :(得分:3)
您在问题中提到了几件事:
avprobe original.mp4
的输出,以便确定。答案 4 :(得分:1)
这个答案只是LordNeckbeard提供的评论摘要。
除非:
,否则无法重新编码要正确理解为此所需的步骤,首先应该阅读或至少略过这个问题:
What are the differences and similarities between ffmpeg, libav, and avconv?
总结:avconv是ffmpeg的一个分支,debian维护者选择了avconv,你必须从源代码编译正确的ffmpeg。
下一步是从源代码编译正确的ffmpeg,如下所述:
Compilation guide of ffmpeg for Debian
最后一步是使用其他帖子中的命令:
How to flip a video 180° (vertical/upside down) with FFmpeg? 要么 Rotating videos with FFmpeg
总结:ffmpeg -vfilters" rotate = 90" -i input.mp4 output.mp4