问题标签 [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 投票
0 回答
8259 浏览

ffmpeg - FFmpeg - 非单调递增的 dts 是什么意思?

观察 - 第一部分 - I

我在其他地方看到了运行以下命令的建议,以查看我的 .mp4 是否有问题。

当我运行上述命令时,我会在下面显示的行中看到一大堆日志。

应用程序在流 0 中向多路复用器提供了无效的、非单调递增的 dts:15635 >= 15635

这一点,通过搜索和阅读,我了解到解码时间戳不是按顺序排列的。

观察 - 第二部分

但是,使用以下命令和一些后处理检查同一 mp4 的帧,我没有看到pkt_dtsframes_info json 中的视频或音频流出现故障。

这让我怀疑我对Observations - Part - I的初步理解

这两件事不相关吗?对此的任何帮助将不胜感激。

0 投票
0 回答
1398 浏览

ffmpeg - ffmpeg 合并两个视频(未连接)不同步

我正在尝试通过 URL 将相机中的视频与视频合并并显示 [pip]。它显示得很好,但声音不同步。我的代码是

url-input(首先显示视频和音频)和第一个输入之间有将近一秒的延迟。我怎样才能让它们同步?

0 投票
1 回答
234 浏览

ffmpeg - 垂直视频播放不与多个堆叠视频同步

不知道题主写得好不好,能不能看懂。不过,这里有一个解释

我有 7 个不同尺寸的视频,宽度相同(1080)。我希望将它们放在另一个下方以获得完整的高清垂直视频(1080x1920)。我在 ffmpeg 中尝试了-filter_complex vstack过滤器,让所有视频彼此对齐,我得到了一个完美的 1080x1920 全高清垂直视频,但它们彼此不同步。视频同步后,我还需要放置一个音频,该音频也应该与将要制作的同步视频同步。

有这么多的复杂性。请建议我如何使它们同步。有没有什么软件可以让我将 7 个视频在时间线上一个一个地放在另一个之下?(如果不是 7 个,至少 3-4 个视频)。请告知从哪里以及如何开始。

Adobe Premier 或任何其他软件中是否有任何选项?

谢谢

编辑:我正在做一个很长的过程来垂直组合所有 7 个视频

首先我使用

ffmpeg -i video1.mp4 -i video2.mp4 -preset veryslow -filter_complex vstack video12.mp4

接着

ffmpeg -i video12.mp4 -i video3.mp4 -preset veryslow -filter_complex vstack video123.mp4

等等等等

有没有更好的方法在一个命令中完成所有操作?

0 投票
1 回答
1393 浏览

javascript - WebRTC:在 JavaScript 和本机代码对等点之间同步视频帧

它遵循我试图以正确方式实现的设计:我有一个 JavaScript 对等体,它将视频轨道发送到本机代码对等体。在传输过程中的某个时刻(实际上是在建立连接后立即,但可能在任何时候)我想在 JS 对等端启动秒表并执行一些临时操作,实际上是在覆盖视频播放的画布上进行一些渲染. 在本机对等端,我希望能够在秒表在 JS 对等点上启动的那一刻同步,并只考虑在那一刻之后记录的接收到的帧,执行一些其他类型的处理。我现在在做什么(脆弱和有限的解决方案):

  • 一旦对等点连接,跟踪RTCPeerConnection.iceConnectionState,我就在 JS 对等点上启动秒表;
  • 一旦第一个webrtc::VideoFrame到达本地对等点,我就存储帧时间垃圾;
  • 在 Native peer 上,我使用第一帧时间戳来计算相对时间,类似于秒表允许我在 JS peer 上使用的方式。

这种设计是有限制的,因为我可能希望在任何时刻同步,而不仅仅是在对等连接建立时,而且还很脆弱,因为我认为 WebRTC 协议允许出于任何原因(延迟或传输错误)丢弃第一个接收到的帧。理想情况下,我想在 JS 对等点中选择的同步点获取时间戳,将其发送到本机对等点并能够比较webrtc::VideoFrame时间戳。我无法天真地做到这一点,因为VideoFrame::timestamp_us()显然有一些我不知道的偏差。我也无法解释VideoFrame::timestamp(),在 中记录得很差api/video/video_frame.hVideoFrame::ntp_time_ms()已弃用,实际上总是返回-1。我应该怎么做才能在两个对等点之间完成这种同步?

0 投票
0 回答
90 浏览

ios - 如何在不丢失视频原始声音的情况下将音频与视频合并 - iOS Swift

我的目标是将音频(mp3 音乐)与 iPhone 相机捕获的视频合并,我可以使用将音频与视频合并,AVMutableComposition但最终输出的视频声音不会出现。

下面是我正在使用的代码:

0 投票
1 回答
460 浏览

c++ - 媒体基础视频重新编码产生音频流同步偏移

我正在尝试编写一个简单的 Windows Media Foundation 命令行工具来使用IMFSourceReaderIMFSyncWriter加载视频,将视频和音频读取为未压缩的流,并使用一些特定的硬编码设置将它们重新编码为 H.246/AAC。

简单的程序 Gist 在这里

示例视频 1

示例视频 2

示例视频 3

(注意:我一直在测试的视频都是立体声,48000k 采样率)

该程序可以运行,但是在某些情况下,当将新输出的视频与编辑程序中的原始视频进行比较时,我看到复制的视频流匹配,但副本的音频流预先固定了一些静音和音频是偏移量,这在我的情况下是不可接受的。

在这种情况下,进入的第一个视频帧具有非零时间戳,但第一个音频帧确实具有 0 时间戳。

我希望能够生成一个复制的视频,其视频和音频流中的第一帧为 0,因此我首先尝试videoOffset从所有后续视频帧中减去初始时间戳(),从而生成我想要的视频,但结果是这样音频情况:

音轨现在向另一个方向移动了一小部分,但仍然没有对齐。有时,当视频流的起始时间戳为 0但 WMF 仍会在开头截断一些音频样本时,有时也会发生这种情况(请参见示例视频 3)!

我已经能够修复此同步对齐并将视频流偏移到从 0 开始,并在将音频样本数据传递到时插入以下代码IMFSinkWriter

奇怪的是,这会创建一个与原始视频文件匹配的输出视频文件。

解决方案是在音频流的开头以 1024 的块大小插入额外的静音。提供的音频块大小无关紧要IMFSourceReader,填充是 1024 的倍数。

示例视频 2 的不同尝试的音轨偏移的屏幕截图

我的问题是静音偏移似乎没有可检测的原因。为什么我需要它?我怎么知道我需要多少?经过几天的努力,我偶然发现了 1024 样本静音块解决方案。

有些视频似乎只需要 1 个填充块,有些需要 2 个或更多,有些则根本不需要额外的填充!

我的问题是:

  • 有谁知道为什么会这样?

  • 在这种情况下我是否错误地使用了 Media Foundation 来导致这种情况?

  • 如果我是正确的,我如何使用视频元数据来确定我是否需要填充音频流以及填充中需要多少 1024 个静音块?

编辑:

对于上面的示例视频:

  • 示例视频 1:视频流从 0 开始,不需要额外的块,原始数据的传递工作正常。

  • 示例视频 2:视频流从 834166 (hns) 开始,需要 1 1024 块静音才能同步

  • 示例视频 3:视频流从 0 开始,需要 2 1024 个静音块才能同步。

更新:

我尝试过的其他事情:

  • 增加第一个视频帧的持续时间以解决偏移:不产生任何效果。
0 投票
0 回答
872 浏览

audio - ffmpeg 流媒体视频不同步

我在保存流媒体时遇到问题ffmpeg。问题是视频与音频不同步。

视频在音频前 2-3 秒出现。

我尝试删除和编辑选项,但没有任何改变,我也进行了一些研究,并尝试了此处发布的这个很好的答案中描述的所有解决方案,但它对我不起作用。

我试图从播放列表中下载一个块,并且我有一个.ts音频/视频同步的文件。

如果我播放流媒体,VLC player我可以在几秒钟内听到没有视频的音频,然后视频会出现并与音频同步。

ffplay也可以正确播放相同的流:音频和视频编解码器中似乎有时间信息,并且可以正确同步播放。

如何让 ffmpeg 同步音频和视频?

如果您需要 ffmpeg 或 ffplay 输出,我会发布它们。


编辑:根据要求,我报告了一个简单命令的完整 ffmpeg 输出,以将流输出保存到文件:

0 投票
1 回答
475 浏览

objective-c - AVAssetExportSession 在尝试合并多个视频/音频剪辑时导致音频视频不同步

我正在尝试将一堆包含音频和视频的视频剪辑合并到一个更长的视频文件中。
AVMutableComposition *mainComposition = [[AVMutableComposition alloc] init]; AVMutableCompositionTrack *compositionVideoTrack = [mainComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

这可行,但是在第一个剪辑之后音频和视频之间存在不同步。视频如果您观看第一个剪辑,则音频完全同步,然后如果您向前跳到 15 分钟标记,您会注意到视频和音频之间明显不同步。经过一番搜索,我能够发布这篇iOS AVFoundation audio/video out of sync

其中有一个链接,它解释了压缩时音频加入空白样本的情况。在压缩音频文件的正面和背面。技术说明 TN2258 AAC 音频 - 编码器延迟和同步

现在我想我可以做些什么来解决这个问题是设置一个 AVAssetReader ,其中视频和音频输出都通过音频和视频帧的每个 CMSamplebuffer 读取,然后将它们解压缩并将其放入 AVAssetWritter 并为每个剪辑重复此操作。但我不确定如何始终保持音频和视频同步。我是否只是获取每个音频帧并按原样添加它,还是我试图修剪空白启动和剩余的数据包帧?

谢谢你的帮助!

0 投票
4 回答
4397 浏览

python-3.x - 如何在 Pytube 中合并音频和视频?

我正在尝试编写代码以在 Python 3.6 上使用 Pytube 下载 YouTube 视频。但对于大多数视频,渐进式下载(同一文件中的音频和视频)格式仅支持 360p。所以我想分别下载音频和视频文件并合并。我能够下载音频和视频文件。如何将两个文件组合在一起?

0 投票
1 回答
501 浏览

javascript - 在 Windows 10 的 Chrome 上录制和播放 webm 块时出现音频/视频同步问题

问题

我正在Windows 10 中的 Chrome 83 上通过MediaRecorder记录 webm 块,并将这些块发送到其他计算机。这些块正在使用Media Source Extension(MSE)在另一个 Chrome 上播放。

在 1 到 1.20 秒之间一切正常。但在那之后,音频/视频同步问题就开始了。目前音视频的差距很小,但随着时间的增加,差距也在拉大。

奇怪的是我们可以在不同的浏览器上看到不同的行为,让我通过

在此处输入图像描述

Chrome 的版本在几乎所有操作系统中都是 83+。

相机可以是问题吗?

我认为相机不是问题,因为我在同一台机器上有双操作系统 Fedora 和 Windows。并且 webm 块在 Fedora 上运行良好。

采样率可能是问题吗?

我对此表示怀疑。但是当我比较浏览器在播放时使用的采样率时。chrome://media-internals显示有和没有同步问题的48000

在此处输入图像描述

来自 Chrome 的警告消息

有同步问题的 Chrome 也显示以下消息chrome://media-internals

在此处输入图像描述

问题:

为什么在 Windows 10 的 Chrome 浏览器上进行录制和播放时会出现音频/视频同步问题?

如何消除此同步问题?