如何使用 FFmpeg 在 Python 中为图像比较视频生成器脚本绘制一条移动线作为滑块

问题描述 投票:0回答:1

我有下面的脚本来使用 FFmpeg 生成视频滑块

您可以在此处查看示例(前 10 秒):https://youtu.be/F_wf1uHqZRA

我正在尝试复制 imgsli 的效果,就像一个人平稳地移动滑块一样

下面是我用来生成上述视频前 10 秒的代码

import subprocess

def create_comparison_video(image_a, image_b, output_video, duration=5, frame_rate=30, video_width=1920, video_height=1080):
    ffmpeg_cmd = [
        'ffmpeg',
        '-y',  # Overwrite output file if it exists
        '-loop', '1',  # Loop input images
        '-i', image_a,
        '-loop', '1',
        '-i', image_b,
        '-filter_complex',
        f"[0]scale={video_width}:{video_height}[img1];"  # Scale image A
        f"[1]scale={video_width}:{video_height}[img2];"  # Scale image B
        f"[img1][img2]blend=all_expr='if(gte(X,W*T/{duration}),A,B)':shortest=1,"  # Slide comparison
        f"format=yuv420p,scale={video_width}:{video_height}",  # Format and scale output
        '-t', str(duration),  # Duration of the video
        '-r', str(frame_rate),  # Frame rate
        '-c:v', 'libx264',  # Video codec
        '-preset', 'slow',  # Encoding preset
        '-crf', '12',  # Constant rate factor (quality)
        output_video
    ]

    subprocess.run(ffmpeg_cmd, check=True)

所以我想要一个如下图所示的滑块,它将在视频中移动

python ffmpeg python-3.10 image-slider
1个回答
0
投票

您必须创建一个细线视频,然后使用与混合相同的表达方式覆盖它。

   '-filter_complex',
        f"color=c=white:s=4x{video_height}[slider];"
        f"[0]scale={video_width}:{video_height}[img1];"
        f"[1]scale={video_width}:{video_height}[img2];"
        f"[img1][img2]blend=all_expr='if(gte(X,W*T/{duration}),A,B)':shortest=1[comp];"
        f"[comp][slider]overlay=x=W*t/{duration}:y=0,"
        f"format=yuv420p,scale={video_width}:{video_height}",
© www.soinside.com 2019 - 2024. All rights reserved.