FFMPEG:图像宽度拉伸

FFMPEG:图像宽度拉伸

我尝试在两次之间向视频添加图像,如下所示:

' ffmpeg -i video.mp4 -i image.jpg -filter_complex "[1]scale=500:500:force_original_aspect_ratio=decrease[ovrl], [0][ovrl]overlay=0:0:enable=\'between(t,0,30)\'" -pix_fmt yuv420p -c:a copy video_with_overlay.mp4'

带有图像的视频已成功创建,但图像宽度被拉伸,就像图像采用了视频纵横比一样。

我怎样才能保持相同的图像尺寸?

编辑 : 输入信息:

图像

ct_ratio -of json=c=1 input.jpg
    {
        "programs": [
    
        ],
        "streams": [
            { "width": 500, "height": 500, "sample_aspect_ratio": "1:1", "display_aspect_ratio": "5:3" }
        ]
    }

视频

ct_ratio -of json=c=1 video.mp4
{
    "programs": [

    ],
    "streams": [
        { "width": 960, "height": 720, "sample_aspect_ratio": "4:3", "display_aspect_ratio": "16:9" }
    ]
}

答案1

特区输入视频的(样本纵横比)为 4:3。
视频的分辨率为 960x720,并且视频播放器拉伸视频水平(比如 1280x720)- 显示视频的宽高比为 16:9。

SAR 属性从输入传递到输出,因此叠加的图像(SAR 1:1)在水平方向上(由视频播放器)被拉伸 4/3 倍。


第一个解决方案:
缩放叠加图像的水平尺寸3/4(并删除force_original_aspect_ratio):

ffmpeg -i video.mp4 -i image.jpg -filter_complex "[1]scale=(500*3/4):500[ovrl];[0][ovrl]overlay=0:0:enable=\'between(t\,0\,30)\'" -pix_fmt yuv420p -c:a copy video_with_overlay.mp4

该解决方案假设image.jpg是平方,并且已知视频的 SAR 为 4:3。


第二种解决方案:
将输入视频水平缩放4/3,并将 SAR 设置为1:1使用setsar过滤器:

缩放宽度sar并将 SAR 设置为 1:1:[0]scale=w=in_w*sar:h=in_h,setsar=1[vid]

ffmpeg -i video.mp4 -i image.jpg -filter_complex "[0]scale=w=in_w*sar:h=in_h,setsar=1[vid]; [1]scale=500:500:force_original_aspect_ratio=decrease[ovrl];[vid][ovrl]overlay=0:0:enable=\'between(t\,0\,30)\'" -pix_fmt yuv420p -c:a copy video_with_overlay.mp4


第二种解决方案可能更好,但文件大小可能会更大一些(并且输出视频的分辨率将大于输入视频)。

相关内容