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

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

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

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

ffmpeg -async 1 -y -i audio.wav -i  video.webm -vcodec libx264 output.mp4

我尝试使用 areasample 过滤器和 avconv 给出了错误

No such filter: 'areasample'
Error opening filters!

为了

avconv -y -i audio.wav -i  video.webm -vcodec libx264 -filter "areasample=asyncts:compensate" output.mp4

我怎样才能使视频同步?

更新:

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

答案1

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

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

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

ffmpeg -i audio.wav -af "atrim=start=0.5" -i video.webm -vcodec libx264 output.mp4

PS 使用来自 git 的 ffmpeg 或为您的操作系统找到最新的软件包。

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

相关内容