我有一个应用程序,它从用户那里捕获多个视频流并将它们放入一个 mkv 输出文件中。
数据来自 RTP 数据包。我使用h264。
我正在使用 ffmpeg 和bytedeco/javacpp-presets
bridge 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 没有为我的文件显示任何内容?有没有我可以启用的详细模式,一些日志来看看它是否抱怨什么?