4.1 KiB
4.1 KiB
docs/CLI_Functions.md
CLI Function Reference (v0.1.0)
This document describes the available commands in video-tools.sh.
Each command can be run from any terminal once the tool is installed.
Quick Reference
| Command | Syntax | Description |
|---|---|---|
convert-single |
video-tools convert-single <input> <output.mp4> |
Converts a single video to MP4. |
convert-multiple |
video-tools convert-multiple <input1> <input2> ... <output.mp4> |
Combines multiple video files into one MP4. |
All outputs are saved in your default ~/Videos folder, unless overridden in config/config.json.
Command Details
1. convert-single
Purpose
Convert a single input video file into an MP4 using modern compression and audio standards.
Usage
video-tools convert-single <input> <output.mp4>
Example
video-tools convert-single \
"/run/media/user/Linux/MyData/Videos/Example Collection/Example Movie Part1.avi" \
"Example Movie.mp4"
Output
/home/user/Videos/Example Movie.mp4
Behavior
- Converts older formats (AVI, MPG, MOV, MKV, etc.) into MP4.
- Uses H.264 (
libx264) for video and AAC for audio. - Rebuilds timestamps with
-fflags +genptsto prevent sync issues. - Adds
-movflags +faststartto improve playback and streaming performance. - Displays detailed FFmpeg progress and conversion status.
When to Use
- To modernize older video files.
- When a video fails to play properly on mobile or modern devices.
- To reduce file size while retaining visual quality.
2. convert-multiple
Purpose
Combine several clips or discs into one MP4 output file.
Usage
video-tools convert-multiple <input1> <input2> ... <output.mp4>
Example
video-tools convert-multiple \
"/run/media/user/Linux/MyData/Videos/Example Collection/Example Movie Part1.avi" \
"/run/media/user/Linux/MyData/Videos/Example Collection/Example Movie Part2.avi" \
"/run/media/user/Linux/MyData/Videos/Example Collection/Example Movie Part3.avi" \
"Example Movie Combined.mp4"
Output
/home/user/Videos/Example Movie Combined.mp4
Behavior
- Merges all listed videos sequentially.
- Re-encodes each input using the same H.264/AAC settings.
- Creates and deletes a temporary file list automatically.
- Displays each added file and overall progress in the terminal.
- Ensures the output file is playable immediately after completion.
When to Use
- To combine multi-part video discs, episodes, or segmented clips.
- When creating a single playback file from multiple source files.
Return Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Invalid syntax or missing arguments |
| 2 | FFmpeg execution error |
Common Issues
| Symptom | Cause | Fix |
|---|---|---|
| Conversion fails immediately | Input path invalid | Ensure file path is correct and quoted |
| Merge creates sync issues | Source files differ in resolution or frame rate | Convert each to MP4 first, then merge |
| Output not found | FFmpeg failed silently | Check terminal logs for permission or codec errors |
Planned Additions
| Command | Description |
|---|---|
convert-batch |
Convert every video in a folder automatically |
upscale-video |
Upscale videos to 1080p or 4K using lanczos or ML filters |
compress-video |
Recompress MP4s using HEVC or AV1 for smaller storage |
video-info |
Quick summary of resolution, codec, and bitrate |
Technical Summary
Conversion Logic
- Uses FFmpeg with explicit input and output flags:
ffmpeg -fflags +genpts -i "input" -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -movflags +faststart "output" -fflags +genptsregenerates presentation timestamps (avoids "Non-monotonic DTS" errors).- Re-encoding ensures compatibility and stable playback.
File Safety
- Original files are untouched.
- All intermediate list files are removed automatically.
- FFmpeg handles SIGINT (Ctrl+C) gracefully—partially written files are still playable.
End of File