video - 使用 ffmpeg 将多个单视频 MPEG-TS 多路复用为 MPTS

标签 video ffmpeg multiplexing transport-stream

我试图找到一种将不同输入 (ts) 多路复用到一个 MPTS 中的解决方案,以便可以将其用作 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 管道。以下代码在接收端产生了结果:

http://i.stack.imgur.com/BZugM.jpg

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

我能找到的唯一开源是这个 http://www.scara.com/~schirmer/o/mplex13818/ ,但我仍然想知道 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 

选择包含要复用到输出 MPTS 中的基本流的源文件

-map 0:0 -map 0:1 -map 1:0 -map 1:1

选择要复用到输出 MPTS 中的特定基本流。流将从零开始索引。 这里我们为两个文件选择第一个和第二个流。通常它们对应于视频和音频流。 参见 the Advance options chapter of FFmpeg documentationwiki for -map .

-program title=ProgOne:st=0:st=1 -program ProgTwo:st=2:st=3

告诉 FFmpeg 在输出 MPTS 中生成两个程序。这里 title 给出了 SDT 中的 service_name。 st= 指定放入相应程序的流。参见 the Main options chapter of FFmpeg ddocumentation

-f mpegts

告诉 FFmpeg 使用 mpegts muxer 以防无法从输出文件的后缀推断出它。

关键选项是 -map 和 -program 以在一个输出中复用多个程序。在 this commit 中添加了增强功能根据 issue 4734issue 4525 .

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

关于video - 使用 ffmpeg 将多个单视频 MPEG-TS 多路复用为 MPTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413992/

相关文章:

android - 如何从Android发送RTP视频数据包到服务器?有图书馆吗?请建议

video - 如何使用ffmpeg将多个音频文件添加到视频中的特定时间?

Python - 如果 sys.argv 包含 "&"字符,则不会打开第二个子进程

javascript - TS 文件不播放 hls.js

具有两个以上输入的多路复用器的 Chisel 函数

javascript - 是否有 JavaScript/HTML5 代码可以将任何视频格式转换为 mp4 格式,然后上传到存储服务器以便在任何客户端上观看?

linux - 如何让低帧率视频看起来更流畅?

video - 如何在编码期间暂停和恢复ffmpeg?

qt - 如何从单击的事件中获取调用按钮

c - 在客户端 C 中多路复用 stdin 和 socket