使用 ffmpeg 旋转 MP4 视频

使用 ffmpeg 旋转 MP4 视频

我有一个运行 ubuntu 的网络服务器,它可以接收来自 iPhone 应用程序的视频。显然,由于视频是 MOV 文件,因此无法在 Android 版本的应用程序上播放。我可以轻松地使用 ffmpeg 将文件转换为 MP4:

ffmpeg -i <input.mov> -vcodec copy -acodec copy <output.mp4>

这样,视频就可以在 Android 版应用中播放,但在 iOS 和 Android 上,视频都会失去旋转功能并横向播放。

现在我正在尝试使用 ffmpeg 旋转视频以便它能够正确播放:

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

但输出视频没有旋转。我尝试了使用 ffmpeg 进行旋转的各种方法,但都没有奏效。这些方法包括:

ffmpeg -i <input.mp4> -vcodec copy -acodec copy -vf "transpose=1" <output.mp4>
ffmpeg -i <input.mp4> -metadata:s:v:0 rotate=90 <output.mp4>

以及各种命令的组合,但是视频的方向从未发生任何改变。

我觉得奇怪的是 -vf 不起作用,因为上传后,服务器使用以下命令生成缩略图:

ffmpeg -y -itsoffset -1 -i <input.mp4> -vcodec mjpeg -vframes 1 -vf "transpose=1" -an -f rawvideo <output>

其运行完美,并且使缩略图朝向正确的方向。

在任何情况下我都没有收到任何错误,所以我不确定出了什么问题,只是视频没有正确旋转。

由于这需要自动完成,因此需要从命令行完成。

我刚刚尝试使用:

ffmpeg -i <input.mp4> -acodec copy -vcodec copy -vf "transpose=1" <output.mp4>

结果如下:

ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers   built on Apr  2 2013 17:02:36 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.

Seems stream 0 codec frame rate differs from container frame rate:
1200.00 (1200/1) -> 29.97 (30000/1001) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'media/test.mp4':   Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2014-02-06 00:16:52
    date            : 2014-01-25T12:44:19-0800
    encoder         : Lavf53.21.1   Duration: 00:00:01.06, start: 0.000000, bitrate: 5391 kb/s
    Stream #0.0(und): Video: h264 (Main), yuv420p, 1280x720, 5489 kb/s, 29.95 fps, 29.97 tbr, 600 tbn, 1200 tbc
    Metadata:
      creation_time   : 2014-02-06 00:16:52
    Stream #0.1(und): Audio: aac, 44100 Hz, mono, s16, 57 kb/s
    Metadata:
      creation_time   : 2014-02-06 00:16:52 File 'media/temp.mp4' already exists. Overwrite ? [y/N] y Output #0, mp4, to 'media/temp.mp4':   Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2014-02-06 00:16:52
    date            : 2014-01-25T12:44:19-0800
    encoder         : Lavf53.21.1
    Stream #0.0(und): Video: ![0][0][0] / 0x0021, yuv420p, 1280x720, q=2-31, 5489 kb/s, 600 tbn, 600 tbc
    Metadata:
      creation_time   : 2014-02-06 00:16:52
    Stream #0.1(und): Audio: aac, 44100 Hz, mono, 57 kb/s
    Metadata:
      creation_time   : 2014-02-06 00:16:52 Stream mapping:   Stream #0.0 -> #0.0   Stream #0.1 -> #0.1 Press ctrl-c to stop encoding frame=   31 fps=  0 q=-1.0 Lsize=     703kB time=1.00 bitrate=5739.6kbits/s     video:694kB audio:8kB global headers:0kB muxing overhead 0.267996%

答案1

你没有使用来自FFmpeg,但一个损坏的程序调用ffmpeg利巴夫

请下载最新版本的 ffmpeg然后再试一次。

也可以看看:谁能告诉我ffmpeg,libav和avconv之间的区别和关系?

答案2

就像是

例如:

ffmpeg -i input.mkv -vf "rotate=PI/2" output.mkv

其中PI=3,1415radians = 180度,如链接描述中所示,您可以使用每个数学公式来获得一些有趣的效果。

相关内容