问题描述
用例
我的用例大致等于将15秒的mp3文件添加到1分钟左右的视频中。所有转码合并部分都将由 FFmpeg-android 完成,因此现在不必担心。
流程如下
- 用户可以选择mp3的任何15秒(ExoPlayer流)(考虑192Kbps / 44.1KHz的3分钟=最多7MB)
- 然后下载仅15秒的内容并将其添加到视频的音频流中。 (使用FFmpeg)
- 使用获得的输出
尝试过的解决方案
-
Extracting fragment of audio from a url
RANGE_REQUEST -我使用提供的确切示例文件在Kotlin中复制了完全相同的算法/公式。但是输出不正确
(± 1.5 secs * c) where c is proportional to startTime
-
How to crop a mp3 from x to x+n using ffmpeg?
FFMPEG_SS -在使用远程URL作为输入的情况下,它可以完美运行,但是有两个缺点,
因此,以上两种解决方案都没有取得成功,目前,我正在下载整个文件并在本地对其进行修整,这绝对是一个糟糕的UX。 我不知道Instagram的故事功能中的音乐是如何工作的,因为这与我想要实现的功能很接近。
解决方法
这不可能是您想要的方式。 mp3文件没有时间戳。如果您只是跳到mp3的中间(并寻找帧开始标记),然后开始解码,则您不知道该帧的时间是什么,因为帧的大小是可变的。唯一知道的方法是计算当前位置之前的帧数。这意味着您需要整个文件。