FFmpegFrameRecorder 切分视频文件时结束条件设置不当导致切分后的文件过短问题

embedded/2024/11/27 12:01:59/

问题

下游反馈使用 ffmpeg 切割后的音频文件,无法正确识别其声音的性别

排查流程

1,由于线上大部分用户上传音频后,进行切分后的音频都没问题,因此考虑到这些无法识别性别的音频,有格式问题,需要找出其共性,因此查日志导出所有的错误音频

2,发现这些音频格式都是 mp4(mp4 其实是视频文件但是也包含音频)

3,考虑下游不支持识别 mp4 编码的音频,所以做了一个实验:将完整的音频丢给下游,发现可以正确识别

4,简单看了一下代码了解逻辑,考虑是 ffmpeg 内部切分问题,执行 mp4.ffmpeg -i input.mp4 -ac 1 -ar 16000 output.wav 这条命令,并了解 ffmpeg 在内部会做什么。可能是因为内部切分消息不当导致报错的

5,了解采样率、声道、通道数、样本格式为16位,显式设置音频编码器为 MP3。使用 ffmpeg 拆分 mp3 音频,发现没问题。使用 FFmpegFrameRecorder 拆分 mp4 音频,并且导出,发现只截取了前 130 ms 的内容

6,跟代码发现一个 break 逻辑,很可能是这个问题,结果测试发现,视频没结束但是 frame.samples 为 null 了。发现问题根源

                while ((frame = grabber.grabFrame()) != null) {// samples 表示音频帧,有些视频文件的中间音频帧为空if (frame.samples == null) {// 加了这一层判断,处理了问题。这里额外做音频帧的判断
//                        if (frame.image != null) {
//                            continue;
//                        }break;}// 业务逻辑...}

问题总结

视频文件的中间音频帧可能为空导致的问题


http://www.ppmy.cn/embedded/140891.html

相关文章

非线性控制器设计原理

非线性控制器设计原理 非线性控制器设计旨在解决非线性系统的控制问题,克服传统线性控制器在处理非线性现象(如饱和、死区、耦合、时变性等)时的不足。其核心在于利用非线性数学工具和设计方法,使控制系统在非线性条件下具备良好…

GaussDB高智能--库内AI引擎:模型管理数据集管理

书接上文库内AI引擎:机器学习算法的训练和推理,从机器学习算法的训练和推理方面对GaussDB的库内AI引擎进行了详细解读,本篇将从模型管理与数据集管理两方面,继续介绍GaussDB库内AI引擎。 3.2 模型管理 在机器学习算法进行训练后…

【2024】前端学习笔记19-ref和reactive使用

学习笔记 1.ref2.reactive3.总结 1.ref ref是 Vue 3 中用来创建响应式引用的一个函数,通常用于基本数据类型(如字符串、数字、布尔值等)或对象/数组的单一值。 ref特点: ref 可以用来创建单个响应式对象对于 ref 包裹的值&…

PHP中类名加双冒号的作用

在 PHP 中,类名加双冒号(::) 是一种用于访问类的静态成员和常量的语法。它也可以用来调用类的静态方法和访问 PHP 的类相关关键词(如 parent、self 和 static)。以下是详细的解释和用法。 1. 用途概述 :: 被称为作用域…

链表中倒数最后k个结点 (双指针法)(难易度:简单)

双指针法是一个高效的算法,用来解决链表中倒数第 (k) 个节点的问题。以下是详细的通俗讲解: 基本思路 使用两个指针 fast 和 slow。首先让 fast 指针先走 (k) 步,这样它就比 slow 指针领先 (k) 个节点。然后同时移动 fast 和 slow 指针&…

Qt实现窗口内的控件自适应窗口大小

前言:因为有时候窗口内的控件比较大,但是为了同时操作多个窗口,希望可以根据情况,在调整窗口大小时,控件能自适应大小,于是通过遍历整个界面内的控件,并在调整大小的事件中按比率调整控件大小实…

Python设计模式详解之16 —— 观察者模式

Python 中的 Observer(观察者)设计模式 是一种行为型设计模式,用于定义一种订阅机制,让多个观察者对象在某一对象的状态发生变化时自动接收到通知。该模式常用于事件驱动的架构,例如 GUI 系统、消息推送系统等。 Obser…

打造优秀技术文档的三大方向

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…