This guide explains how to record and create videos/GIFs from the sorting algorithm demonstrations.
python demo.py --recordpython demo.py --record --gifpython demo.py --help-recording| Command | Description |
|---|---|
python demo.py |
Run demo without recording |
python demo.py --record |
Record frames during demo |
python demo.py --record --gif |
Record frames and create GIFs |
python demo.py --help-recording |
Show detailed recording help |
When recording is enabled, the following structure is created:
recordings/
├── bubble_sort/
│ ├── frame_000001.png
│ ├── frame_000002.png
│ ├── frame_000003.png
│ └── ...
├── insertion_sort/
│ ├── frame_000001.png
│ └── ...
├── selection_sort/
├── merge_sort/
├── quick_sort/
├── heap_sort/
└── bubble_sort.gif (if --gif used)
Install ffmpeg:
- macOS:
brew install ffmpeg - Ubuntu:
sudo apt install ffmpeg - Windows: Download from ffmpeg.org
ffmpeg -framerate 30 -i recordings/bubble_sort/frame_%06d.png \
-c:v libx264 -pix_fmt yuv420p bubble_sort.mp4ffmpeg -framerate 30 -i recordings/bubble_sort/frame_%06d.png \
-c:v libx264 -crf 18 -pix_fmt yuv420p bubble_sort_hq.mp4#!/bin/bash
for dir in recordings/*/; do
if [ -d "$dir" ]; then
name=$(basename "$dir")
echo "Creating video for $name..."
ffmpeg -framerate 30 -i "$dir/frame_%06d.png" \
-c:v libx264 -pix_fmt yuv420p "${name}.mp4"
fi
donepip install Pillow
python demo.py --record --gif# Create optimized GIF
ffmpeg -i recordings/bubble_sort/frame_%06d.png \
-vf "fps=10,scale=800:-1:flags=lanczos,palettegen" \
palette.png
ffmpeg -i recordings/bubble_sort/frame_%06d.png -i palette.png \
-vf "fps=10,scale=800:-1:flags=lanczos,paletteuse" \
bubble_sort.gifModify the clock.tick(30) value in demo.py:
clock.tick(60)- Smooth but large filesclock.tick(30)- Balanced (default)clock.tick(15)- Smaller files
Modify WINDOW_WIDTH and WINDOW_HEIGHT in demo.py:
WINDOW_WIDTH = 1920 # Full HD
WINDOW_HEIGHT = 1080Modify the demo_algorithms list in demo.py:
demo_algorithms = [
(quick_sort, "Quick Sort"), # Record only Quick Sort
(merge_sort, "Merge Sort"), # Record only Merge Sort
]| Algorithm | Frames | PNG Size | MP4 Size | GIF Size |
|---|---|---|---|---|
| Bubble Sort | ~2000 | ~100MB | ~5MB | ~15MB |
| Insertion Sort | ~1500 | ~75MB | ~4MB | ~12MB |
| Selection Sort | ~1000 | ~50MB | ~3MB | ~8MB |
| Merge Sort | ~800 | ~40MB | ~2MB | ~6MB |
| Quick Sort | ~600 | ~30MB | ~2MB | ~5MB |
| Heap Sort | ~700 | ~35MB | ~2MB | ~5MB |
Total for all algorithms: ~330MB PNG, ~18MB MP4, ~51MB GIF
- Use GIF format for quick sharing
- Consider lower resolution (800x600)
- Use every 3rd frame to reduce size
- Use MP4 format for presentations
- Higher resolution (1200x800 or 1920x1080)
- Include all frames for smooth animation
- Keep PNG frames for frame-by-frame analysis
- Use consistent settings across recordings
- Document recording parameters
"PIL not found"
pip install Pillow"ffmpeg not found"
- Install ffmpeg (see Prerequisites above)
- Ensure it's in your PATH
"Permission denied"
chmod +x demo.pyLarge file sizes
- Reduce frame rate in demo.py
- Use lower resolution
- Use ffmpeg compression
- Disk Space: Each full demo requires ~330MB
- Memory: Large arrays use more RAM
- Processing: GIF creation is CPU intensive
- Storage: Use SSD for better performance
- Use
brew install ffmpeg pillow - PNG files work perfectly
- Good performance with built-in Python
- Use package manager:
sudo apt install ffmpeg python3-pil - Excellent performance
- May need display server for GUI
- Download ffmpeg manually
- Use
pip install Pillow - May need admin rights for installation
-
Setup:
pip install -r requirements.txt
-
Record Demo:
python demo.py --record --gif
-
Create High-Quality Videos:
for dir in recordings/*/; do name=$(basename "$dir") ffmpeg -framerate 30 -i "$dir/frame_%06d.png" \ -c:v libx264 -crf 18 -pix_fmt yuv420p "${name}.mp4" done
-
Cleanup:
# Keep only videos and GIFs, remove frame folders rm -rf recordings/*/
This setup gives you professional-quality recordings of all sorting algorithms that you can use for presentations, educational content, or analysis!
Happy Recording! 🎥✨