Python Folium.Raster_Layers.Videooverlay () Video nicht füllen Begrenzungsbox

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Python Folium.Raster_Layers.Videooverlay () Video nicht füllen Begrenzungsbox

by Anonymous » 02 Feb 2025, 10:00

Ich versuche, ein MP4 -Video mit
folium.raster_layers.videooverlay () auf eine Folium -Karte zu überlagern. Das Ergebnis ist ein Video, das ich Dyevideo.html nenne. Das Bild erscheint jedoch nicht im Benzkasten
auf der Karte, bounds = [[lat_min, lon_min], [lat_max, lon_max]] < /code>. Dyevideo.png, ist ein Screenshot der Videodatei dyevideo.html. Siehe https://casconorwich.org/pages/files2.html, um den Screenshot dafür zu sehen. Das Video füllt nicht das gesamte rote Begrenzungsfeld. Ich werde versuchen zu erklären, wie dieses Video erstellt wurde. Es enthält vorerst nur 5 PNG -Frames, enthält jedoch schließlich etwa 50. wird im Laufe der Zeit in den Ozean in Casco Bay, Maine, eingeführt. Die Ausgabe wird in einer Reihe von [Lat, Lon, Dyecon Centration] gegeben, wobei Lat, Lon an jedem Scheitelpunkt eines dreieckigen Netzes mit etwa 40.000 Eckpunkten verabreicht wird. Für jedes von fünfmal erstelle ich eine PNG -Datei mit TripColor () :

Code: Select all

tpp = ax1.tripcolor(lat,lon,triangles,dye1[t1+k,:],cmap='jet',shading= 'gouraud')
< /code>
Dann speichern Sie TPP als PNG -Datei: < /p>
img1=plt.savefig('tpp'+str(k+1)+str('.png'),  format='png',dpi=400,bbox_inches='tight',pad_inches=0.0,transparent=True)
< /code>
Um zu sehen, wie eines dieser 5 PNG -Bilder auf einer Folium -Karte aussehen.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)
< /code>
Einer der 5 Overlays auf der Folium -Karte ist in einem Screenshot, fountharrame1.png auf meiner Website.  Sie können sehen, dass dieses einzelne PNG -Bild genau so auf die Folium -Karte projiziert, wie sie sollte und das rote Rechteck des Begrenzungsboxs füllen. Der nächste Schritt besteht darin, ein MP4 -Video aus den 5 PNG -Bildern mit CV2 -Videowriter zu erstellen: < /p>
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')
< /code>
Das Ergebnis Frames2png.mp4 ist also nur ein Video von 5 Frames von PNG -Dateien, die jeweils perfekt in das rote Begrenzungsfeld passen. < /p>
< P> Schließlich wird das folium.raster_layers.videooverlay () verwendet, um die Videorames2png.mp4 auf die Foliumkarte zu überlagern: < /p>
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')
< /code>
Das Ergebnis ist dyevideo.html, das nicht korrekt in das rote Begrenzungsfeld passt. Alles funktioniert großartig, bis auf das Folium.raster_layers.videooverlay () 
. Ich habe auch FFMPEG verwendet, um die Größe von Frames2png.mp4 in zahlreicher Weise zu ändern, um die Größe usw. zu erhöhen, wodurch das Aspektverhältnis nach Bedarf geändert werden kann. In jedem Fall scheint der Begrenzungsbox keine Kontrolle über die Größe und Position des Videos auf der Foliumkarte zu haben. Wenn ich mir die Datei folium.raster_layers.py ansehe, sehe ich dort nichts, was helfen würde. Ich frage mich, ob andere ein ähnliches Problem hatten oder Ratschläge geben können. Ich möchte nur ein Video auf eine Karte überlagern.

Top