我在下面尝试过,但它只显示背景视频。
background_video = ffmpeg.input( "input.mp4")
overlay_video = ffmpeg.input(f'{frames_folder}*.png', pattern_type='glob', framerate=25)
subprocess = ffmpeg.overlay(
background_video,
overlay_video,
).filter("setsar", sar=1)
Run Code Online (Sandbox Code Playgroud)
我还尝试将帧序列组装成 .webm/.mov 视频,但透明度丢失。视频以黑色为背景。
PS - 帧大小与背景视频大小相同。所以不需要缩放。
我尝试了@Rotem的建议
首先尝试使用单个 PNG 图像
overlay_video = ffmpeg.input('test-frame.png')
Run Code Online (Sandbox Code Playgroud)
它不适用于 OpenCV 生成的帧,但适用于任何其他 png 图像。这很奇怪,当我手动查看这些框架文件夹时,它显示空白图像(链接到我的框架文件夹)。但是,如果我将这些帧转换为视频(见下文),它会正确显示我在每个帧上绘制的内容。
output_options = {
'crf': 20,
'preset': 'slower',
'movflags': 'faststart',
'pix_fmt': 'yuv420p'
}
ffmpeg.input(f'{frames_folder}*.png', pattern_type='glob', framerate=25 , reinit_filter=0).output(
'movie.avi',
**output_options
).global_args('-report').run()
Run Code Online (Sandbox Code Playgroud)
尝试从所有 PNG 图像创建视频而不叠加
它按预期工作,唯一的问题是透明度。有没有办法制作透明背景视频?我尝试了 .webm/.mov/.avi 但没有运气。
添加 .global_args('-report') 并检查日志文件
Report written to "ffmpeg-20221119-110731.log"
Log level: 48
ffmpeg version 5.1 Copyright (c) 2000-2022 …Run Code Online (Sandbox Code Playgroud)