{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from moviepy import VideoFileClip, clips_array, TextClip, CompositeVideoClip\n", "\n", "def concatenate_videos_with_labels(video_paths, labels, output_gif_path):\n", " # Load the video clips\n", " max_duration = 40 + 8\n", " clips = [VideoFileClip(f\"videos/{video_path}/-episode-0.mp4\") for video_path in video_paths]\n", " clips = [clip.subclipped(8, max_duration) for clip in clips]\n", "\n", " # Create text clips for each video\n", " text_clips = []\n", " for i, label in enumerate(labels):\n", " text_label = TextClip(\"Kinnari\", label[0], font_size=24, color='white', text_align=\"center\", horizontal_align=\"center\", vertical_align=\"top\", duration=clips[i].duration, margin=(70 - 5 * len(label[0]), 10))\n", " text_sparsity = TextClip(\"Kinnari\", f\"sparsity: {label[1]}\", font_size=20, color='white', bg_color='black', text_align=\"center\", horizontal_align=\"center\", vertical_align=\"top\", duration=clips[i].duration, margin=(40 - 2 * len(str(label[1])), 34))\n", " text_clips.append([text_label, text_sparsity])\n", "\n", " # Overlay text on each video clip\n", " labeled_clips = [\n", " CompositeVideoClip([text[1], text[0], clip.with_position((\"center\", \"bottom\"))], size=(clip.w, clip.h + 55))\n", " for clip, text in zip(clips, text_clips)\n", " ]\n", "\n", " # Arrange clips in a 2x3 grid\n", " final_clip = clips_array([[labeled_clips[0], labeled_clips[1], labeled_clips[2]],\n", " [labeled_clips[3], labeled_clips[4], labeled_clips[5]]])\n", "\n", " # Write the result to a GIF and mp4 file\n", " final_clip.write_gif(output_gif_path, fps=10)\n", " final_clip.write_videofile(output_gif_path.replace(\".gif\", \".mp4\"), fps=24, codec='libx264')\n", "\n", "\n", "# Example usage\n", "video_paths = [\"eaudedqn\", \"polyprunedqn\", \"dqn\", \"eaudecql\", \"polyprunecql\", \"cql\"]\n", "labels = [[\"EauDeDQN\", 0.83], [\"PolyPruneDQN\", 0.95], [\"DQN\", 0], [\"EauDeCQL\", 0.84], [\"PolyPruneCQL\", 0.95], [\"CQL\", 0]]\n", "output_gif_path = \"videos/eaudeqn.gif\"\n", "concatenate_videos_with_labels(video_paths, labels, output_gif_path)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from moviepy import VideoFileClip, clips_array, TextClip, CompositeVideoClip\n", "\n", "def concatenate_videos_with_labels(video_paths, labels, output_gif_path):\n", " # Load the video clips\n", " max_duration = 35\n", " clips = [VideoFileClip(f\"../../iDQN_project/Atari_i-QN/videos/{video_path}\") for video_path in video_paths]\n", " clips = [clip.subclipped(0, max_duration) for clip in clips]\n", "\n", " # Create text clips for each video\n", " text_clips = []\n", " for i, label in enumerate(labels):\n", " text_label = TextClip(\"Kinnari\", label, font_size=24, color='white', text_align=\"center\", bg_color='black', horizontal_align=\"center\", vertical_align=\"top\", duration=clips[i].duration, margin=(70 - 5 * len(label), 10))\n", " text_clips.append(text_label)\n", "\n", " # Overlay text on each video clip\n", " labeled_clips = [\n", " CompositeVideoClip([text, clip.with_position((\"center\", \"bottom\"))], size=(clip.w, clip.h + 30))\n", " for clip, text in zip(clips, text_clips)\n", " ]\n", "\n", " # Arrange clips in a 2x3 grid\n", " final_clip = clips_array([[labeled_clips[0], labeled_clips[1], labeled_clips[2]],\n", " [labeled_clips[3], labeled_clips[4], labeled_clips[5]]])\n", "\n", " # Write the result to a GIF and mp4 file\n", " final_clip.write_gif(output_gif_path, fps=10)\n", " final_clip.write_videofile(output_gif_path.replace(\".gif\", \".mp4\"), fps=24, codec='libx264')\n", "\n", "\n", "# Example usage\n", "video_paths = [\"BankHeist_iiqn.mp4\", \"Centipede_iiqn.mp4\", \"ChopperCommand_iiqn.mp4\", \"BankHeist_idqn.mp4\", \"Centipede_idqn.mp4\", \"ChopperCommand_idqn.mp4\"]\n", "labels = [\"\", \"i-IQN\", \"\", \"\", \"i-DQN\", \"\"]\n", "output_gif_path = \"videos/i-qn.gif\"\n", "concatenate_videos_with_labels(video_paths, labels, output_gif_path)" ] } ], "metadata": { "kernelspec": { "display_name": "env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 2 }