我尝试在两次之间向视频添加图像,如下所示:
' 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
第二种解决方案可能更好,但文件大小可能会更大一些(并且输出视频的分辨率将大于输入视频)。