问题标签 [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.
gstreamer - 使用 gstreamer 将网络摄像头 jpeg 流保存到多个文件
我正在尝试将来自罗技 C920 网络摄像头的 MJPEG 流保存到多个视频文件 (matroska)。
我有这个管道:(每 60 秒 1 个 mkv 文件)
它按预期输出了几个文件,但是这些文件有错误,因此像 avidemux 这样的工具无法播放它们。mkvalidator 报告这些:
顺便说一句,使用 filesink 保存到单个文件会生成一个没有错误的 mkv 文件。
有没有办法正确保存多个 mkv 文件?任何其他容器也可以,但我无法转码(需要低 CPU 负载)并且我不能使用 raw(需要高 fps 的高清)。
我在 Ubuntu 16.04.1 上使用 GStreamer 1.8.2。
谢谢。
更新:按照以下建议,我尝试使用 splitmuxsink:
但它不起作用:文件永远不会被拆分并且会不断增长。
python-3.x - 流式视频播放器
我需要制作一个视频服务器客户端,其中服务器以块的形式发送视频数据,客户端必须接收并显示它们。与我做过的任何项目不同,我的脑海中没有它的主要结构,因为我找不到用于显示视频的 api 或模块,这些视频可以分成几块。所有要显示的文件都是 matroska .mkv
。我一直在搜索,但我能找到的只有 kivy,它确实提供视频显示,但它需要整个视频,而 gstreamer 也有同样的缺点。谁能给我一个我可以依赖的模块来显示视频?
提前致谢
video - 可以接受额外元数据的最佳视频容器
我正在开发一种软件,可以生成一些具有不同编解码器(H.264、MJPEG ...)的视频。我希望我的视频可以用 VLC 读取,但我希望能够在视频文件中为每一帧(例如时间戳)和全局视频(经过验证的签名)添加一些额外的信息。
我会使用 VLC 的文件,但忽略这些元信息。但是我的自定义播放器将能够读取它们并显示这些信息。
谁能告诉我哪个容器最适合这样做?
我现在正在使用 AVI,但它似乎不支持这一点。我在 Matroska 容器 (MKV) 上阅读了一些似乎能够做到这一点的部分,但我不太确定。
非常感谢
ubuntu - 如何将两个 *.MKA 文件合并为一个?
我有下一个任务 - 有 3 个文件:没有配乐的 *.mkv 文件和两个 *.mka 曲目。我需要将它们全部合并到一个文件中(并通过 ubuntu cli 完成)。我尝试了 mkvmerge 工具,它做得很好,但它生成的视频文件有两个音轨供选择(就像电影中的不同语言),但我需要同时从两个音轨发出声音(也许作为左右频道,没关系)。我试图用谷歌搜索它 - 并没有找到任何东西。谢谢。
ffmpeg - 使用 ffmpeg 将 TS-Stream 转换为 MKV
我正在使用 ffmpeg 3.2.7,我在将 ts 文件无损转换为 mkv 时遇到问题。源文件是使用 dumprtp 录制的转储 IPTV 流(来自 dvbstream 0.5)。
ffmpeg -i Test.ts -map 0:0 -map 0:2 -vcodec copy -acodec copy -f matroska Test.mkv
转换成功,但输出文件每隔几秒像素化一次。
当我用 MKVToolnix 转换它时,一切看起来都很好。
有没有人有解决这个问题的方法?也许有一些选项可以正确同步流?
这是一个示例输出:
谢谢
video - 将 h264 + g.711(g.722,g.726) 写入 mkv
我正在编写自己的程序来将视频和音频写入.mkv
容器。我 h.264
在容器中成功编写视频,Codec_id V_MPEG4/ISO/AVC
但在规范中找不到 g.7xx 音频编解码器的 Codec_id?如何正确写入
g.711/g.722
.mkv 容器?
c# - taglib-sharp 不标记 mkv 文件
我正在使用 taglib-sharp 将标签写入视频文件。它能够很好地将标签写入 mp4 文件,但我无法让它将标签写入 mkv 文件。我尝试了各种应用程序来查看元数据,但它们都看不到任何内容,包括 MediaInfo。
我需要做一些不同的事情来标记 mkv 文件吗?它们肯定受到支持,因为有专门用于标记它们的代码,但我找不到任何暗示我做错了什么的东西。
我像这样标记文件:
我也在使用最新版本的 taglib-sharp (2.1.0)。任何帮助将非常感激。
video - VP9 的每帧元数据
我有一个图像流,我将在 VP9 中编码并存储在像 matroska (mkv) 这样的容器中。流中的每个图像都有一个与之关联的元数据,我们可以将其假设为一个字节数组。在最终视频文件中关联每帧元数据的好方法是什么?
- 是否可以将此元数据存储为 vp9 编码视频流的一部分?
- 我应该使用 mkv 容器的字幕流作为我的元数据流吗?
xml - EBML 与 XML 有多相似?
所以,最近,我继续尝试使用 Matroska 使用的 EBML 格式。我为我设定了一个目标,即从二进制流中按顺序解析 MKV 中的字幕。
我知道要使用的集群、块和轨道 ID,并且能够毫无问题地获得特定的字幕轨道 ID。
当尝试解析文件的其余部分时,问题就开始了。我知道字幕分散在块内的文件周围。这些块嵌套在一个块组内,块组又在一个集群内。集群有一个通用时间戳,块包含该时间戳的偏移量。
问题是......我似乎无法始终如一地找到字幕。
目前我正在做最简单的事情(这绝对不是最优的,绝对不准确),我解析每个集群、每个块组,然后是每个块,并检查块是否包含轨道 ID。然后我将该块中的所有二进制数据转换为字符串(是的)。然后我期望的是,垃圾中的某处是实际的字幕,因为它是在该块中编码的二进制 UTF-8。
现在正如我所说,我使用集群 ID、块组 ID 和块 ID 拆分二进制流。但我的第一个“想法”是,到底如何检测到集群的结束、块组的结束或块的结束?
因此,我开始阅读更多关于 EBML 的内容(我完全没有准备好仅使用 matroska 网站上的 EBML ID 表)。我发现 EBML 在通过定义标签等存储数据的方式上应该类似于 XML。我想知道,如果它类似于 XML,而 XML 使用 <tag></tag>
格式来表示字段的开始和结束,EBML 是否也这样做?什么定义了集群的结尾或 EBML 中的任何其他字段?集群 ID 的第二次出现可能是该集群的 END 吗?下一个集群是否从以下集群 ID 开始,并且其间的所有内容都可能是其他东西?还是我现在想得很努力?
我可能错过了文档中的某些内容,但我似乎无法找到明确的答案。但是,我将自己对此进行测试,但如果这不起作用,我希望找到一个可以让我在这里找到正确方向的答案。
提前致谢!
ubuntu - ffmpeg 音频 - 视频同步问题(音频先于视频) - 使用 x11grab 进行屏幕录制时
在使用以下 ffmpeg 选项进行屏幕录制时,我始终会在视频之前获得音频,延迟大约为几秒
ffmpeg 命令:
ffmpeg -y -f x11grab -thread_queue_size 1024 -draw_mouse 0 -video_size 1920x1080 -i :0 -f pulse -thread_queue_size 1024 -i default -c:v libx264 -threads 0 -preset faster -c:a flac -async 1 -vsync 1 -crf 30 -crf_max 33 -f matroska output.mkv
ffprobe 输出如下:
我什至尝试过使用avoid_negative_ts
标志,但它对同步问题没有帮助。
操作系统:
Ubuntu-18.04
ffmpeg 版本:
3.4
更新:(使用 ffmpeg-4.0) 我已经将此过程分成两部分并尝试如下所示(质量更好,但音频/视频同步仍然是一个问题)
STEP-1 在屏幕录制过程中使用的 CPU 更少,但音频仍然领先于视频。我正在使用的显示器是xvfb
STEP-1 中的一个(因为这是云端的无头机器)
另外,我-filter_complex aresample=44100 -vsync 1
在 STEP-1 中尝试过标志,但无济于事。
有人可以帮忙吗!
更新 2:(来自 git master 的最新 ffmpeg)
有效 !感谢@llogan 的有用评论。