问题标签 [matroska]

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 投票
1 回答
1046 浏览

ffmpeg - 如何从 ffserver 流式传输音频

我尝试流式传输 2 个文件 -1.mkv没有音频(可以流式传输)和2.mkv使用 Vorbis 编解码器编码的音频,但我无法流式传输。对于我使用的编码

它玩得很好ffplay

服务器日志:

客户端日志:

配置ffserver文件:

0 投票
1 回答
296 浏览

ffmpeg - 将 h264 字节流重新打包到 Matroska 输出

我有一个应用程序,它从用户那里捕获多个视频流并将它们放入一个 mkv 输出文件中。

数据来自 RTP 数据包。我使用h264。

我正在使用 ffmpeg 和bytedeco/javacpp-presetsbridge for Java 创建 mkv。

出于某种原因,我的输出 mkv 在将容器更改为 mp4 ( ffmpeg -i input.mkv -c copy output.mp4) 后不能由 QuickTime Player 播放。它会打开文件,但在整个持续时间内只显示黑框。

我试图避免重新编码流。

我解决这个问题的尝试之一是以某种方式打包原始 h264 字节流并使用 ffmpeg 再次将其放入 mkv: ffmpeg -i input.mkv -c copy -f h264 - | ffmpeg -i - -c copy output.mkv

但是由于原始 h264 字节流没有时间信息(ffmpeg 警告此处缺少时间戳),它以一些恒定的帧速率对其进行打包,从而导致视频持续时间与原始视频持续时间不同。因此,即从 27 分钟的视频中,我得到 30 分钟的恒定帧速率。

我正在寻找一种无需重新编码即可将我的 h264 视频数据重新打包到 mkv 容器中的方法。

我还尝试NUT了原始数据的容器,因为它保留了一些时间信息,但结果与原始 mkv 相同 - QuickTime 中的黑框。

也许还有其他方法可以调试为什么 QT 没有为我的文件显示任何内容?有没有我可以启用的详细模式,一些日志来看看它是否抱怨什么?

0 投票
1 回答
126 浏览

ffmpeg - 使用 ffmpeg 设置 matroska 附件的名称

因此,当将文件附加到 matroska 容器时,它们会获得一个名称,通常是它们的原始名称。但是,当您运行 Windows 并提供要附加的文件的完整路径时,ffmpeg 将该完整路径设置为附件的名称。如何重命名该附件,最好使用与附件过程相同的命令?

0 投票
2 回答
106 浏览

ffmpeg - WebM DocType 版本表示什么?

如果 WebMDocTypeVersion是 4,那么这意味着什么并与之相关?那是Matroska 规范草案的第 4 版吗?还是 WebM 有自己独立于 Matroska 的版本控制?我在webmproject.org上找不到任何信息

分析创建的 WebM 文件后ffmpeg,我看到“文档类型版本”为 4:

0 投票
1 回答
327 浏览

c++ - 如何从读取文件二进制文件的 mkv 中提取集群的 timstemp

当我读取二进制 mkv 时,集群的 id 是 E7 字节并且时间戳具有无符号整数值,但是当我读取它时,id 并没有给我正确的时间戳。

有什么我错过的吗?

0 投票
1 回答
1195 浏览

webrtc - 如何将使用 WebRTC 录制的音频流传递给 Google Speech api 进行实时转录?

我正在尝试做的是使用 webRTC 获取在浏览器中录制的视频的实时转录。用例基本上是实时字幕,就像谷歌环聊一样。

所以我在浏览器中运行了一个 WebRTC 程序。它将 webm 对象发送回服务器。它们是线性 32 音频编码。Google 语音转文本仅接受 linear16 或 Flac 文件。

有没有办法实时将linear32转换为linear16?

否则,是否有人能够将 webRTC 与 Google 语音连接起来以实现实时转录工作?

关于在哪里寻找解决这个问题的任何建议都会很棒

0 投票
3 回答
650 浏览

video-streaming - gstreamer:m3u8 到 mkv/kinesis 视频失败

我想将 m3u8 流摄取到 kinesis 视频(MKV 格式)。我编译了 kvssink 插件,但 gstreamer 失败并出现未知错误。

也许我需要在发送到 kvssink 之前以某种方式转换流?有人可以评论这一点吗?

命令:

错误

更新

经过小的更改后,它现在可以与 fakesink 一起使用,但仍然会出现 kvssink 错误

错误

0 投票
1 回答
93 浏览

ffmpeg - ffmpeg 从流中附加文件

我有一个带有嵌入式封面艺术的 flac 源文件,以及在保留封面艺术的同时将其转换为 mka 的内容。问题是 matroska 需要附加封面艺术。我可以使用提取原始封面

ffmpeg -i target.flac -vcodec copy cover.jpg

然后使用-attach. 我的问题是,是否有任何方法不从文件加载附加数据,而是从第一个命令(作为流)加载并内联执行此操作。

0 投票
2 回答
1750 浏览

javascript - 如何单独播放由 MediaRecorder 创建的 WEBM 文件

为了录制音频和视频,我在MediaRecorder API的ondataavailable下创建 webm 文件。我必须单独播放每个创建的 webm 文件。

Mediarecorder api 仅将标头信息插入第一个块(webm 文件),因此其余块在没有标头信息的情况下不会单独播放。

正如建议的链接 1链接 2,我已经从第一个块中提取了标题信息,

并将此标头信息附加到第二个块中,第二个块仍然无法播放,但这次浏览器显示视频海报(单帧)和两个块总和的持续时间,例如:10秒;每个块的持续时间为 5 秒。

我用十六进制编辑器做的同样的标题信息。我在编辑器中打开了 webm 文件,并从第一个 webm 文件中复制了前 190 个元素并将其放入第二个文件中,如下图所示,即使这一次,第二个 webm 文件也无法播放,结果与前面的示例相同。

红色显示标题信息:

webm 十六进制

这次我从第一个 webm 文件中复制了标题和集群信息,并将其放入第二个文件中,如下图所示,但没有成功,

webm 十六进制

问题

我在这里做错了什么?

有什么方法可以单独播放 webm 文件/块?

注意:我不能使用MediaSource播放这些块。

编辑 1

正如@Brad 建议的那样,我想将第一个集群之前的所有内容插入到后面的集群中。我有几个 webm 文件,每个文件的持续时间为 5 秒。深入研究文件后,我才知道,几乎每个备用文件都没有聚类点(没有 0x1F43B675)。

在这里我很困惑,我必须在每个文件的开头或每个第一个集群的开头插入标题信息(初始化数据)?如果我选择稍后的选项,那么如何播放没有任何集群的 webm 文件?

或者,首先我需要使每个 webm 文件在一开始就具有集群的方式,这样我就可以在这些文件中的集群之前添加头信息?

编辑 2

经过一番挖掘和阅读后我得出结论,每个 webm 文件都需要头信息、集群和实际数据。

0 投票
1 回答
837 浏览

windows - Mux video files with mkvmerge in a batch with dynamic amount of files

Every time a .mkv file is needed to be muxed it comes with random amount of subtitles, and each subtitle is different language code.

So e.g. Scenario 1:

Scenario 2:

The goal is to everytime running the same batch file make it pick it up amount of subtitles and mux it correctly with correct language codes, etc.

So far we got here:

So far this is fixed amount of subtitles approach, not dynamic, so e.g. scenario 1. It almost works except it picks up every subtitle as last variable, so from scenario 1 each subtitle is muxed three times and named as ger for language and ger.srt used as source all three times because it's last one in the list by alphabet.

Goal: Each !subtitle! should be correct language and subtitle, as I understand by alphabet.