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