28 lines
1.1 KiB
Markdown
28 lines
1.1 KiB
Markdown
# 转码保持原始宽高比
|
||
|
||
## 目标
|
||
|
||
- 横屏源按档位短边作为高度,竖屏源按档位短边作为宽度。
|
||
- 源短边小于档位短边时按源短边输出,不放大。
|
||
- 输出宽高均为偶数,SAR 固定为 1。
|
||
- rendition 的 width/height 使用 ffprobe 探测到的实际值。
|
||
|
||
## 实施
|
||
|
||
1. ffprobe 读取源显示方向尺寸,旋转 90/270 度时交换宽高。
|
||
2. `effectiveShort = min(sourceShort, rungShort)` 并向下取偶数。
|
||
3. 横屏使用 `scale=-2:<effectiveShort>:flags=lanczos,setsar=1`;
|
||
竖屏使用 `scale=<effectiveShort>:-2:flags=lanczos,setsar=1`。
|
||
4. 转码完成后 ffprobe variant playlist,写入实际输出尺寸。
|
||
5. master playlist 的 RESOLUTION 同步使用实际尺寸。
|
||
|
||
## 不放大策略
|
||
|
||
选用“用源尺寸输出”:高于源短边的档位仍保留原 quality 标识和码率,
|
||
但分辨率封顶到源短边,避免所有档位都被跳过导致无产物。
|
||
|
||
## 验证
|
||
|
||
- 先补横屏、竖屏、小源码片、偶数、SAR=1 与实际尺寸回写测试。
|
||
- 门禁:`mvn -pl fruitshorts-module-media,fruitshorts-transcode-worker test`。
|