使用FFmpeg旋转视频

558

我一直在尝试使用FFmpeg旋转视频。我正在处理竖屏模式下拍摄的iPhone视频。我知道如何使用MediaInfo(非常好的库)确定当前旋转角度,但现在我遇到了FFmpeg的问题。

根据我所读的,你需要使用vfilter选项。根据我所看到的,它应该是这个样子:

ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4

然而,我无法使它正常工作。首先,-vfilters不再存在了,现在改为-vf。其次,我遇到了以下错误:

No such filter: 'rotate'
Error opening filters!
据我所知,我拥有一个 FFmpeg 的全选项构建版本。运行 ffmpeg -filters 显示如下内容:
Filters:
anull            Pass the source unchanged to the output.
aspect           Set the frame aspect ratio.
crop             Crop the input video to x:y:width:height.
fifo             Buffer input images and send them when they are requested.
format           Convert the input video to one of the specified pixel formats.
hflip            Horizontally flip the input video.
noformat         Force libavfilter not to use any of the specified pixel formats
 for the input to the next filter.
null             Pass the source unchanged to the output.
pad              Pad input image to width:height[:x:y[:color]] (default x and y:
 0, default color: black).
pixdesctest      Test pixel format definitions.
pixelaspect      Set the pixel aspect ratio.
scale            Scale the input video to width:height size and/or convert the i
mage format.
slicify          Pass the images of input video on to next video filter as multi
ple slices.
unsharp          Sharpen or blur the input video.
vflip            Flip the input video vertically.
buffer           Buffer video frames, and make them accessible to the filterchai
n.
color            Provide an uniformly colored input, syntax is: [color[:size[:ra
te]]]
nullsrc          Null video source, never return images.
nullsink         Do absolutely nothing with the input video.

虽然拥有vfliphflip选项很好,但它们并不能满足我的需求。我需要能够旋转视频至少90度的功能。如果还有270度的选项,那就更好了。旋转选项去哪里了?


101
寻找需要进行180度旋转的人,可以使用参数“-vf"vflip,hflip"”来实现水平和竖直翻转。 - OrangeDog
7
我在想,是否可以在不解码和重新编码视频的情况下实现这一点--就像jpegtran可以无损旋转JPEG图像一样... - Mikhail T.
2
请点击此处查看旋转标志:https://dev59.com/Z2Up5IYBdhLWcg3wVWmv - Davor Josipovic
2
还可以查看如何使用FFmpeg将视频翻转180°(垂直/倒置)?的详细答案。不要忘记重置任何现有的旋转元数据(请参见链接)。 - llogan
1
我刚刚上传了一个使用“transpose=1,transpose=1”进行了180度旋转的视频到vimeo。尽管我可以播放旋转后的视频,但它被vimeo拒绝了。@OrangeDog的方法“-vf“vflip,hflip””非常有效。 - Besi
显示剩余6条评论
16个回答

3

由于FFmpeg转置命令非常缓慢,因此请使用以下命令将视频顺时针旋转90度。

快速命令(无需编码):

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

进行完整视频编码(慢命令,需要编码):

ffmpeg -i inputFile -vf "transpose=1" -c:a copy

请注意,快速命令仅添加视频元数据,这些元数据可能已经存在于许多来源中。问题在于播放视频的播放器是否尊重元数据标志 :) - jocull

3

我遇到了与OP相同的问题,即使旋转滤镜在--filters中显示为支持,仍然会出现No such filter: 'rotate'错误。

我需要按任意角度旋转,因此所有当前的答案都不适用于非90度倍数的旋转。我发现-vf的语法需要在标记周围加上空格,这与官方文档相反。

将:

-vf 'rotate=1.23'

改为:

-vf 'rotate = 1.23'

对我有效。

完整示例:

ffmpeg.exe -i input.mp4 -vf "rotate = 3.0 , crop = 1920:1080" out.mp4

值得一提的是,这是在FFmpeg版本4.3.2上进行的。


2

智能手机:以垂直格式录制了视频

我们想将其发送到一个网站,但它向左旋转了90度(逆时针,横向格式)。嗯。

ffmpeg -i input.mp4 -vf "rotate=0" output.mp4

就可以了。我又得到了垂直格式的视频。

Debian 10(Buster):ffmpeg --version

输出:

ffmpeg version 4.1.4-1~deb10u1 Copyright (c) 2000-2019 the FFmpeg developers

2

Alexy的回答对我几乎有效,除了我遇到了这个错误:

时间基准 1/90000 不被 MPEG 4 标准支持,时间基准分母的最大允许值为65535

我只需在命令中添加一个参数(-r 65535/2733),它就可以工作了。因此完整的命令是:

ffmpeg -i in.mp4 -vf "transpose=1" -r 65535/2733 out.mp4

如果你正在寻找“NTSC电影”帧率,那么24000/1001会更准确。 - Reino

1

很遗憾,Ubuntu 版本的 FFmpeg 不支持视频过滤器。

您需要使用 avidemux 或其他编辑器来实现相同的效果。

在编程方面,推荐使用 mencoder。


2
你的意思是“Ubuntu版本的ffmpeg不支持视频滤镜”吗? - user1438038
3
FYI: "FFmpeg已经回归Ubuntu 15.04 Vivid Vervet" 或者可以编译为Ubuntu。--> http://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu - l --marc l
avconv在14.04中可以使用,并且似乎完全相同。 (但对于更高版本,请务必使用FFmpeg。) - SilverWolf
Ubuntu的哪个版本?FFmpeg的哪个版本?在2011年,可能是LTS [Ubuntu 10.04](https://en.wikipedia.org/wiki/Ubuntu_version_history#Ubuntu_10.04_LTS_.28Lucid_Lynx.29)(Lucid Lynx)。 - Peter Mortensen
好的,OP已经离开了:“上次出现是在11年前”。也许其他人可以加入讨论? - Peter Mortensen

1

对我来说,它是这样工作的:

顺时针旋转

 ffmpeg -i "path_source_video.mp4" -filter:v "transpose=1" "path_output_video.mp4"

逆时针旋转

 ffmpeg -i "path_source_video.mp4" -filter:v "transpose=0,transpose=1,transpose=0" -acodec copy "path_output_video.mp4"

我使用的软件包是zeranoe

链接已损坏:*"嗯。我们无法找到该网站。我们无法连接到ffmpeg.zeranoe.com上的服务器。"* - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接