问题标签 [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.
python - 如何使用ffmpeg在python中合并音频和视频文件?
我正在尝试创建一个 python 脚本,将音频和视频文件合并到一个(音频+视频)文件中。
我正在使用 ffmpeg 来实现这一点,但它无法正常工作并且我遇到了错误。在运行此脚本时,这是我的脚本。
这是错误
javascript - 在多个标签/浏览器/设备上同步 1 个视频
我是一名初学者——cs 学位学生,我终于做了一个我想做的小项目——我自己的 watch2gether 副本。到目前为止,我发现的主要问题是我不知道如何在多个标签/浏览器/设备之间同步视频。可以在前端使用js吗?如果是这样,我应该寻找什么来学习如何去做。如果没有,我需要学习什么才能使它成为可能?先感谢您。祝你今天过得愉快!:)
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 个,因为它们最终由于未对齐而没有音频信息)。显然这不是理想的,所以我很想就如何最好地对抗错位提出一些建议或建议。我还在下面附上了我当前的代码:
audio - 将音乐同步到基于帧的时间
我正在制作一个游戏,其中有一系列事件(例如,在 60fps 设置中每 30 帧发生一次),我想与音乐同步(以 120 bpm)。在通常情况下,例如节奏游戏,将事件与音乐同步更容易,因为人类似乎感知到音乐中的间隙比视频中小得多。然而,就我而言,游戏很大程度上依赖于基于帧的时间,如果我改变我的系列赛事的时间表,很多事情都会中断。
经过大量实验,在我看来几乎不可能在不干扰人耳的情况下调整音乐:~1ms 的跳跃很明显,视频和音频之间的~10ms 差异很明显,音调变化 0.5% 很明显. 而且我没有方便的工具来加速音频而不改变音高。
在这种情况下,最简单的出路是什么?我可以参考有关此主题的任何参考吗?任何建议表示赞赏!
gstreamer - 无论如何,我们是否可以使用音频和视频缓冲区的 pts 来检测播放是否处于 avsync 中?
我有一个媒体播放器,它基本上是一个基于 gstreamer(playbin) 的应用程序媒体播放。从 gstreamer 日志中,我如何使用音频和视频缓冲区的 pts 值来识别播放是否存在 avsync 问题?如果不使用 pts 是否有任何其他方法可以检测 avsync。
python - 使用 pygame 和 pyaudio 实现独立流的精确音视频同步
我正在建立一个实验,其中说话人的视频在屏幕内随机移动。用户/播放器应跟随视频并专心聆听语音,同时还播放并发说话者的干扰音轨。
为了更轻松地操作视频位置和音频播放功能,我选择将视频和音频(都属于同一个原始 .mp4)作为独立的流播放。因此,我的主要要求是视频和音频流之间的精确同步,理想情况下是口型同步精度——模拟完美同步的视频播客。请注意,我需要在整个播放时间(最多 10-15 分钟)内保持同步。
在一些文档之后,我认为pyaudio和pygame提供了一个很好的框架来实现这一点。
因此,我继续从 mp4 中提取音频流,并通过回调模式下的 pyaudio 模块在 2 个单独的通道上与干扰扬声器的音频一起播放(采样频率为48kHz,缓冲区大小为256个样本)。将在新线程Pyaudio
中播放流:
对于视频播放,我使用pygame
循环通过open-cv
模块(cv2)读取新的视频帧,计算新的随机位置并在每次游戏循环更新迭代时将其传送到屏幕上。
Media 类同时处理这AudioPlayer()
两者VideoPlayer()
。一旦按下屏幕上的按钮(代码省略),实验条件开始,即同时播放音频和视频。每次游戏循环迭代,update()
都会在Media
类中调用一个函数来加载下一个视频帧。这也是我通过计算音频流(由不同线程处理)和视频流(由当前线程处理)之间的延迟来处理同步的地方。pyAudio
pygame
在主游戏循环中,我尝试通过调整 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
.