问题标签 [audio-video-sync]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3557 浏览

python - 如何使用ffmpeg在python中合并音频和视频文件?

我正在尝试创建一个 python 脚本,将音频和视频文件合并到一个(音频+视频)文件中。

我正在使用 ffmpeg 来实现这一点,但它无法正常工作并且我遇到了错误。在运行此脚本时,这是我的脚本。

这是错误

0 投票
0 回答
30 浏览

javascript - 在多个标签/浏览器/设备上同步 1 个视频

我是一名初学者——cs 学位学生,我终于做了一个我想做的小项目——我自己的 watch2gether 副本。到目前为止,我发现的主要问题是我不知道如何在多个标签/浏览器/设备之间同步视频。可以在前端使用js吗?如果是这样,我应该寻找什么来学习如何去做。如果没有,我需要学习什么才能使它成为可能?先感谢您。祝你今天过得愉快!:)

0 投票
0 回答
111 浏览

python - 您如何将转换为 mel 频谱图的语音音频与视频同步,使其帧完美?

所以基本上我有一个以每秒 29.97 帧的速度录制的视频剪辑。
它包含以 44100 Hz 频率录制的语音。

每帧包含 1/29.97 = 0.0333667 秒的音频,转换为每帧 1471.47147 个音频样本。

我提取语音并使用以下参数生成对数梅尔频谱图:

  • 窗口长度:1472 个样本。
  • 跳跃长度:736 个样本。
  • N_Mels = 80

由于我只能对这些参数使用非负值,因此我每秒有大约15.84个样本的错位((1472-1471.47147)*29.97)

由于我实验的性质,我需要我的音频尽可能接近视频帧同步。我能想到的一个快速解决方案是丢弃最后几个视频帧(通常是 1-10 个,因为它们最终由于未对齐而没有音频信息)。显然这不是理想的,所以我很想就如何最好地对抗错位提出一些建议或建议。我还在下面附上了我当前的代码:

0 投票
1 回答
33 浏览

audio - 将音乐同步到基于帧的时间

我正在制作一个游戏,其中有一系列事件(例如,在 60fps 设置中每 30 帧发生一次),我想与音乐同步(以 120 bpm)。在通常情况下,例如节奏游戏,将事件与音乐同步更容易,因为人类似乎感知到音乐中的间隙比视频中小得多。然而,就我而言,游戏很大程度上依赖于基于帧的时间,如果我改变我的系列赛事的时间表,很多事情都会中断。

经过大量实验,在我看来几乎不可能在不干扰人耳的情况下调整音乐:~1ms 的跳跃很明显,视频和音频之间的~10ms 差异很明显,音调变化 0.5% 很明显. 而且我没有方便的工具来加速音频而不改变音高。

在这种情况下,最简单的出路是什么?我可以参考有关此主题的任何参考吗?任何建议表示赞赏!

0 投票
0 回答
11 浏览

gstreamer - 无论如何,我们是否可以使用音频和视频缓冲区的 pts 来检测播放是否处于 avsync 中?

我有一个媒体播放器,它基本上是一个基于 gstreamer(playbin) 的应用程序媒体播放。从 gstreamer 日志中,我如何使用音频和视频缓冲区的 pts 值来识别播放是否存在 avsync 问题?如果不使用 pts 是否有任何其他方法可以检测 avsync。

0 投票
0 回答
56 浏览

python - 使用 pygame 和 pyaudio 实现独立流的精确音视频同步

我正在建立一个实验,其中说话人的视频在屏幕内随机移动。用户/播放器应跟随视频并专心聆听语音,同时还播放并发说话者的干扰音轨。

为了更轻松地操作视频位置和音频播放功能,我选择将视频和音频(都属于同一个原始 .mp4)作为独立的流播放。因此,我的主要要求是视频和音频流之间的精确同步,理想情况下是口型同步精度——模拟完美同步的视频播客。请注意,我需要在整个播放时间(最多 10-15 分钟)内保持同步。

在一些文档之后,我认为pyaudiopygame提供了一个很好的框架来实现这一点。

因此,我继续从 mp4 中提取音频流,并通过回调模式下的 pyaudio 模块在 2 个单独的通道上与干扰扬声器的音频一起播放(采样频率为48kHz缓冲区大小256个样本)。将在新线程Pyaudio中播放流:

对于视频播放,我使用pygame循环通过open-cv模块(cv2)读取新的视频帧,计算新的随机位置并在每次游戏循环更新迭代时将其传送到屏幕上。

Media 类同时处理这AudioPlayer()两者VideoPlayer()。一旦按下屏幕上的按钮(代码省略),实验条件开始,即同时播放音频和视频。每次游戏循环迭代,update()都会在Media类中调用一个函数来加载下一个视频帧。这也是我通过计算音频流(由不同线程处理)和视频流(由当前线程处理)之间的延迟来处理同步的地方。pyAudiopygame

主游戏循环中,我尝试通过调整 pygame 循环的 fps来补偿AV(视听)延迟,方法是使用:clock.tick_busy_loop()

不幸的是,这段代码没有达到我需要的精确同步。所做的是,在播放大约 20-30 秒后,视频流开始加速,与音频不同步。也许我对如何补偿主游戏循环中的延迟的理解是不正确的。


我还尝试了另一种方法,即保持 fps 恒定pygame.display.update()(30 fps,与视频的 fps 匹配),同时在类内调用之前补偿延迟Media,以便在正确的时间精确显示下一个视频帧。我在里面使用的代码Media.update()是:

第二种方法似乎也不起作用 - 在 20-30 秒的良好同步播放后,AV 流开始分流,视频逐渐比音频快(几毫秒),使得不同步变得明显。


由于我已经花了两个多星期的时间来调试这个,我期待一些外部的启示。非常感谢!

最后说明:我正在Windows 10使用Python 3.10.1.