Bla*_*ole 0 ffmpeg aac google-chrome-extension webm web-mediarecorder
当我尝试从 中提取 aac 时webm,会出现持续时间不一致的情况。aac少了十分钟。不同的webm视频,差距是不一样的。
webm视频由chrome.tabCapture.capture生成chrome extension
代码:
chrome.tabCapture.capture({
video: true,
audio: true,
videoConstraints: {
mandatory: {
minWidth: 1920,
minHeight: 1080,
maxWidth: 1920,
maxHeight: 1080,
maxFrameRate: 30,
minFrameRate: 30,
}
}
})
Run Code Online (Sandbox Code Playgroud)
上面的代码会返回一个流,我会使用JS的MediaRecorder方法来处理这个流,最后保存为webm文件。
代码:
new MediaRecorder(stream, {
audioBitsPerSecond: 128000,
videoBitsPerSecond: 2500000,
mimeType: 'video/webm;codecs=vp9'
})
Run Code Online (Sandbox Code Playgroud)
如果你不知道上面代码的意思,没关系,我来解释一下主要信息:
19201080301280002500000video/webm;codecs=vp9我尝试了很多方法,如下所示:
chrome.tabCapture.capture({
video: true,
audio: true,
videoConstraints: {
mandatory: {
minWidth: 1920,
minHeight: 1080,
maxWidth: 1920,
maxHeight: 1080,
maxFrameRate: 30,
minFrameRate: 30,
}
}
})
Run Code Online (Sandbox Code Playgroud)
但无一例外,都失败了。我被这个问题困扰了4天。
webm 文件下载地址:https ://drive.google.com/file/d/1m4fC1hU-tXFPOZayryCs-yteSTxw_TaW/view?usp =sharing
许多会议或网络录音应用程序所做的不是在音频输入丢失或静音(由某个音量阈值定义)时存储静音。WebM 和 MP4 是时间索引容器,因此媒体数据具有用于播放或编辑目的的正确时间戳。.mp3或者.aac不,所以没有时间戳,持续时间是记录和存储的实际音频量的持续时间。另一个问题是,您看到的持续时间ffmpeg -i in.aac是基于文件大小和名义比特率的估计值。对于 VBR 流,此估计可能是错误的。
在带有时间戳的容器中存储和处理音频,如 MP4、MKV 等
ffmpeg -i ./x.mp4 -y -vn -acodec libfdk_aac -b:a 200k ./x.mp4
Run Code Online (Sandbox Code Playgroud)
或插入带有音频静音的时间戳间隙,
ffmpeg -i ./x.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.01 -acodec libfdk_aac -b:a 200k ./x.aac
Run Code Online (Sandbox Code Playgroud)
后一个命令可能仍会显示错误的估计持续时间,但编辑器在生成峰值后将显示正确的持续时间。
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |