


# Droneframe
A simple CLI tool to extract frames from drone footages with EXIF data included.
## Installation
You can install DroneFrame from either from PyPI using `pip` or directly through GitHub releases.
### Pip
```bash
$ pip install droneframe
```
### GitHub
#### Install From Source
```bash
$ git clone https://github.com/anwaraliahmad/droneframe.git
$ cd droneframe
$ pip install
```
#### Install From Release
1. Navigate to [releases page](https://github.com/anwaraliahmad/droneframe/releases)
2. Download either `.tar.gz` or `.whl`
3. Navigate to your download
```bash
$ pip install droneframe-version.<tar.gz or whl>
```
## Running
#### Arguments
| Argument/Option | Description | Flags | Default | Required |
|----------------- |---------------------------------------------------------- |---------------------- |------------------------------------------------ |--------------------------------- |
| **video** | Path to drone video file (`.MP4`) | | | **Yes** |
| `meta` | Path to metadata file (`.SRT`) | `-m`, `--meta` | Same pathname (sans file extension) as `video` | No |
| `frame_rate` | The rate for frame extraction | `-f`, `--frame_rate` | 30 | No (but **highly** recommended) |
| `output` | Target path to output folder (will generate a folder named after the video file there) | `-o`, `--output` | Working directory | No |
| Help | Display help message | `-h`, `--help` | | |
## Example: Photogrammetry
### Process
1. Use `droneframe` to get frames filled with GPS & timestamp data.
```bash
$ droneframe path/to/DJI_001.MP4 -f 3 # Large drone video of subject.
```
2. Import the generated `./DJI_001` folder into your photogrammetry software of choice.
3. Enjoy your 3D recreation.
> If constraints permit, you can always extract more with a higher framerate or generate an additional batch of frames from another video you have of the target.
### End Result
<center> <div class="sketchfab-embed-wrapper"> <iframe title="Abandoned Railyard Flue" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="autoplay; fullscreen; xr-spatial-tracking" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/3c92d642af34444dadc83f1d2d0dd07d/embed"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/abandoned-railyard-flue-3c92d642af34444dadc83f1d2d0dd07d?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d" target="_blank" rel="nofollow" style="font-weight: bold; color: #1CAAD9;"> Abandoned Railyard Flue </a> by <a href="https://sketchfab.com/anwaraliahmad?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d" target="_blank" rel="nofollow" style="font-weight: bold; color: #1CAAD9;"> anwaraliahmad </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d" target="_blank" rel="nofollow" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
</center>
This is a model of an abandoned structure that was created by running `droneframe` and uploading the resulting frames onto [WebODM Lightning](https://webodm.net/) for 3D reconstruction.
## License
This project is licensed under the MIT License. See the LICENSE file for details.
Raw data
{
"_id": null,
"home_page": "https://github.com/anwaraliahmad/droneframe",
"name": "droneframe",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Anwar Ali-Ahmad",
"author_email": "contact@anwaraliahmad.tech",
"download_url": "https://files.pythonhosted.org/packages/83/46/d78e36b4282e4be27b28a3fa55e1a3694f3e47d24cb6e1b23548745c71ad/droneframe-0.1.1.tar.gz",
"platform": null,
"description": "\n\n\n# Droneframe\nA simple CLI tool to extract frames from drone footages with EXIF data included.\n\n## Installation\nYou can install DroneFrame from either from PyPI using `pip` or directly through GitHub releases.\n### Pip\n```bash\n$ pip install droneframe\n```\n### GitHub \n#### Install From Source\n```bash\n$ git clone https://github.com/anwaraliahmad/droneframe.git\n$ cd droneframe \n$ pip install\n```\n#### Install From Release\n1. Navigate to [releases page](https://github.com/anwaraliahmad/droneframe/releases)\n2. Download either `.tar.gz` or `.whl`\n3. Navigate to your download\n```bash\n$ pip install droneframe-version.<tar.gz or whl>\n```\n## Running\n#### Arguments\n| Argument/Option \t| Description \t| Flags \t| Default \t| Required \t|\n|-----------------\t|----------------------------------------------------------\t|----------------------\t|------------------------------------------------\t|---------------------------------\t|\n| **video** \t| Path to drone video file (`.MP4`) \t| \t| \t| **Yes** \t|\n| `meta` \t| Path to metadata file (`.SRT`) \t| `-m`, `--meta` \t| Same pathname (sans file extension) as `video` \t| No \t|\n| `frame_rate` \t| The rate for frame extraction \t| `-f`, `--frame_rate` \t| 30 \t| No (but **highly** recommended) \t|\n| `output` \t| Target path to output folder (will generate a folder named after the video file there) \t| `-o`, `--output` \t| Working directory \t| No \t|\n| Help \t| Display help message \t| `-h`, `--help` \t| \t| \t|\n## Example: Photogrammetry\n\n### Process\n1. Use `droneframe` to get frames filled with GPS & timestamp data.\n```bash\n$ droneframe path/to/DJI_001.MP4 -f 3 # Large drone video of subject.\n```\n2. Import the generated `./DJI_001` folder into your photogrammetry software of choice.\n3. Enjoy your 3D recreation.\n> If constraints permit, you can always extract more with a higher framerate or generate an additional batch of frames from another video you have of the target.\n\n### End Result\n<center> <div class=\"sketchfab-embed-wrapper\"> <iframe title=\"Abandoned Railyard Flue\" frameborder=\"0\" allowfullscreen mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" allow=\"autoplay; fullscreen; xr-spatial-tracking\" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src=\"https://sketchfab.com/models/3c92d642af34444dadc83f1d2d0dd07d/embed\"> </iframe> <p style=\"font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;\"> <a href=\"https://sketchfab.com/3d-models/abandoned-railyard-flue-3c92d642af34444dadc83f1d2d0dd07d?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d\" target=\"_blank\" rel=\"nofollow\" style=\"font-weight: bold; color: #1CAAD9;\"> Abandoned Railyard Flue </a> by <a href=\"https://sketchfab.com/anwaraliahmad?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d\" target=\"_blank\" rel=\"nofollow\" style=\"font-weight: bold; color: #1CAAD9;\"> anwaraliahmad </a> on <a href=\"https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=3c92d642af34444dadc83f1d2d0dd07d\" target=\"_blank\" rel=\"nofollow\" style=\"font-weight: bold; color: #1CAAD9;\">Sketchfab</a></p></div>\n</center>\n\nThis is a model of an abandoned structure that was created by running `droneframe` and uploading the resulting frames onto [WebODM Lightning](https://webodm.net/) for 3D reconstruction.\n\n\n## License\nThis project is licensed under the MIT License. See the LICENSE file for details.\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Extract frames from drone footage along with their EXIF data.",
"version": "0.1.1",
"project_urls": {
"Homepage": "https://github.com/anwaraliahmad/droneframe"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bb4eb6f059cc4082424ad02bbafe6c82f87a65f7dbeba6bee6feaf5410bf2d2c",
"md5": "8c480b4b215707fc796039b80cf4b122",
"sha256": "fad9bfc6beb32c78fa8c384744de97a490ab9d279852885a9e3de2c6181c4696"
},
"downloads": -1,
"filename": "droneframe-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8c480b4b215707fc796039b80cf4b122",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8046,
"upload_time": "2023-09-11T02:28:11",
"upload_time_iso_8601": "2023-09-11T02:28:11.320053Z",
"url": "https://files.pythonhosted.org/packages/bb/4e/b6f059cc4082424ad02bbafe6c82f87a65f7dbeba6bee6feaf5410bf2d2c/droneframe-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8346d78e36b4282e4be27b28a3fa55e1a3694f3e47d24cb6e1b23548745c71ad",
"md5": "e3bcb00b55730c79510f499508d6e003",
"sha256": "550924f145077459a5fbfa187828fecae8a333dec4d309f72770dc03d27593f1"
},
"downloads": -1,
"filename": "droneframe-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "e3bcb00b55730c79510f499508d6e003",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7275,
"upload_time": "2023-09-11T02:28:14",
"upload_time_iso_8601": "2023-09-11T02:28:14.253872Z",
"url": "https://files.pythonhosted.org/packages/83/46/d78e36b4282e4be27b28a3fa55e1a3694f3e47d24cb6e1b23548745c71ad/droneframe-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-11 02:28:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "anwaraliahmad",
"github_project": "droneframe",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "argparse",
"specs": []
}
],
"lcname": "droneframe"
}