mp4 和旋转 - 删除标志但设置旋转

mp4 And Rotation - Remove Flags But Set Rotation

我很难旋转我拥有的一些 mp4 文件。可能是我的理解力不够,所以如果我列出我所知道的(或认为我知道的)然后是我想要发生的事情,请原谅我。

显然,mp4 有一个正确的向上方式 - 即您希望它在观看时显示的方式。称之为方向。这不是元数据 - 它只是您作为一个人希望看到图像的方式,人的头在屏幕顶部,脚在屏幕底部。

作为元数据的一部分,mp4 文件有一个 value/parameter(我相信叫做 'rotate'),它告诉 mp4 需要旋转多少(0、90、180、270 度)以便正确定位。这 value/parameter 被一些玩家观察到,而另一些则没有。所以如果我用这个播放器播放我的视频,一切都很好(因为它观察到 value/parameter) - 但如果我用另一个播放器播放它,一切都是横向的(因为它没有观察到 value/parameter).

我想要做的是将 value/parameter 设置为 0 以正确定位 mp4,这样无论哪个播放器播放它,它都将始终以正确的方向播放(因为那些观察 value/parameter 将看到它为 0 并且什么都不做)。所以我认为我需要做的是以某种方式删除 value/parameter,然后在不使用旋转 value/parameter 的情况下将 mp4 旋转到正确的方向。我在想 FastStone Image Viewer 可以对 JPG 做些什么——无损地旋转它们而不设置旋转值。

我使用过 ffmpeg 并相信它删除了旋转 value/parameter(或将其设置为 0),因为在我使用它之后,我的视频突然出现在 Windows Explorer 中,而之前它出现在正上方。但是我现在如何在不更改旋转的情况下将其旋转到正确的方向 value/parameter?

抱歉,这是冗长而混乱的。跟我一样。

ffmpeg重新编码时会自动旋转

示例:输入的光栅大小为 1920x1080,数据顺时针旋转 90°。 运行 ffmpeg -i input.mp4 output.mp4 将导致视频根据旋转侧数据顺时针旋转 90°。输出将是 1080x1920 并移除旋转侧数据。

避免重新编码时自动旋转

使用-noautorotate输入选项:

ffmpeg -noautorotate -i input.mp4 output.mp4

无需重新编码即可更改旋转侧数据

添加 -c copy 以启用 stream copy mode and use the -metadata 选项:

ffmpeg -i input.mp4 -c copy -metadata:s:v rotate=90 output.mp4

显示旋转边数据

ffprobe -v error -select_streams v -show_entries side_data=rotation -of default=nw=1:nk=1 input.mp4