我可以使用 FFmpeg 为视频流设置旋转字段吗?

Posted

技术标签:

【中文标题】我可以使用 FFmpeg 为视频流设置旋转字段吗?【英文标题】:Can I set rotation field for a video stream with FFmpeg? 【发布时间】:2013-02-26 10:08:00 【问题描述】:

我有一个视频文件。我用 MediaInfo 实用程序打开它,我可以在这个文件中看到一个视频流,其属性为 Rotation 90(以及其他属性,如 CodecID、比特率等)。

现在我有另一个没有Rotation 90属性的视频文件,它根本没有Rotation属性。

我可以使用 ffmpeg.exe 来生成添加了 Rotation 90 属性且没有其他更改的输出文件吗?我真的不想做任何变换,只想设置 Rotation 属性。

我试过-metadata 选项无济于事。

【问题讨论】:

【参考方案1】:

这适用于最近的 FFmpeg:

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

这将stream copy 比特流,因此不执行编码。此处仅更改第一个视频流(v:0)的元数据,播放器将以旋转方式显示视频。 (并非所有玩家都会支持。)

补充说明:

如果你想“物理地”旋转视频,你必须use the transpose filter。过滤需要重新编码,因此您必须删除-c copy

如果您省略 -c copy,并且想要编码而不是仅重新混合,那么如果存在任何现有的旋转元数据,ffmpeg 将自动旋转视频。您可以使用-noautorotate 禁用此行为。

【讨论】:

我编译了最新的ffmpeg代码,运行这个命令没有错误但是视频还是没有旋转。请帮忙 @MohitChauhan 请注意,这实际上并没有旋转视频。它只是设置了旋转标志,这会导致一些玩家以旋转的方式显示它。如果您对某个命令有任何疑问,请在 Super User 上提问并显示该命令及其完整的控制台输出。 @davor 虽然这是 Apple 独有的功能,但我只知道 QuickTime。但话说回来,我不使用 Windows 或 Linux,所以我不能给出权威的答案,对不起。 @slhck 这很有趣。对真正支持这一点的玩家有什么建议吗?我目前正在尝试 VLC 和 XBMC,但似乎没有人支持这一点。尝试使用 MKV/MOV/MP4 容器。 WMP12 和 QuickTime 确实支持这一点。 @MohitChauhan 要将视频顺时针旋转 90 度(包括尺寸),请使用视频滤镜 -vf "transpose=1"(或其他转置值,例如 ***.com/a/9570992/954643)

以上是关于我可以使用 FFmpeg 为视频流设置旋转字段吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ffmpeg 设置默认流

一FFmpeg 的初尝试《FFmpeg 音视频开发基础入门到实战》

一FFmpeg 的初尝试《FFmpeg 音视频开发基础入门到实战》

一FFmpeg 的初尝试《FFmpeg 音视频开发基础入门到实战》

一FFmpeg 的初尝试《FFmpeg 音视频开发基础入门到实战》

我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写?