# CLI > Last updated: 2026-03-09 ## Purpose Main command-line interface for the SRT Caption Generator. Provides single-file and batch processing modes with comprehensive error handling and progress reporting for Tunisian Arabic content creators. ## Function Signature ```python def main() -> None: ``` ## Parameters Command-line arguments (via argparse): | Argument | Type | Required | Default | Description | |---|---|---|---|---| | --audio | str | Yes (single) | - | Path to audio file (mp3, wav, m4a, aac) | | --script | str | Yes (single) | - | Path to script text file (UTF-8) | | --output | str | No | output/{audio_name}.srt | Custom output SRT file path | | --language | str | No | "ara" | Alignment language code | | --offset | int | No | 0 | Global timestamp offset in milliseconds | | --max-chars | int | No | 42 | Auto-split long captions at word boundaries | | --word-level | flag | No | False | Use word-level alignment instead of sentence-level | | --batch | flag | No | False | Enable batch processing mode | | --input-dir | str | Yes (batch) | - | Input directory for batch processing | | --output-dir | str | Yes (batch) | - | Output directory for batch processing | | --verbose | flag | No | False | Print detailed alignment information | ## Returns Exit code 0 on success, 1 on error. ## Error Handling | Condition | Behavior | |---|---| | Missing required arguments | Clean error message, exit code 1 | | File not found | Descriptive error with file path | | Alignment failure | Model download hints or alignment error details | | Keyboard interrupt | Clean "Process interrupted" message | | Unexpected errors | Stack trace in --verbose mode, clean message otherwise | ## Usage Example ```bash # Basic single file processing python3 align.py --audio input/video_01.mp3 --script input/video_01.txt # Custom output path and offset python3 align.py --audio input/video.wav --script input/script.txt --output custom.srt --offset -200 # Verbose output with debugging python3 align.py --audio input/video.m4a --script input/script.txt --verbose # Word-level alignment with custom character limit python3 align.py --audio input/video.wav --script input/script.txt --word-level --max-chars 30 # Auto-split long captions without word-level alignment python3 align.py --audio input/video.mp3 --script input/script.txt --max-chars 25 # Batch processing python3 align.py --batch --input-dir input/ --output-dir output/ ``` ## Known Edge Cases - **First run model download**: Shows "📥 Downloading alignment model..." message, may take several minutes - **Missing ffmpeg**: Clear installation instructions provided in error message - **Corrupted files**: Validation catches issues early with descriptive messages - **Timestamp offset edge cases**: Prevents negative timestamps, maintains minimum caption duration - **Memory constraints**: Large files processed efficiently via streaming alignment - **Mixed file encodings**: UTF-8 validation prevents garbled Arabic text processing - **Keyboard interruption**: Graceful cleanup of temporary files ## Dependencies - **Python 3.10+**: Required for Union type hints and pathlib features - **ctc-forced-aligner**: Core alignment library - **torch + torchaudio**: PyTorch ecosystem for model inference - **ffmpeg**: System dependency for audio processing - All local modules: validator, normalize, aligner, srt_writer, config