如何旋转视频文件的特定部分?

如何旋转视频文件的特定部分?

我有一个很大的视频文件(2.2 GB),视频的一部分方向不正确:第一部分没问题,但第二部分旋转了 180 度(480*1066 像素)。为了解决这个问题,我使用了 FFmpeg。

  1. 我使用此命令将视频文件分成两部分

    ffmpeg -i 输入.mp4 -t 00:14:36 -c 复制 1.mp4 -ss 00:14:36 -c 复制 2.mp4

  2. 我改变了第二个视频文件的元数据,以便它在读取时与第一个视频文件的方向相匹配:

    ffmpeg -i 2.mp4 元数据:v:s:0“旋转=180”-c 复制 20.mp4

  3. 我使用以下命令将这两个文件合并在一起:

    ffmpeg -f concat -i merge.txt -c 复制 OUTPUT-MERGED.mkv

在哪里合并.txt列出两个文件,1.mp420.mp4

问题是,这不起作用;当 ffmpeg 最后合并两个文件时,似乎没有考虑到更改第二个视频文件的元数据,结果与输入视频文件完全相同。

有没有办法做我想做的事情而不必对这两个文件中的一个进行编码?

输入文件包含这些信息:

Metadata:
  rotate          : 90
  creation_time   : 2021-05-07T09:26:43.000000Z
  handler_name    : VideoHandle
Side data:
  displaymatrix: rotation of -90.00 degrees

这两个单独的文件包含以下信息:

1.mp4

Metadata:
  rotate          : 90
  handler_name    : VideoHandle
Side data:
  displaymatrix: rotation of -90.00 degrees

20.mp4

Metadata:
      rotate          : 180
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -180.00 degrees

答案1

这不是旋转文件部分的方法。元数据适用于整个文件。如果您拆分文件,然后更改第二部分的元数据,则在将该部分重新连接到第一部分时,这些元数据将会丢失。

对于视频的旋转部分,您唯一的选择是重新编码该部分。您需要旋转图像,然后通过插入黑条或裁剪旋转后的图像使其适合第一部分的帧大小。必须使用与第一部分相同的编码将结果重新编码为新的视频文件。然后可以将该新视频文件附加到第一部分。

答案2

您可以使用诸如ffplay或 之类的播放器来完成此操作mpv

ffplay -vf "rotate=180*PI/180:enable='between(t,3,6)'" input.mp4
  • 由于它只是在播放时旋转,因此无需重新编码即可旋转视频。不生成输出文件。

  • 单位为弧度。将 的第一个实例更改180为您想要的任何旋转度数。对于 180 度,您只需使用 即可rotate=PI

  • 请参阅有关旋转过滤器enable选项了解更多信息。

相关内容