You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用folium.raster_layers.VideoOverlay叠加视频无法填满边界框的问题求助

folium.raster_layers.VideoOverlay叠加视频无法填满边界框的问题求助

我现在尝试用folium.raster_layers.VideoOverlay()把一个mp4视频叠加到folium地图上,生成的结果是DyeVideo.html,但视频并没有出现在设置的边界框bounds=[[lat_min,lon_min],[lat_max,lon_max]]里,而且也填不满红色的边界框。

先跟大家说下这个视频是怎么来的:目前它只有5个PNG帧,后续会扩展到约50个。数据来自我用FVCOM海洋数值模型模拟缅因州卡斯克湾的染料扩散,输出是[lat,lon,dyeconcentration]数组,对应一个约40000个顶点的三角形网格的每个顶点。

针对每个时间点,我用tripcolor()生成PNG文件:

tpp = ax1.tripcolor(lat,lon,triangles,dye1[t1+k,:],cmap='jet',shading= 'gouraud')

然后保存为PNG:

img1=plt.savefig('tpp'+str(k+1)+str('.png'),  format='png',dpi=400,bbox_inches='tight',pad_inches=0.0,transparent=True)

我先用folium.raster_layers.ImageOverlay测试过单张PNG的叠加效果,代码如下:

array1 = asarray(img1)
folium.raster_layers.ImageOverlay(
    image = array1, name='Dye overlay',
    bounds=[[lat_min,lon_min],[lat_max,lon_max]],
    opacity=0.6,  origin='upper',
    mercator_project=True, cross_origin=False,
    zindex=1,overlay=True, control=True,
    show=True,
).add_to(map)

单张PNG完全能准确填满红色边界框,效果很正常。

接下来我用cv2的VideoWriter把这5张PNG合成了mp4视频:

def images_to_video(image_folder, output_path, fps=0.6):
#Converts a folder of png images into a video.
    images = [img for img in os.listdir(image_folder) if img.endswith("png")]
    images.sort()  # Ensure images are in order
    frame = cv2.imread(os.path.join(image_folder, images[0]))
    width,height = frame.shape[1],frame.shape[0] # here,1984,1348
    video = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'),fps, (width,height))

    for image in images:
        img_path = os.path.join(image_folder, image)
        frame = cv2.imread(img_path)
        video.write(frame)
    
    video.release()
    print("Video Frames2png.mp4 created successfully at:", output_path)
if __name__ == "__main__":
    output_path =  '/Users/true/Python1/DyeFrames/Frames2/Frames2png.mp4'  
    images_to_video(image_folder, output_path)
map.save('DyeFrames2.html')

这个合成的Frames2png.mp4就是那5张能完美适配边界框的PNG组成的视频。

最后用folium.raster_layers.VideoOverlay()把视频叠加到地图上:

video = folium.raster_layers.VideoOverlay(
    video_url= Frames2png.mp4,  
    bounds=[[lat_min,lon_min],[lat_max,lon_max]],
    transparent=True,
    keepAspectRatio=False,  
    mercator_project=True,
    name="Dye Video",
    opacity=0.6,
    attr="Dye Overlay",
    overlay= True,
    autoplay=True,
    control=True,
    loop=True,
    playsInline=True,
)
video.add_to(map)
map.save('DyeVideo.html')

结果就是DyeVideo.html里的视频完全不能正确适配边界框,其他步骤都没问题,唯独folium.raster_layers.VideoOverlay()这一步出问题了。

我已经用ffmpeg移除了PNG和视频里多余的边框,也尝试过各种方式调整视频尺寸、修改宽高比,但边界框好像完全控制不了视频在地图上的大小和位置。我看了folium.raster_layers.py的源码也没找到头绪,想问问有没有人遇到过类似的问题,或者能给点建议,我只是想把视频正确叠加到地图上而已。

备注:内容来源于stack exchange,提问作者Ernie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:43:05