mirror of
https://github.com/vondas-network/videobeaux.git
synced 2026-01-28 01:31:16 +01:00
173 lines
7.6 KiB
Markdown
173 lines
7.6 KiB
Markdown
# convert_mux
|
||
|
||
## Description
|
||
Rewraps or converts media streams while copying or re-encoding video/audio.
|
||
Useful for repairing containers, adjusting codecs, changing formats, resolving sync issues, or preparing files for specific platforms or pipelines.
|
||
|
||
## Purpose
|
||
`convert_mux` is Videobeaux’s advanced container/codec remuxing and transcoding utility.
|
||
Compared to the simpler `convert` program, `convert_mux` offers:
|
||
- deeper codec configuration,
|
||
- container formatting,
|
||
- bitrate and rate-control management,
|
||
- GOP and frame-rate control,
|
||
- filter pass-through (`vf`),
|
||
- audio stream shaping,
|
||
- curated presets via `--profile`.
|
||
|
||
This makes it ideal for delivery specifications, pipeline normalization, or technical media prep.
|
||
|
||
## How It Works
|
||
1. **Container Selection (`--format`)**
|
||
Determines the output container/muxer hint (mp4, mov, webm, matroska, mxf, gif, image2, avi).
|
||
2. **Profile-Based Presets (`--profile`)**
|
||
Selecting a profile automatically applies a curated list of FFmpeg flags (codec, pix_fmt, bitrate/quality, audio format, etc.).
|
||
3. **Manual Codecs and Quality**
|
||
If `--profile` is not used, you can explicitly specify:
|
||
- `--vcodec`, `--acodec`,
|
||
- `--crf`, `--bitrate`, `--maxrate`, `--bufsize`, `--preset`,
|
||
- `--pix-fmt`, `--gop`, `-r`, `--vf`, `--tagv`, etc.
|
||
4. **Stream Copy Mode**
|
||
`--copy` bypasses re-encoding and performs a container-level remux where streams are compatible.
|
||
5. **FFmpeg Passthrough**
|
||
Extra arguments after `--` are passed directly to FFmpeg (`ffmpeg_args`).
|
||
6. **Execution**
|
||
A command is built and run through `run_ffmpeg_with_progress`, echoing the FFmpeg command for transparency.
|
||
|
||
## Program Template
|
||
videobeaux -P convert_mux \
|
||
-i input.mp4 \
|
||
-o output.mp4 \
|
||
--format VALUE \
|
||
--profile VALUE \
|
||
--vcodec VALUE \
|
||
--acodec VALUE \
|
||
--crf VALUE \
|
||
--bitrate VALUE \
|
||
--maxrate VALUE \
|
||
--bufsize VALUE \
|
||
--preset VALUE \
|
||
--profile-v VALUE \
|
||
--level VALUE \
|
||
--pix-fmt VALUE \
|
||
--gop VALUE \
|
||
-r VALUE \
|
||
--vf VALUE \
|
||
--tagv VALUE \
|
||
--abitrate VALUE \
|
||
--ac VALUE \
|
||
--ar VALUE \
|
||
--copy \
|
||
-- FFMPPEG_ARGS...
|
||
|
||
## Arguments
|
||
|
||
- **format** — Force container/muxer hint (`mp4`, `mov`, `webm`, `matroska`, `mxf`, `gif`, `image2`, `avi`, etc.).
|
||
- **profile** — Apply a curated preset (see **Available Profiles** below).
|
||
- **vcodec** — Video codec (e.g., `libx264`, `libx265`, `libaom-av1`, `prores_ks`, `dnxhd`, `mpeg2video`, `mpeg4`, `mjpeg`).
|
||
- **acodec** — Audio codec (e.g., `aac`, `libopus`, `libmp3lame`, `mp3`, `pcm_s16le`).
|
||
- **crf** — Constant Rate Factor for quality control (lower = higher quality).
|
||
- **bitrate** — Target video bitrate (e.g., `5M`).
|
||
- **maxrate** — Maximum video bitrate for rate control.
|
||
- **bufsize** — VBV buffer size to pair with `maxrate`.
|
||
- **preset** — Codec speed/efficiency preset (e.g., `ultrafast`, `fast`, `slow`).
|
||
- **profile-v** (`profile_v`) — Video codec profile (e.g., `high`, `main`, `baseline`, or ProRes profile index).
|
||
- **level** — Video level (e.g., `4.1`) for device compatibility.
|
||
- **pix-fmt** (`pix_fmt`) — Pixel format (e.g., `yuv420p`, `yuv422p10le`, `yuva444p10le`).
|
||
- **gop** — GOP/keyframe interval in frames.
|
||
- **-r** — Output frame rate (`30000/1001`, `25`, `24`, etc.).
|
||
- **vf** — Video filtergraph string.
|
||
- **tagv** — Force video FourCC/tag (e.g., `hvc1`).
|
||
- **abitrate** — Audio bitrate (e.g., `192k`).
|
||
- **ac** — Audio channel count (e.g., `2`).
|
||
- **ar** — Audio sample rate (e.g., `48000`).
|
||
- **copy** — When set, stream copy all streams (no re-encode) if compatible.
|
||
- **ffmpeg_args** — Raw arguments after `--` passed directly to FFmpeg.
|
||
|
||
### Available Profiles
|
||
|
||
These are the curated `--profile` options defined in the code, with their intent:
|
||
|
||
- **mp4_h264**
|
||
H.264 in MP4 for general web/delivery.
|
||
- `libx264`, `-preset veryfast`, `-crf 18`, `yuv420p`, `+faststart`, AAC 192k stereo.
|
||
- **mp4_hevc**
|
||
HEVC/H.265 in MP4 for higher compression at similar quality.
|
||
- `libx265`, `-preset medium`, `-crf 22`, `-tag:v hvc1`, `yuv420p`, `+faststart`, AAC 192k stereo.
|
||
- **mp4_av1**
|
||
AV1 in MP4 for very efficient modern web delivery.
|
||
- `libaom-av1`, `-crf 28`, `-b:v 0`, `yuv420p`, `+faststart`, AAC 192k stereo.
|
||
- **webm_vp9**
|
||
VP9-based WebM for web platforms supporting WebM.
|
||
- `libvpx-vp9`, `-b:v 0`, `-crf 30`, row-mt enabled, `yuv420p`, Opus 160k stereo.
|
||
- **webm_av1**
|
||
AV1 in WebM with Opus audio.
|
||
- `libaom-av1`, `-crf 32`, `-b:v 0`, `yuv420p`, Opus 160k stereo.
|
||
- **prores_422**
|
||
ProRes 422 mezzanine for professional workflows.
|
||
- `prores_ks`, `-profile:v 2`, `yuv422p10le`, PCM s16le audio.
|
||
- **prores_4444**
|
||
ProRes 4444 mezzanine with alpha support.
|
||
- `prores_ks`, `-profile:v 4`, `yuva444p10le`, PCM s24le audio.
|
||
- **dnxhr_hq**
|
||
DNxHR HQ mezzanine for Avid / pro pipelines.
|
||
- `dnxhd`, `-profile:v dnxhr_hq`, `yuv422p`, PCM s16le audio.
|
||
- **mxf_xdcamhd50_1080i59**
|
||
Broadcast MXF OP1a XDCAM HD 50, 1080i59.94.
|
||
- `mpeg2video` at 50M CBR, interlaced, top field first, `yuv422p`, PCM s24le 48k stereo, `-f mxf`.
|
||
- **lossless_ffv1**
|
||
FFV1 lossless archival video.
|
||
- `ffv1` level 3, intra (g=1), slice CRC, PCM s24le audio.
|
||
- **gif**
|
||
GIF export preset (via palettegen/paletteuse pipeline).
|
||
- Uses `fps=15,scale=iw:-2:flags=lanczos` in a filter_complex chain.
|
||
- **png_seq**
|
||
PNG image sequence output.
|
||
- `-c:v png`.
|
||
- **jpg_seq**
|
||
JPEG image sequence output.
|
||
- `-qscale:v 2` (high quality JPEG).
|
||
- **mp3_320**
|
||
Audio-only MP3 at 320 kbps.
|
||
- `-vn`, `libmp3lame`, `-b:a 320k`.
|
||
- **aac_192**
|
||
Audio-only AAC at 192 kbps.
|
||
- `-vn`, `aac`, `-b:a 192k`.
|
||
- **flac**
|
||
Audio-only FLAC lossless.
|
||
- `-vn`, `flac`.
|
||
- **avi_mjpeg_fast**
|
||
AVI with MJPEG video for fast, edit-friendly intermediates.
|
||
- `mjpeg` with `-q:v 3`, PCM s16le audio.
|
||
- **avi_mpeg4_fast**
|
||
AVI with MPEG-4 video tuned for speed.
|
||
- `mpeg4`, `-qscale:v 3`, `-bf 0`, `-mbd 0`, MP3 192k audio.
|
||
|
||
## Real World Example
|
||
videobeaux -P convert_mux \
|
||
-i myvideo.mp4 \
|
||
-o convert_mux_styled.mp4 \
|
||
--format mp4 \
|
||
--profile mp4_h264
|
||
|
||
## Technical Notes
|
||
- Profiles apply **after** basic container inference and can override many manually specified arguments.
|
||
- When output ends with `.mp4`, certain profiles that expect non-MP4 containers (`webm_…`, `mxf_…`, `gif`, etc.) will cause a fail-fast error to avoid confusing FFmpeg errors.
|
||
- `--copy` disables most encoding options and simply remuxes streams when possible.
|
||
- GIF and image-sequence profiles bypass typical video/audio handling and use specialized pipelines.
|
||
- Additional raw FFmpeg flags can be appended after `--` if you need something not exposed via named arguments.
|
||
|
||
## Recommended Usage
|
||
- Preparing web deliverables using `mp4_h264`, `mp4_hevc`, or `mp4_av1`.
|
||
- Making pro intermediates in `prores_422`, `prores_4444`, or `dnxhr_hq` for editing, grading, or VFX.
|
||
- Building broadcast MXF files with `mxf_xdcamhd50_1080i59`.
|
||
- Generating GIFs, PNG/JPEG sequences, or audio-only MP3/AAC/FLAC assets.
|
||
- Using `--copy` to remux without re-encoding when container changes are sufficient.
|
||
|
||
## Quality Tips
|
||
- For H.264/H.265, tune CRF and preset if not relying solely on profiles.
|
||
- Use the ProRes and DNxHR profiles for grading/VFX workflows where multi-gen quality matters.
|
||
- AV1 profiles (`mp4_av1`, `webm_av1`) are slower to encode but very efficient for distribution.
|
||
- For archival, prefer `lossless_ffv1` in Matroska with PCM audio.
|
||
- Always inspect container + codec compatibility for your target platform before finalizing a profile.
|