小编Yog*_*dav的帖子

如何使用 ffmpeg-python 在视频上叠加帧序列?

我在下面尝试过,但它只显示背景视频。

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)

overlay ffmpeg image-processing libav ffmpeg-python

5
推荐指数
1
解决办法
1152
查看次数

标签 统计

ffmpeg ×1

ffmpeg-python ×1

image-processing ×1

libav ×1

overlay ×1