Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用ffmpeg将多个单视频MPEG-TS多路复用到MPTS_Video_Ffmpeg_Multiplexing_Transport Stream - Fatal编程技术网

Video 使用ffmpeg将多个单视频MPEG-TS多路复用到MPTS

Video 使用ffmpeg将多个单视频MPEG-TS多路复用到MPTS,video,ffmpeg,multiplexing,transport-stream,Video,Ffmpeg,Multiplexing,Transport Stream,我试图找到一种解决方案,将不同的输入(T)多路复用到一个MPT中,这样就可以用作DVB-T调制器的输入。基本上,我想要的是选择卫星接收机提供的某些TS,将它们重新打包成一个MPTS并发送到调制器。目前,我已使用以下命令成功地使用一个流执行此操作: ~/DATVRelease/ffmpeg \ -re -i URL_SINGLE_INPUT_TS_STREAM -vcodec copy -acodec copy \ -f mpegts -mpegts_original_network_i

我试图找到一种解决方案,将不同的输入(T)多路复用到一个MPT中,这样就可以用作DVB-T调制器的输入。基本上,我想要的是选择卫星接收机提供的某些TS,将它们重新打包成一个MPTS并发送到调制器。目前,我已使用以下命令成功地使用一个流执行此操作:

  ~/DATVRelease/ffmpeg \
 -re -i URL_SINGLE_INPUT_TS_STREAM  -vcodec copy -acodec copy \
 -f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 \
 -mpegts_service_id 1 -mpegts_pmt_start_pid 1000 -mpegts_start_pid 1001 \
 -metadata service_provider="YOUR CALL" \
 -metadata service_name="N1 (ALEKSANDAR)" \
 ~/dvb/videots
其中,videots是由mkfifo命令生成的fifo管道。以下代码在接收器端生成结果:

ffmpeg中有一个-map函数,我可以在其中添加多个音频频道/或视频频道,但它们不会在接收器端被检测为不同的服务电视频道,因为据我所知,必须创建足够的PMT表(iso13818)


我能找到的唯一开源软件就是这个,但我仍然想知道ffmpeg是否能帮我完成这项工作?

下面是生成一个包含多个程序的MPEG2 TS文件的基本命令

ffmpeg -i FirstInput -i SecondInput \
-map 0:0 -map 0:1 -map 1:0 -map 1:1 \
-program title=ProgOne:st=0:st=1 -program title=ProgTwo:st=2:st=3 \
-f mpegts mpts.ts
下面是每个选项的简单说明

-i FirstInput -i SecondInput 
选择包含要多路传输到输出MPT的基本流的源文件

-map 0:0 -map 0:1 -map 1:0 -map 1:1
选择要多路传输到输出MPT中的特定元素流。这些流将从零开始索引。 这里我们为这两个文件选择第一个和第二个流。通常,它们对应于视频和音频流。 见和

告诉FFmpeg在输出MPTS中生成两个程序。此处
title
给出了SDT中的服务名称
st=
指定放入相应程序的流。看

如果无法从输出文件的后缀推断出,请告诉FFmpeg使用mpegts muxer

关键选项是-map和-program,以便在一个输出中多路传输多个程序。根据和添加了增强功能


显然,可以添加更多选项来调整行为,例如编解码器类型、比特率控制、质量控制等。

您找到解决方案了吗?
-program title=ProgOne:st=0:st=1 -program ProgTwo:st=2:st=3
-f mpegts