提交问题前,请尽量一次性提供完整信息。
信息不完整、无明确复现路径、缺少关键日志的帖子,将不予处理并直接关闭;请补充完整信息后重新发帖。
请先按下方格式填写;除以下基础信息外,也请根据你遇到的问题补充截图、录屏、报错提示、复现步骤等信息,便于更快定位和处理。
应用中心第三方开发者上架应用问题可以联系对应开发者反馈。
系统版本:X86
设备环境:物理机、局域网/公网 fnOS 1.1.3107

BUG现象:小米手机的视频在飞牛相册上播放,横拍格式的正常,竖拍的视频只有声音,问Deepseek说是旋转故障,给出了临时方案,希望飞牛直接解决这个小问题。
- 旋转(Rotation):第一个为
Rotation: 0,第二个为 Rotation: 90。这是一个巨大的危险信号。
- 矩阵结构(MatrixStructure):第一个为
1 0 0 0 1 0 0 0 1(单位矩阵,无变换)。第二个为 0 1 0 -1 0 0 0 0 1(顺时针旋转 90 度的变换矩阵)。)
出现频率:必现
联系方式:13702521260
你提供的这两个元数据对比非常关键,问题根源已经锁定:
第二个视频(有声音无画面)是因为它是竖屏录制(旋转90度)的视频,而飞牛相册的播放器/转码内核在处理这个“旋转元数据”时存在兼容性 Bug,导致视频解码渲染失败(丢帧),只保留了音频流。
以下是详细的技术诊断和解决方案:
1. 核心差异对比(元数据“实锤”)
| 元数据字段 |
第一个(正常播放) |
第二个(只有声音) |
影响分析 |
| Rotation |
0 |
90 |
告诉播放器画面需要顺时针旋转90度显示 |
| MatrixStructure |
1 0 0 0 1 0 0 0 1(单位矩阵) |
0 1 0 -1 0 0 0 0 1(旋转变换矩阵) |
底层几何变换指令,强行将横向像素映射为纵向 |
| 实际编码尺寸 |
1920x1080(横) |
1920x1080(横) |
关键点:小米10录制竖屏视频时,并未物理重编码像素,而是依然按横屏编码,仅靠元数据(Rotation/Matrix)让播放器旋转显示。 |
故障原理:飞牛相册(基于FFmpeg)在解码此视频时,软件解码器或硬件加速器(如VAAPI/V4L2)错误地读取了旋转矩阵,导致渲染管线输出的画面尺寸映射失败(例如试图将1920宽渲染到1080宽的缓冲区),视频渲染层直接崩溃或跳过,而音频轨道独立解码不受影响,因此只有声音。
2. 解决方案(按推荐优先级)
方案一:物理转码修复(彻底根治,推荐)
使用 FFmpeg 将旋转元数据物理写入像素,生成一个“真正”的竖屏视频(1080x1920),这样任何播放器都无需处理旋转标志。
在命令行执行(SSH登录飞牛NAS或本地电脑):
ffmpeg -i VID_20260621_182248.mp4 -vf "transpose=1" -c:a copy -metadata:s:v:0 rotate=0 修复版_VID_20260621_182248.mp4
transpose=1:顺时针旋转90度(如果画面倒过来了,试试改为 2 逆时针)。
-c:a copy:直接复制音频流,无损且极快。
-metadata:s:v:0 rotate=0:强行清除残留的旋转元数据。
方案二:飞牛相册后台调试(临时规避)
如果不想转码,尝试在飞牛相册的 系统设置 -> 转码设置 中:
- 关闭“硬件加速转码”(强制使用软解)。部分硬解驱动(尤其是Intel QSV或RK3588)对旋转矩阵支持较差,软解通常能正常解析。
- 如果开启了“智能封面/缩略图”生成,尝试关闭,因为缩略图生成失败有时会连带影响主视频渲染。
方案三:批量批量修复(针对大量故障视频)
你提到“故障视频挺多的”,可以在NAS上写一个简单的脚本,批量处理所有带90度旋转的视频。
飞牛NAS(Debian系)一键批量修复脚本示例(放在视频目录下执行):
# 查找所有 Rotation 为 90 的视频并修复(会生成新文件,注意磁盘空间)
for f in VID_*.mp4; do
if exiftool -Rotation "$f" | grep -q "90"; then
ffmpeg -i "$f" -vf "transpose=1" -c:a copy -metadata:s:v:0 rotate=0 "fixed_${f}"
fi
done
3. 预防建议
小米10相机默认开启了**“根据陀螺仪自动旋转”**,导致竖拍视频自动打上旋转标签。建议:
- 在小米相机 设置 -> 更多设置 中,关闭“自动旋转”或“视频旋转信息”选项(不同MIUI版本叫法略有不同),这样竖拍视频会直接编码为 1080x1920 物理尺寸,飞牛相册将完美播放。
4. 向飞牛官方反馈
你可以将这两个元数据日志和问题描述提交给飞牛官方(论坛或工单),明确指向 MatrixStructure 旋转矩阵兼容性。如果是Web端播放,可能是H5 标签的 transform 样式未正确处理;如果是APP端,可能是底层ExoPlayer/IJKPlayer未启用 setRotateDegrees 回调。这是典型的播放器层适配疏漏。
如果不想折腾命令行,最简单的治标办法就是拍摄时保持手机横屏(不触发旋转元数据),这样第一个正常播放的视频就是证明。希望这些能帮你批量解决这批视频!如果执行FFmpeg命令时遇到报错,随时告诉我具体报错内容。