如题。我正在通过 ffmpeg python 库编写一个非章节脚本,并且我已经设置了一个非常基本的脚本来连接多个文件。这就是我目前所拥有的:
if (os.path.isfile(i)):
continue
with open('merge_list.txt', 'w') as file:
file.write('\n'.join([f"""file '{path}\{x}'""" for x in filelist[i]]))
ffmpeg.input('merge_list.txt', format='concat', safe=False).output(i, c='copy').run()
这工作得很好,没有任何问题,但我发现不知何故,通过这个连接操作,旋转标志仍然以某种方式保留(为什么会发生这种情况?如果两个视频中的一个有一个旋转标志,该标志会怎样?会保留为最终视频吗?)。无论哪种方式,我希望重置决赛的旋转标志或重置各个视频的旋转标志。我主要想看看这是否可以在一次操作中完成,而不是两次;这可能吗?
谢谢!
要删除旋转元数据,请
-metadata:s:v:0 rotate=0
在 后添加-c copy
。Python 语法是:
ffmpeg.input('merge_list.txt', format='concat', safe=False).output('concatenated.mp4', c='copy', **{'metadata:s:v:0': 'rotate=0'}).run()
注意:设置
rotate=0
与删除旋转元数据相同。测试:
创建 3 个合成图案,
vid2.mp4
标记为旋转 90 度:ffmpeg -y -f lavfi -i testsrc=s=192x108:r=1:d=5 vid1.mp4
ffmpeg -y -i vid1.mp4 -c copy -metadata:s:v:0 rotate=90 vid2.mp4
ffmpeg -y -f lavfi -i testsrc=s=192x108:r=1:d=5 vid3.mp4
创建
merge_list.txt
包含以下内容的文件:注意:默认情况下,FFmpeg 从第一个文件复制旋转元数据。
连接文件而不设置
rotate=0
:ffmpeg -y -f concat -safe 0 -i merge_list.txt -c copy merged.mp4
merged.mp4
视频旋转 90 度播放:与以下命令相同
rotate=0
:ffmpeg -y -f concat -safe 0 -i merge_list.txt -c copy -metadata:s:v:0 rotate=0 merged2.mp4
merged2.mp4
视频不旋转播放: