我有一个很大的视频文件(2.2 GB),视频的一部分方向不正确:第一部分没问题,但第二部分旋转了 180 度(480*1066 像素)。为了解决这个问题,我使用了 FFmpeg。
我使用此命令将视频文件分成两部分
ffmpeg -i 输入.mp4 -t 00:14:36 -c 复制 1.mp4 -ss 00:14:36 -c 复制 2.mp4
我改变了第二个视频文件的元数据,以便它在读取时与第一个视频文件的方向相匹配:
ffmpeg -i 2.mp4 元数据:v:s:0“旋转=180”-c 复制 20.mp4
我使用以下命令将这两个文件合并在一起:
ffmpeg -f concat -i merge.txt -c 复制 OUTPUT-MERGED.mkv
在哪里合并.txt列出两个文件,1.mp4和20.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
这不是旋转文件部分的方法。元数据适用于整个文件。如果您拆分文件,然后更改第二部分的元数据,则在将该部分重新连接到第一部分时,这些元数据将会丢失。
对于视频的旋转部分,您唯一的选择是重新编码该部分。您需要旋转图像,然后通过插入黑条或裁剪旋转后的图像使其适合第一部分的帧大小。必须使用与第一部分相同的编码将结果重新编码为新的视频文件。然后可以将该新视频文件附加到第一部分。