Media Transcoding (FFmpeg)
Overview
Use FFmpeg presets to normalize video outputs for web streaming, mobile delivery, or archival quality. Your hf-videos repo already includes a simple bash script and a more advanced Python script with presets, backups, and logging.
Quick Start (hf-videos)
./ffmpeg_convert.sh check ./ffmpeg_convert.sh web_standard "My Video.mp4" ./ffmpeg_convert.sh batch_web_standard
Outputs are written to converted/ with backups in backup/ and logs in conversion.log .
Preset Summary (hf-videos)
-
web_standard: 1080p max, CRF 23, 128k audio, +faststart
-
web_high: 1080p max, CRF 20, 192k audio
-
mobile: 720p max, CRF 25, 96k audio
-
ultra_compact: 480p max, CRF 28, 64k audio
-
archive: original res, CRF 18, 256k audio
All presets use H.264 + AAC with +faststart for streaming-friendly MP4s.
Batch Workflow
-
Run a single-file conversion first to validate output.
-
Run batch conversion once the preset is confirmed.
-
Verify output sizes and playback.
Batch commands:
./ffmpeg_convert.sh batch_web_standard ./ffmpeg_convert.sh batch_mobile ./ffmpeg_convert.sh batch_ultra_compact
Advanced Script (convert_video.py)
Use convert_video.py when you need:
-
Progress monitoring
-
Metadata inspection
-
Overwrite control
-
Preset listing and batch automation
python3 convert_video.py --list-presets python3 convert_video.py --file "My Video.mp4" --preset web_standard python3 convert_video.py --preset mobile --overwrite
Output Conventions
-
Converted files use suffixes like _web_standard .
-
Backups preserve original filenames.
-
Logs go to conversion.log for audit and troubleshooting.
Troubleshooting
-
FFmpeg missing: brew install ffmpeg (macOS) or install from ffmpeg.org.
-
Permission errors: chmod +x ffmpeg_convert.sh .
-
Disk pressure: clean converted/ and backup/ after validation.
Related Skills
- toolchains/universal/infrastructure/docker