使用ffmpeg转换为.mp4时,从iphone捕获的视频会旋转

时间:2012-02-23 07:02:28

标签: iphone ffmpeg video-conversion .mov

当我尝试在我的应用中上传从我的iPhone捕获的视频时,服务器执行从.mov到.mp4的转换,以便可以在其他平台上播放。但问题是,当我拍摄视频(纵向)并进行转换(使用ffmpeg)然后从服务器播放时,它似乎是旋转的。有什么想法吗?

10 个答案:

答案 0 :(得分:28)

FFMPEG将默认行为更改为使用轮播元数据in 2015自动轮播视频源。这是作为v2.7发布的。

如果您的ffmpeg版本是v2.7或更高版本,但您的轮播元数据未得到尊重,则问题很可能是您正在使用基于元数据的自定义轮播。这将导致相同的逻辑应用两次,更改或取消旋转。

除了移除自定义轮播(推荐)之外,还可以选择使用-noautorotate关闭自动轮播。

ffmpeg -noautorotate -i input.mp4 ...

这也可以在一些旧版本中使用。

答案 1 :(得分:19)

您还可以执行的操作是在旋转.mov时删除QuickTime特定元数据。 这将确保视频在VLC和QuickTime中以相同的方式旋转

ffmpeg -i in.mov -vf "transpose=1" -metadata:s:v:0 rotate=0 out.mov

以下是-metadata选项(来自http://ffmpeg.org/ffmpeg.html)的文档:

-metadata[:metadata_specifier] key=value (output,per-metadata)

设置元数据键/值对。

可以给出可选的metadata_specifier来设置流或章节的元数据。有关详细信息,请参阅-map_metadata文档。

此选项会覆盖使用-map_metadata设置的元数据。也可以使用空值删除元数据。

例如,用于在输出文件中设置标题:

 ffmpeg -i in.avi -metadata title="my title" out.flv 

设置第一个音频流的语言:

 ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT

答案 2 :(得分:18)

为了完整起见,发生这种情况的原因是iPhone实际上只能以一个固定的方向捕获视频。然后,测量的方向将记录在Apple特定的元数据中。

效果是Quicktime Player在播放期间读取元数据并将视频旋转到正确的方向,但其他软件(例如VLC)不会在实际的编解码器数据中将其显示为方向。

这就是rotate=90(或vfliptranspose等)对某些人有用的原因,而不是其他人的原因。根据录制过程中相机的握持方式,所需的旋转可能是90度,180度甚至270度。如果不阅读元数据,您只需要猜测需要多少轮换,修复一个视频的更改将失败。

答案 3 :(得分:9)

根据您拥有的ffmpeg版本及其编译方式,以下其中一项应该有效......

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

...或...

ffmpeg -vf "transpose=1" -i input.mov output.mp4

答案 4 :(得分:6)

使用 vflip 过滤器

ffmpeg -i input.mov -vf "vflip" output.mp4

旋转对我不起作用,转置= 1 旋转90度

答案 5 :(得分:4)

所以 - 我也遇到了这个问题,这里我的0.02美元:

1。)有些视频有定向/旋转元数据,有些则没有:     MTS(索尼AVHCD)或我拥有的AVI - 没有方向标签。     MOV和MP4(ipad / iphone或三星galaxy note2)有它。

you can check the setting via 'exiftool -Rotation file'.
My videos often have 90 or 180 as the rotation.

2。)ffmpeg - 无论带有metadata-tag的man-page,只是似乎没有在输出文件中设置它。 - 旋转标签始终为'0'。 它正确地在输出中报告它 - 但它永远不会被exiftool报告。 - 但是嘿 - 至少它在那里而且总是0。

3.)旋转角度:     如果你想旋转+/- 90:transpose = 1顺时针90,2 cc     现在,如果你需要180度 - 只需添加此过滤器TWICE。     记住 - 这是你指定的过滤链。 :-) - 进一步了解。

4。)旋转然后缩放:     这很棘手 - 因为你很快就会违反MP4输出格式。     假设你有一个1920x1080的MOV。     旋转90°给出1080x1920     然后我们重新缩放到-1:720 - > 1080 *(720/1920)= 405水平     并且405水平不能被2 - ERROR分割。手动修复此问题。     自动修复它 - 需要一些shell脚本工作。

5.)比例然后旋转:     你可以这样做 - 但最后你得到720x1280。呸。     但这里的过滤器示例将是:     “-vf yadif = 1,scale = -1:720,transpose = 1”     这不是我想要的 - 但可以很好地工作。

全部放在一起: - 注意 - '故意错误旋转标签',只是为了演示 - 它不会在输出中显示AT ALL! 这将输入 - 并将其旋转180度,然后重新调整它 - 重置旋转标记。 - 通常iphone / ipad2可以创建180度旋转材料。 你可以把'-metadata Rotation = x'留在线上......

/ usr / bin / ffmpeg -i input-movie.mov -timestamp 2012-06-23 08:58:10 -map_metadata 0:0 -metadata Rotation = 270 -sws_flags lanczos -vcodec libx264 -x264opts me = umh - b 2600k -vf yadif = 1,transpose = 1,transpose = 1,scale = 1280:720 -f mp4 -y output-movie.MP4

我有多个设备 - 比如机顶盒,ipad2,note2,我将所有输入素材(无论是mp4,mov,MTS,AVI)转换为720p mp4,直到现在所有生成的视频都正常播放每个开发者都有(方向,声音)。

希望它有所帮助。

答案 6 :(得分:0)

为了将来自iPhone的纵向格式视频包含在网页中,我刚刚发现以下配方,以纵向显示获取.mp4文件。

步骤1:在QuickTime Player中,将文件导出为480p(我假设720p或1080p也能正常工作)。你再次得到一个.mov文件。

步骤2:在QT Player中获取新文件,然后导出到“iPad,iPhone ......”。你得到一个.m4v文件。

第3步:我正在使用Miro Video Converter,但可能任何随时可用的转换器都可以使用,以获取.mp4文件。

像(啰嗦)魅力一样。

答案 7 :(得分:0)

我用Ipad3拍摄了视频并且它是颠倒的,我想这是某些版本的所有Apple设备的常见情​​况。除此之外,3分钟长的MOV文件(1920x1090)大小约为500 Mb,这使得它无法轻松共享。我必须将它转换为MP4,并分析我在stackoverflow上找到的所有线程,这里是我使用的ffmpeg的最终代码字符串(ffmpeg ver.2.8.4):

ffmpeg -i IN.MOV -s 960x540 -metadata:s:v rotate="0" -acodec libmp3lame OUT.mp4

如果您不需要更改调整大小和音频编解码器,我想您可能只留下'-metadata:s:v rotate =“0”'。请注意,如果您调整视频大小,则宽度和高度应完全分为4。

答案 8 :(得分:0)

虽然话题很老。 希望这会对某人有所帮助:

获取ffmpeg最新版本:https://www.ffmpeg.org/download.html

对我有用的命令(翻转180度):

ffmpeg -noautorotate -i input.mp4 -filter:v "rotate=PI" output.mp4

当度数由-filter:v "PI/180*degrees"

确定时 例如,

    -filter:v "45*PI/180" 45度

这里有一个很好的解释 https://superuser.com/questions/578321/how-to-rotate-a-video-180-with-ffmpeg

答案 9 :(得分:0)

或者...仅更改现有文件中的标签:

读取当前旋转

exiftool -Rotation <file>

然后,例如:

exiftool -Rotation=180 <file>

将其设置为180