ffmpeg/avconv 异步不起作用 - 取消同步音频

Kha*_*eel 1 audio webcam sync ffmpeg libav

我有一个 javascript,可以将来自网络摄像头的视频记录为 webm,将来自麦克风的音频记录为 wav。我正在编码这些 webm 和 wave 文件以使用 ffmpeg/avconv 生成一个 mp4 文件。但我注意到音频长度和视频长度存在微小差异,这使得输出不同步。

我尝试了 async/asyncts 选项,但我注意到输出没有差异,仍然不同步

ffmpeg -async 1 -y -i audio.wav -i  video.webm -vcodec libx264 output.mp4
Run Code Online (Sandbox Code Playgroud)

我尝试使用带有 avconv 的 areasample 过滤器给了我错误

No such filter: 'areasample'
Error opening filters!
Run Code Online (Sandbox Code Playgroud)

为了

avconv -y -i audio.wav -i  video.webm -vcodec libx264 -filter "areasample=asyncts:compensate" output.mp4
Run Code Online (Sandbox Code Playgroud)

如何让视频同步?

更新:

我的音频长度小于视频长度。我正在使用命令 ffmpeg -itsoffset -00:00:01 -y -i audio.wav -i video.webm -vcodec libx264 output.mp4 使它们同步。但我不确定总是会有 1 秒的差异。所以我正在寻找一种可以动态管理它的解决方案(为丢失的音频长度添加偏移量)。

ptQ*_*tQa 5

仅当您的音频和视频流中有时间戳时,选项 -async 才有帮助。我怀疑你有它。这就是为什么您看不到任何输出差异的原因。

因此,您的问题可能是视频和音频的持续时间和开始时间不同。如果是这样,您应该修剪音频或视频流(这取决于您的音频或视频是否更长)。

您尚未指定哪个更长,哪个不同步时间(以秒为单位)。所以我举了一个例子。假设您的音频提前 0.5 秒。然后你应该运行:

ffmpeg -i audio.wav -af "atrim=start=0.5" -i video.webm -vcodec libx264 output.mp4
Run Code Online (Sandbox Code Playgroud)

PS 从 git 使用 ffmpeg 或为您的操作系统找到最新的包。

更新: Ffmpeg 没有关于应该与某个视频帧同时显示哪个音频包的任何信息。您应该使用一些在流中具有时间戳的容器,例如 mpegts,而不是 wav。