# video_montage
Easily create a video montage (either a sequence or a grid of videos)
# Installing
Install:
```
pip install video_montage
```
# Usage
Before running, you must have a prepare an input video folder with videos the following structure, eg.
```
<INPUT_VIDEO_FOLDER_PATH>
├── <video1>.mp4
├── <video2>.mp4
└── ...
```
`video_grid_montage`: Create a grid of videos (all playing at the same time)
```
video_grid_montage --help
usage: video_grid_montage --input_video_folder_path INPUT_VIDEO_FOLDER_PATH
[--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH]
[--output_video_filename OUTPUT_VIDEO_FILENAME]
[--max_n_videos MAX_N_VIDEOS]
[--max_duration_seconds MAX_DURATION_SECONDS]
[--fps FPS] [--num_per_row NUM_PER_ROW]
[--overlay_filename] [-h]
optional arguments:
--input_video_folder_path INPUT_VIDEO_FOLDER_PATH
(Path, required)
--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH
(Path, default=.)
--output_video_filename OUTPUT_VIDEO_FILENAME
(str, default=2023-10-20_00-16-32_video_grid_montage.mp4)
--max_n_videos MAX_N_VIDEOS
(Union[int, NoneType], default=None)
--max_duration_seconds MAX_DURATION_SECONDS
(Union[int, NoneType], default=None)
--fps FPS (Union[int, NoneType], default=None)
--num_per_row NUM_PER_ROW
(Union[int, NoneType], default=None)
--overlay_filename (bool, default=False)
-h, --help show this help message and exit
```
`video_sequence_montage`: Create a sequence of videos (playing one at a time sequentially)
```
video_sequence_montage --help
usage: video_sequence_montage --input_video_folder_path INPUT_VIDEO_FOLDER_PATH
[--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH]
[--output_video_filename OUTPUT_VIDEO_FILENAME]
[--max_n_videos MAX_N_VIDEOS] [--fps FPS]
[--overlay_filename] [-h]
optional arguments:
--input_video_folder_path INPUT_VIDEO_FOLDER_PATH
(Path, required)
--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH
(Path, default=.)
--output_video_filename OUTPUT_VIDEO_FILENAME
(str, default=2023-10-20_00-17-06_video_sequence_montage.mp4)
--max_n_videos MAX_N_VIDEOS
(Union[int, NoneType], default=None)
--fps FPS (Union[int, NoneType], default=None)
--overlay_filename (bool, default=False)
-h, --help show this help message and exit
```
# Example Usage
```
(video_montage_env) ➜ video_montage git:(main) ✗ tree openai_rubiks_cube
openai_rubiks_cube
├── 2023-10-07_20-04-36_openai_rubiks_cube.gif
├── 2023-10-07_20-05-13_openai_rubiks_cube.gif
├── 2023-10-07_20-05-48_openai_rubiks_cube.gif
├── 2023-10-07_20-07-27_openai_rubiks_cube.gif
├── 2023-10-07_20-08-02_openai_rubiks_cube.gif
└── 2023-10-07_20-11-18_openai_rubiks_cube.gif
0 directories, 6 files
(video_montage_env) ➜ video_montage git:(main) ✗ video_grid_montage --input_video_folder_path openai_rubiks_cube
Moviepy - Building video 2023-10-07_20-16-08_video_grid_montage.mp4.
Moviepy - Writing video 2023-10-07_20-16-08_video_grid_montage.mp4
Moviepy - Done !
Moviepy - video ready 2023-10-07_20-16-08_video_grid_montage.mp4
```
![example_video_montage](https://github.com/tylerlum/video_montage/assets/26510814/7cd94a59-efe1-4b2b-bfc8-0aa6254d8bd7)
You can also add the `--overlay_filename` argument to add the clip's filename to each video clip.
Raw data
{
"_id": null,
"home_page": "https://github.com/tylerlum/video_montage",
"name": "video-montage",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "python, video, montage, grid, sequence",
"author": "Tyler Lum",
"author_email": "tylergwlum@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/e4/f3/d3968516dd5680a5ccddfd671375be8cfbbaf8ca7a49bec79c17a030c35a/video_montage-0.1.0.tar.gz",
"platform": null,
"description": "# video_montage\n\nEasily create a video montage (either a sequence or a grid of videos)\n\n# Installing\n\nInstall:\n\n```\npip install video_montage\n```\n\n# Usage\n\nBefore running, you must have a prepare an input video folder with videos the following structure, eg.\n\n```\n<INPUT_VIDEO_FOLDER_PATH>\n\u251c\u2500\u2500 <video1>.mp4\n\u251c\u2500\u2500 <video2>.mp4\n\u2514\u2500\u2500 ...\n```\n\n`video_grid_montage`: Create a grid of videos (all playing at the same time)\n\n```\n\nvideo_grid_montage --help\n\nusage: video_grid_montage --input_video_folder_path INPUT_VIDEO_FOLDER_PATH\n [--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH]\n [--output_video_filename OUTPUT_VIDEO_FILENAME]\n [--max_n_videos MAX_N_VIDEOS]\n [--max_duration_seconds MAX_DURATION_SECONDS]\n [--fps FPS] [--num_per_row NUM_PER_ROW]\n [--overlay_filename] [-h]\n\noptional arguments:\n --input_video_folder_path INPUT_VIDEO_FOLDER_PATH\n (Path, required)\n --output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH\n (Path, default=.)\n --output_video_filename OUTPUT_VIDEO_FILENAME\n (str, default=2023-10-20_00-16-32_video_grid_montage.mp4)\n --max_n_videos MAX_N_VIDEOS\n (Union[int, NoneType], default=None)\n --max_duration_seconds MAX_DURATION_SECONDS\n (Union[int, NoneType], default=None)\n --fps FPS (Union[int, NoneType], default=None)\n --num_per_row NUM_PER_ROW\n (Union[int, NoneType], default=None)\n --overlay_filename (bool, default=False)\n -h, --help show this help message and exit\n```\n\n`video_sequence_montage`: Create a sequence of videos (playing one at a time sequentially)\n\n```\nvideo_sequence_montage --help\n\nusage: video_sequence_montage --input_video_folder_path INPUT_VIDEO_FOLDER_PATH\n [--output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH]\n [--output_video_filename OUTPUT_VIDEO_FILENAME]\n [--max_n_videos MAX_N_VIDEOS] [--fps FPS]\n [--overlay_filename] [-h]\n\noptional arguments:\n --input_video_folder_path INPUT_VIDEO_FOLDER_PATH\n (Path, required)\n --output_video_folder_path OUTPUT_VIDEO_FOLDER_PATH\n (Path, default=.)\n --output_video_filename OUTPUT_VIDEO_FILENAME\n (str, default=2023-10-20_00-17-06_video_sequence_montage.mp4)\n --max_n_videos MAX_N_VIDEOS\n (Union[int, NoneType], default=None)\n --fps FPS (Union[int, NoneType], default=None)\n --overlay_filename (bool, default=False)\n -h, --help show this help message and exit\n```\n\n# Example Usage\n\n```\n(video_montage_env) \u279c video_montage git:(main) \u2717 tree openai_rubiks_cube \n\nopenai_rubiks_cube\n\u251c\u2500\u2500 2023-10-07_20-04-36_openai_rubiks_cube.gif\n\u251c\u2500\u2500 2023-10-07_20-05-13_openai_rubiks_cube.gif\n\u251c\u2500\u2500 2023-10-07_20-05-48_openai_rubiks_cube.gif\n\u251c\u2500\u2500 2023-10-07_20-07-27_openai_rubiks_cube.gif\n\u251c\u2500\u2500 2023-10-07_20-08-02_openai_rubiks_cube.gif\n\u2514\u2500\u2500 2023-10-07_20-11-18_openai_rubiks_cube.gif\n\n0 directories, 6 files\n(video_montage_env) \u279c video_montage git:(main) \u2717 video_grid_montage --input_video_folder_path openai_rubiks_cube\nMoviepy - Building video 2023-10-07_20-16-08_video_grid_montage.mp4.\nMoviepy - Writing video 2023-10-07_20-16-08_video_grid_montage.mp4\n\nMoviepy - Done !\nMoviepy - video ready 2023-10-07_20-16-08_video_grid_montage.mp4\n```\n\n![example_video_montage](https://github.com/tylerlum/video_montage/assets/26510814/7cd94a59-efe1-4b2b-bfc8-0aa6254d8bd7)\n\nYou can also add the `--overlay_filename` argument to add the clip's filename to each video clip.\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Easily create a video montage (either a sequence or a grid of videos)",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/tylerlum/video_montage"
},
"split_keywords": [
"python",
" video",
" montage",
" grid",
" sequence"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f078c00fc662a3398a24eb0113cb083f276ff13a8f67146c8af82e2b43eb7f79",
"md5": "9f3f12f7c2a42ffe44f4e440c001ae04",
"sha256": "4f4a2459db1ed119c6a9156a58de8fdfaa8de4c1e21729e9d731eb208ef6f84b"
},
"downloads": -1,
"filename": "video_montage-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9f3f12f7c2a42ffe44f4e440c001ae04",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 6440,
"upload_time": "2024-04-09T04:22:26",
"upload_time_iso_8601": "2024-04-09T04:22:26.272974Z",
"url": "https://files.pythonhosted.org/packages/f0/78/c00fc662a3398a24eb0113cb083f276ff13a8f67146c8af82e2b43eb7f79/video_montage-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e4f3d3968516dd5680a5ccddfd671375be8cfbbaf8ca7a49bec79c17a030c35a",
"md5": "3af1f114ca752b0992f75310d9c42c46",
"sha256": "eebe14efd80b0cb3c6ecba281a437d66b5afc7f4a4a6086d292504dba37200cf"
},
"downloads": -1,
"filename": "video_montage-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "3af1f114ca752b0992f75310d9c42c46",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4593,
"upload_time": "2024-04-09T04:22:27",
"upload_time_iso_8601": "2024-04-09T04:22:27.788314Z",
"url": "https://files.pythonhosted.org/packages/e4/f3/d3968516dd5680a5ccddfd671375be8cfbbaf8ca7a49bec79c17a030c35a/video_montage-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-09 04:22:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tylerlum",
"github_project": "video_montage",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "video-montage"
}