---
name: ffmpeg
description: "Audio and video processing for e-commerce. Use when user needs to: merge audio with video (视频配音/添加背景音乐/音视频合成), compress videos (压缩视频/视频压缩), generate thumbnails (生成缩略图/视频封面), concatenate videos (视频拼接/合并视频), trim videos (视频裁切/截取片段/剪辑视频), convert formats (格式转换/转换视频)."
---

# FFmpeg 音视频处理

## 电商场景常用任务

### 1. 音视频合成（产品视频配音/背景音乐）

```bash
# 视频配背景音乐（音频较短时循环）
ffmpeg -i video.mp4 -stream_loop -1 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4

# 视频配音频（音频较长时截断）
ffmpeg -i video.mp4 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4

# 替换视频原有音频
ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
```

**参数说明**：
- `-stream_loop -1` - 无限循环音频（直到视频结束）
- `-shortest` - 以最短的流为准（视频或音频）
- `-map 0:v:0 -map 1:a:0` - 手动选择第1个文件的视频+第2个文件的音频

### 2. 视频压缩（上传优化，保证展示质量）

```bash
# 产品视频压缩（推荐：CRF 20，高质量）
ffmpeg -i product.mp4 -c:v libx264 -crf 20 -c:a aac output.mp4

# 标准压缩（CRF 23，平衡质量和大小）
ffmpeg -i video.mp4 -crf 23 output.mp4
```

**电商场景 CRF 建议**：
- **18-20** - 产品主图视频（质量优先）
- **23** - 一般营销视频（平衡）
- **25-28** - 内部使用视频（文件大小优先）

### 3. 生成视频缩略图（产品封面）

```bash
# 从5秒处生成缩略图
ffmpeg -i product_video.mp4 -ss 00:00:05 -frames:v 1 thumbnail.jpg

# 批量生成所有产品视频的缩略图
for video in *.mp4; do
  ffmpeg -i "$video" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
done
```

### 4. 视频拼接（多个片段合并）

```bash
# 创建拼接列表文件
cat > concat_list.txt << 'EOF'
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
EOF

# 拼接视频（所有视频参数相同时，快速无损）
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy output.mp4

# 拼接视频（参数不同时，重新编码）
ffmpeg -f concat -safe 0 -i concat_list.txt -c:v libx264 -crf 20 -c:a aac output.mp4
```

**参数说明**：
- `-f concat` - 使用 concat 分离器
- `-safe 0` - 允许不安全的文件路径（本地文件需要）
- `-c copy` - 无损拼接（仅当所有视频格式完全相同）

### 5. 视频裁切（截取指定片段）

```bash
# 从第10秒开始，截取30秒
ffmpeg -i video.mp4 -ss 00:00:10 -t 30 -c copy output.mp4

# 从第10秒到第40秒
ffmpeg -i video.mp4 -ss 00:00:10 -to 00:00:40 -c copy output.mp4

# 去掉前5秒（从第5秒到结尾）
ffmpeg -i video.mp4 -ss 00:00:05 -c copy output.mp4
```

**参数说明**：
- `-ss HH:MM:SS` - 开始时间
- `-t <秒数>` - 持续时长
- `-to HH:MM:SS` - 结束时间
- `-c copy` - 无损裁切（快速）

### 6. 格式转换（确保兼容性）

```bash
# 快速转换（只改容器，不重新编码）
ffmpeg -i video.mov -c copy video.mp4

# 标准转换（重新编码）
ffmpeg -i video.mov -c:v libx264 -c:a aac video.mp4
```

## 电商工作流程

### 场景1：产品视频配背景音乐

```bash
# 1. 检查文件
ls -lh product_video.mp4 background_music.mp3

# 2. 合成（音乐循环播放）
ffmpeg -i product_video.mp4 -stream_loop -1 -i background_music.mp3 \
  -shortest -c:v copy -c:a aac -b:a 192k final_video.mp4

# 3. 检查输出
ls -lh final_video.mp4

# 4. 告知用户：文件大小、是否需要压缩
```

### 场景2：压缩产品视频后生成缩略图

```bash
# 1. 压缩视频（保证产品展示质量）
ffmpeg -i raw_product.mp4 -c:v libx264 -crf 20 -c:a aac product.mp4

# 2. 生成缩略图
ffmpeg -i product.mp4 -ss 00:00:05 -frames:v 1 product_thumb.jpg

# 3. 告知用户文件大小变化
ls -lh raw_product.mp4 product.mp4
```

### 场景3：批量处理多个产品视频

```bash
# 批量压缩并生成缩略图
for video in product_*.mp4; do
  # 压缩
  ffmpeg -i "$video" -c:v libx264 -crf 20 -c:a aac "compressed_${video}"

  # 生成缩略图
  ffmpeg -i "compressed_${video}" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
done
```

## 重要提示

### 电商场景特殊要求

- 🎨 **质量优先** - 产品视频使用 CRF 18-20，不要过度压缩
- 📏 **文件大小监控** - 始终告知用户处理前后的文件大小变化
- 🖼️ **缩略图质量** - 选择展示效果好的时间点（通常5秒处）
- 🎵 **音频音量** - 合成时注意背景音乐不要盖过产品解说

### 常用参数

- `-c:v copy` - 视频流无损复制（音视频合成时推荐，保持原质量）
- `-shortest` - 以最短流为准（音视频合成必备）
- `-stream_loop -1` - 循环音频（背景音乐常用）
- `-crf 20` - 产品视频推荐质量
