LastFrame is a simple command-line tool for extracting the last frame from MP4 video files using OpenCV (cv2)
Project description
LastFrame
Overview
LastFrame is a lightweight command-line tool that extracts the first frame from MP4 video files using OpenCV (cv2).
It automatically scans the current directory for .mp4 files (case-insensitive), displays an interactive numbered list with file sizes, lets the user select a video, and saves the first frame as an image file (PNG by default; supports JPG, JPEG, BMP, TIFF).
The tool features clear prompts, basic error handling, and a pause at the end — perfect for quick thumbnail generation, cover image creation, or inspecting video starts without loading the entire file.
Features
- Finds all
.mp4/.MP4/.Mp4files in the current folder usingglob - Shows numbered list with file sizes (in MB) for easy selection
- Extracts the very first frame reliably with a single
cap.read()call - Smart default output filename:
output.png(if free) or{video_name}_first.png - Automatically adds
.pngextension if user input lacks an image suffix - Clean resource handling (
cap.release()) — no temporary files - User-friendly success/error messages and final confirmation
Prerequisites
- Python 3.8+ (recommended: 3.10–3.12)
opencv-python(installed via pip)- Optional: virtual environment (
venvoruv)
No C compiler or Cython is required for normal usage — the project is currently pure Python.
Installation
Development / Source Install (Editable)
# 1. Clone or download the repo
git clone <your-repo-url>
cd LastFrame
# 2. (Recommended) Create & activate virtual environment
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3. Install dependencies
pip install opencv-python
# If you later add ChronicleLogger or others → add them here
# 4. Install project in editable mode
pip install -e .
Now you can run it with:
python -m LastFrame
Future PyPI Release (when ready)
pip install lastframe
(You would then publish it via python -m build + twine, and configure console_scripts in pyproject.toml for a lastframe command.)
Usage
Place your MP4 videos in the current directory and run:
python -m LastFrame
Example session:
Found MP4 videos:
1. intro.mp4 (12.4 MB)
2. demo.MP4 (45.8 MB)
Enter video number (1-2): 1
Selected: intro.mp4
Enter output image filename [default: output.png]:
Extracting first frame from 'intro.mp4'...
Success: First frame saved as 'output.png'
Done! Image saved as: output.png
Press Enter to exit...
Or specify a custom name:
Enter output image filename [default: intro_first.png]: cover.jpg
The tool saves the image and waits for you to press Enter before closing.
For scripting / automation:
from LastFrame.__main__ import main
main()
Project Structure
Follows modern Python packaging conventions with src/ layout:
LastFrame/
├── README.md
├── pyproject.toml # (add when packaging properly)
├── src/
│ └── LastFrame/
│ ├── __init__.py
│ └── __main__.py # Main logic + entry point
└── (optional future folders)
├── tests/
└── docs/
Development Notes
- The core logic lives in
src/LastFrame/__main__.py - To add features (batch mode, other formats, progress bar…): edit the
main()andget_first_frame()functions - Logging:
ChronicleLoggeris imported but unused — either integrate it or remove the import - Tests: Consider adding
tests/folder +pytestlater - Packaging: When ready, add
pyproject.tomlwithbuild-system = {requires = ["hatchling"], build-backend = "hatchling.build"}(or setuptools)
Troubleshooting
- Cannot open video → Check file path, integrity, and codec support in your OpenCV build
- No MP4 files found → Make sure videos are in the current working directory (
pwd) - OpenCV not found →
pip install opencv-python - Permission denied on save → Check write permissions in current folder
License
MIT License
(Add a LICENSE file with the standard MIT text when you publish or share the repo.)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lastframe-1.0.7.tar.gz.
File metadata
- Download URL: lastframe-1.0.7.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6acc38756efefff2c237db7838c985cdc10de18ac656870066a8ed0133cbc248
|
|
| MD5 |
24932522bf013253eedd00868a42047a
|
|
| BLAKE2b-256 |
37eac0c68be68f3c8d66a8b3e91feb0327ceb9fbdfafe03ed7b32c601338a721
|
File details
Details for the file lastframe-1.0.7-py3-none-any.whl.
File metadata
- Download URL: lastframe-1.0.7-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ff25847082012485efb2747bba0c5c536864c262fcc80b424aea448361b69eb
|
|
| MD5 |
b5c243b7aef46ceecdcc0f0271b049e7
|
|
| BLAKE2b-256 |
92495213003ca9194da1a7395047308d3673a3820f5a9331ed740e83a09336a7
|