ffmpeg - 我可以在 MPEG TS 容器中拥有原始视频流吗

标签 ffmpeg mpeg2-ts transport-stream

我通过网络 (UDP) 收到 MPEG TS 容器。它包含两个流:一个具有 yuv420p 像素格式的 mpeg2video 视频流和一个使用适当的 KLV 格式编码的数据流。

我的接收器程序必须使用 Python。因此,我无法直接使用 FFMPEG 库(如 AVFormatAVCodec )。

现在我的问题如下:

我需要接收视频帧并将它们保存为原始 RGB 图像 numpy大批。我还需要为每一帧解析相应的KLV数据。视频帧和KLV数据单元之间存在一对一的关系。

我以为我使用ffprobe从传入容器输出包括其有效负载数据的数据包,然后解析 ffprobe 的输出获取图像和元数据:

$ ffprobe -show_packets -show_data -print_format json udp://127.0.0.1:12345 > test_video.packets.data.json 

这给了我一个输出(在 test_video.packets.data.json 文件中),例如:

{
    "codec_type": "video",
    "stream_index": 0,
    "pts": 140400,
    "pts_time": "1.560000",
    "dts": 136800,
    "dts_time": "1.520000",
    "duration": 3600,
    "duration_time": "0.040000",
    "size": "21301",
    "pos": "3788012",
    "flags": "K_",
    "side_data_list": [
        {
            "side_data_type": "MPEGTS Stream ID"
        }
    ],
    "data": "... "
},
{
    "codec_type": "data",
    "stream_index": 1,
    "pts": 140400,
    "pts_time": "1.560000",
    "dts": 140400,
    "dts_time": "1.560000",
    "size": "850",
    "pos": "3817904",
    "flags": "K_",
    "side_data_list": [
        {
            "side_data_type": "MPEGTS Stream ID"
        }
    ],
    "data": ".... "
}

我可以从数据包中提取KLV数据并解析它。然而,视频数据包中的数据以 yuv420p 像素格式编码为 mpeg2video 视频。

我的问题:

  1. 如何从 mpeg2 编码负载中获取原始像素值?
  2. 是否可以使用 ffmpeg 接收原始容器并将其(包含两个流)复制到新容器中,但使用原始视频而不是 mpeg2 视频?如果是,怎么办?命令应该是什么?我尝试过例如:ffmpeg -i udp://127.0.0.1:12345 -map 0:0 -codec rawvideo -pix_fmt rgb24 -map 0:1 -codec copy -f mpegts udp://127.0.0.1:11112 ,但它再次为我提供了视频数据包有效负载中的 mpeg2 编码视频数据

最佳答案

MPEG-TS 支持有限数量的视频编解码器。然而,ffmpeg 的复用器甚至会默默地将不支持的流复用为私有(private)数据流。

要混合原始 RGB 流,请转换为 rgb24 像素格式并使用 rawvideo 编解码器进行编码。

ffmpeg -i udp://127.0.0.1:12345 -map 0:0 -map 0:1 -c copy -c:v rawvideo -pix_fmt rgb24 -f mpegts udp://127.0.0.1: 11112

关于ffmpeg - 我可以在 MPEG TS 容器中拥有原始视频流吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64993871/

相关文章:

html5 视频播放器在音量更改时重新加载

android - ts 文件中的叠加图像

ffmpeg - 通过 FFmpeg 转码。设置起始 pcr 值

video - FFMPEG - 在不丢失分辨率的情况下转换视频

FFmpeg 自定义构建支持将 .ts 转换为 .mp4 文件

php - 知道 youtube 使用的是什么视频编码技术吗?

android - Android 上的慢 avcodec_decode_video2、ffmpeg

video-capture - 从 UDP 数据包中提取 mpeg 传输流 header

ffmpeg - 如何使用ffmpeg将带有两个切片包的捕获视频流转换为带有一个切片包的传输流?

ffmpeg - YouTube 直播静音检测