# 视频下载与发布

## yt-dlp 更新方式（pip不可用时）

```bash
curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp && chmod a+rx /usr/local/bin/yt-dlp
```

## Nginx /download/ 路径映射

- `/download/` 路径映射到 `/var/www/downloads/`
- 文件放这里可通过 `http://74.48.56.81/download/文件名` 访问
- 只支持英文文件名（中文文件名URL编码后可能404）
- 支持 mp4 和 webm 格式

## 批量下载 → 转9:16 → 压缩 → 上传 完整流程

### 1. 搜索素材
- 用Yahoo Japan搜索，英文关键词效果更好
- 搜索词模板：`funny [类型] [地区] shorts 2026`（如 `funny village Africa comedy shorts 2026`）
- 从搜索结果提取 YouTube Shorts 链接（`youtube.com/shorts/XXXXX`）
- 搜索结果可能撞题（同一主题多个视频），需人工检查标题去重

### 2. 批量下载
```bash
mkdir -p /root/funny_videos_raw /root/funny_videos_out
cd /root/funny_videos_raw
yt-dlp -f "bestvideo[height>=720]+bestaudio/best[height>=720]/best" \
  --no-playlist -o "%(id)s.%(ext)s" \
  "URL1" "URL2" ...
```

### 3. 转9:16竖屏 + 压缩

⚠️ **必须加 `-level 3.0 -pix_fmt yuv420p`，否则很多手机打不开（黑屏/卡住）！**

```bash
ffmpeg -y -i input.webm \
  -vf "scale=480:-2,pad=480:854:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -preset ultrafast -crf 28 \
  -c:a aac -b:a 64k -ac 2 \
  -movflags +faststart \
  output.mp4
```

**关键参数说明：**
- `-level 3.0`：兼容旧手机（不加这个，iPhone和部分安卓会黑屏）
- `-pix_fmt yuv420p`：硬件解码兼容（不加这个，部分播放器无法渲染）
- `-ac 2`：立体声，单声道在某些设备上有问题
- `scale=480:-2`：宽度480，高度按比例（目标480x854接近9:16）
- `pad=480:854:(ow-iw)/2:(oh-ih)/2:black`：非9:16素材居中+黑边填充

### 4. 二次压缩（超过5MB的文件）
```bash
ffmpeg -y -i input.mp4 \
  -vf "scale=480:-2" \
  -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -preset ultrafast -crf 30 \
  -c:a aac -b:a 48k \
  -movflags +faststart \
  output.mp4
```
仍然超标：crf提到35，b:a降到32k，scale降到360:-2（同时加-level 3.0 -pix_fmt yuv420p），-t限制20秒

### 5. 验证能在手机播放

转完后用ffprobe检查编码：
```bash
ffprobe -v quiet -print_format json -show_streams output.mp4
# 确认 codec_name=h264, profile=Baseline, level=30, pix_fmt=yuv420p
仍然超标：crf提到35，b:a降到32k，scale降到360:-2（同时加-level 3.0 -pix_fmt yuv420p），-t限制20秒

### 5. 验证能在手机播放

转完后用ffprobe检查编码：
```bash
ffprobe -v quiet -print_format json -show_streams output.mp4
# 确认 codec_name=h264, profile=Baseline, level=30, pix_fmt=yuv420p
```

**⚠️ 实测教训（2026-05-31）：**
第一次用 `-crf 30, scale=1080:1920` 转换，文件能在电脑浏览器打开但**手机只有声音画面不动**。
第二次用 `-crf 28, scale=480:-2, -level 3.0, -pix_fmt yuv420p` 后手机正常播放。
**结论：移动端必须用更低分辨率+yuv420p，光baseline profile不够。**

### 6. 改英文文件名
中文文件名在URL中有编码问题，**必须改为英文**再上传。

### 7. 上传 + 验证
```bash
cp *.mp4 /var/www/downloads/
# 验证HTTP 200
curl -s -o /dev/null -w "%{http_code}" "http://74.48.56.81/download/文件名.mp4"
```

## 已知配置

- 端口只开放了 80/443/22，其他端口被防火墙 DROP，不要用
- nginx root: `/var/www/html/`，download alias: `/var/www/downloads/`
