如何旋转视频并使其在电视机上播放?

如何旋转视频并使其在电视机上播放?

我有一个视频,它来自一部手机,本身可以在汤姆森电视机上播放(通过 USB),没有任何问题。视频的详细信息如下:

> avprobe 20170904_065655.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170904_065655.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2017-09-04 04:58:01
  Duration: 00:01:05.34, start: 0.000000, bitrate: 17094 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 17017 kb/s, 30 fps, 90k tbn (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
# avprobe output

视频逆时针旋转了 90 度。因此,正如指出的那样这里,我正在尝试使用以下命令行将视频顺时针旋转 90 度:

ffmpeg -i 20170904_065655.mp4 -vf "transpose=1" test.mp4

不幸的是,它旋转了视频180度。旋转视频的命令有什么问题吗?

无论如何,我能够使用 旋转视频avidemux,但保存的新视频文件 ( rotated.mp4) 无法在电视机上播放(“不支持视频格式”)。我尝试使用以下命令将文件转换为不同的格式:

avconv -i rotated.mp4 -c:v h264 -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -c:v mpeg1video -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -r 25 -vb 20M  -crf 20  output.avi
avconv -i rotated.mp4  -vcodec libx264 -acodec aac -strict -2 -b:a 384k  output.mp4

但这些都不起作用。我错过了什么?或者有没有办法在命令行上旋转视频而不改变实际格式/编码?

的是avproberotated.mp4

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, avi, from 'rotated.mp4':
  Duration: 00:00:30.77, start: 0.000000, bitrate: 6728 kb/s
    Stream #0.0: Video: h264 (High), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 30 fps, 30.02 tbn, 60.04 tbc
    Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s

使用 ffmpeg这里 在我将“LordNeckbeard”的方法应用到之后,输出avprobe如下rotated.mp4

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.82.104
  Duration: 00:00:30.86, start: 0.000000, bitrate: 10397 kb/s
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 8860 kb/s, 30 fps, 15360 tbn, 60 tbc (default)
    Stream #0.1(und): Audio: [1][0][0][0] / 0x0001, 48000 Hz, 2 channels (default)
Unsupported codec with id 0 for input stream 1
# avprobe output

现在既不支持音频也不支持视频...

答案1

ffmpeg -i input.mp4 -vf "scale=-2:1080,format=yuv420p" -c:a copy output.mp4
  • 因为电视似乎忽略了旋转的侧数据,所以您必须重新编码视频才能旋转它。ffmpeg将自动执行此操作,因此您无需执行任何特殊操作。

  • 如果仍然不起作用,请添加-profile:v baseline以增加兼容性。我建议也尝试-profile:v main省略-profile:v。如果你可以避免-profile:v,下一个最好的是主要的,最不理想的是基线但对于本地电视播放来说,这并不重要:只要有效就是最好的。

  • 规模过滤器将缩小视频,使高度为 1080,否则它将无法播放 1080x1920 尺寸的视频。

  • 使用格式过滤器将确保兼容的像素格式。您的输入已经是 YUV 4:2:0 平面的,但这只是对其他输入类型的保险。

  • -c:a copy已添加以流复制(重新复用)音频,从而避免不必要的重新编码。对于包含除 AAC 之外的音频的输入,请使用-c:a aac而不是-c:a copy

  • 电视机可能比较挑剔,因此可能需要进一步试验。要快速测试 60 秒的短片段,您可以添加-t 60

  • 标签被使用,我假设你会允许它是可接受的替代方案avconv。这些都不适用于,avconv因为我不使用它,也不熟悉它。确保使用最新版本的ffmpeg。对于 Linux,您可以ffmpeg在以下位置下载最新版本https://www.johnvansickle.com/ffmpeg/

答案2

旋转的视频可能超出了电视的功能。

旋转将分辨率从 1920x1080 更改为 1080x1920。

如果您的电视是 1080p(全高清),则它支持 1,920x1,080,如果只有 720p,则支持 1,280x720。

两种情况下,视频高度都超过最大值。您需要一台 2K 或 4K 的电视才能观看这样的视频。

相关内容