> For the documentation index, fetch https://sync.so/docs/llms.txt. Append .md to a page URL for Markdown. Documentation-search MCP: https://sync.so/docs/_mcp/server. # Media Formats Support > Supported formats, recommended input properties, and output quality guidance for using Sync Labs ## Supported Formats ### Video | MIME Type | Extension | Format | | ----------------- | ------------- | --------- | | `video/mp4` | `.mp4` | MP4 | | `video/quicktime` | `.mov`, `.qt` | QuickTime | | `video/webm` | `.webm` | WebM | | `video/x-msvideo` | `.avi` | AVI | ### Audio #### Full Support | MIME Type | Extension | Format | | ------------ | --------- | --------- | | `audio/wav` | `.wav` | WAV | | `audio/mpeg` | `.mp3` | MP3 | | `audio/ogg` | `.ogg` | OGG | | `audio/flac` | `.flac` | FLAC | | `audio/alac` | `.alac` | ALAC | | `audio/mp4` | `.mp4` | MP4 Audio | #### Limited Support The following formats have partial support due to licensing or legal restrictions: | MIME Type | Extension | Format | | ---------------- | --------- | ------ | | `audio/x-ms-wma` | `.wma` | WMA | | `audio/x-m4a` | `.m4a` | M4A | | `audio/x-m3a` | `.m3a` | M3A | | `audio/aac` | `.aac` | AAC | > **Note** > > For best compatibility, use **MP4** for video and **WAV** or **MP3** for audio. ## Output Quality All output is re-encoded to H.264 using libx264 (`-crf 17 -preset slow`), regardless of the input codec. Frames are processed in RGB color space internally during generation, so the original bitrate, frame rate, and color grading may differ in the output. **Don't rely on bitrate for quality preservation**: Outputs are re-encoded and bitrate may change. > **Warning** > > **HDR is not fully supported**: HDR videos are normalized to SDR, which may affect color grading in the output. > **Note** > > **Alpha channels are removed**: The H.264/RGB pipeline does not support transparency. Alpha channels are replaced with a solid background. ### Preserving Color For color-sensitive H.264 workflows - especially when compositing generated output back onto source footage - use explicit SDR color metadata and 4:4:4 chroma sampling. * **Tag SDR BT.709 metadata explicitly**: Set `color_space`, `color_transfer`, `color_range`, and `color_primaries`. Untagged or partially tagged files can be interpreted differently across decoders. The pipeline uses ffmpeg 7.1 for color metadata detection. * **Prefer `yuv444p` when color accuracy matters**: The pipeline operates in RGB. 4:2:0 and 4:2:2 inputs require chroma upsampling during YUV→RGB conversion, which can cause color shifts or compositing seams. 4:4:4 preserves full chroma resolution through that conversion. * **Export 4:4:4 from your source tool**: Converting an existing 4:2:0 file to 4:4:4 cannot restore discarded chroma detail. * For lossless or pixel-level workflows, [contact support](mailto:support@sync.so). Example FFmpeg command for a tagged SDR BT.709 H.264 export: ```bash ffmpeg -i input.mov \ -c:v libx264 -pix_fmt yuv444p \ -color_range tv -colorspace bt709 -color_primaries bt709 -color_trc bt709 \ -crf 17 -preset slow \ -c:a aac -b:a 192k \ output.mp4 ``` ### Recommended Input Properties #### Video | Property | Recommended Value | | --------------- | ------------------------------------------------------------------------------------- | | Codec | H.264 High Profile for general use; H.264 4:4:4 for color-sensitive work | | Resolution | 1920×1080 | | Average Bitrate | ≥ 10 Mbps | | Frame Rate | 24, 25, or 30 fps (constant) | | Color Space | 8-bit SDR BT.709 | | Color Metadata | Explicitly tag range, primaries, transfer, and matrix | | Chroma Sampling | `yuv420p` or `yuv422p` for general use; `yuv444p` when color preservation is critical | > **Warning** > > **4K maximum**: Videos above 4096×2160 are rejected. Downscale to 4K or below before uploading. #### Audio * **Sample rate**: 44.1 kHz or 48 kHz. Higher rates are downsampled to 48 kHz, which may reduce quality. * **Bit depth**: Up to 32-bit float. * **Channels**: Up to 7.1. Spatial audio is not supported. * **Multiple streams**: Only the first audio stream is processed; all others are discarded. ### Codec Quality Comparison All input codecs are transcoded to a standard format, so processing speed is consistent. Quality loss varies by codec, measured using [VMAF](https://github.com/Netflix/vmaf): | Input Codec | Output Quality | | ----------- | ----------------------------- | | H.264 | Best (least quality loss) | | MPEG-2 | Good (up to 15% quality loss) | | H.265 | Good (up to 15% quality loss) | | VP9 | Fair (up to 20% quality loss) | | AV1 | Fair (over 20% quality loss) | ## Frequently Asked Questions #### How do I check input and output frame rates? Compare the source and generated file before conforming the result to your editing timeline. Run this command for each file: ```bash ffprobe -v error -select_streams v:0 \ -show_entries stream=r_frame_rate,avg_frame_rate,nb_frames,duration \ -of default=noprint_wrappers=1 input.mp4 ``` Variable-frame-rate sources can report different nominal and average frame rates. Check both values and the duration instead of assuming that the source and output have identical frame counts. #### What is the maximum file size for uploads? The application limits uploaded files to **5 GiB** per file, subject to your plan's file size limit. This applies to both [asset uploads](/developer-guides/asset-uploads) and direct multipart uploads to `POST /v2/generate`. Direct uploads may also face lower proxy limits. For large local files, use one of these options: * [Upload the file as an asset](/developer-guides/asset-uploads) and pass the returned `assetId` in your input. Retries reuse the asset instead of resending the file. * Host the file at a publicly accessible URL (S3 bucket, CDN, or any web server) and pass it in the `url` field of your input. URL inputs avoid the direct multipart upload parser limit, but must still meet applicable plan limits and media requirements. For large local files, prefer the upload-first asset flow so generation retries do not resend the file. Hosted URLs must return the media file itself without authentication headers. A sharing or preview page that returns HTML is not a direct media URL, even if it opens in your browser. For local files or private media, use [Asset Uploads](/developer-guides/asset-uploads) and pass the returned `assetId`. #### What is the maximum video duration? Maximum duration depends on your plan: | Plan | Maximum Duration | | -------- | ---------------- | | Free | 20 seconds | | Hobbyist | 1 minute | | Scale+ | 30 minutes | Check the [pricing page](https://sync.so/pricing) for your plan's specific limit. * [react-1](/models/react) has a hard limit of **15 seconds** regardless of plan - it is designed for short-form expressive content. * For videos exceeding your plan's limit, use the [Segments API](/developer-guides/segments) to split and process them in shorter chunks. #### Does Sync Labs support vertical or portrait videos? Yes - any aspect ratio is supported, including vertical (9:16), horizontal (16:9), square (1:1), and custom dimensions. The pipeline extracts the face region at 512×512 for processing, then composites it back into the original frame. The output always matches the input dimensions and orientation. For best face detection in vertical videos, ensure the speaker's face is clearly visible and well-lit. > Supported formats, recommended input properties, and output quality guidance for using Sync Labs