【问题标题】:How to duplicate a mpegts stream into multiple other UDP streams using FFMPEG如何使用 FFMPEG 将 mpegts 流复制到多个其他 UDP 流中
【发布时间】:2016-05-22 08:30:08
【问题描述】:

我正在尝试使用 ffmpeg 命令行来查看是否可以以不同的分辨率重新传输 mpegts udp 流。

我成功地将传入的流重新传输到具有不同分辨率的流中:

ffmpeg -y -i "udp://234.5.6.7:1234" -vf scale=-1:320 -map 0 -acodec copy -dcodec copy -f mpegts udp://234.5.6.8:1234

我想以各种分辨率流式传输to multiple output mpegts 流。我当然可以从多个实例收听原始广播,并将每个流收听到不同的新端点和分辨率,但是通过单个 ffmpeg 调用来实现这一点会更好。

试图至少输出到多个流我似乎坚持让以下运行(即使不改变分辨率:)

ffmpeg -y -i "udp://234.5.6.7:1234" -f tee "[f=mpegts:map=0:acodec=copy:dcodec=copy]udp://234.5.6.8:1234|[f=mpegts:map=0:acodec=copy:dcodec=copy]udp://234.5.6.9:1234"

这会导致以下错误:

输出文件 #0 不包含任何流

可能是我提供的输出参数不正确吗?我将如何修复上述行以生成两个(或更多)输出流?

【问题讨论】:

  • 尝试将地图移出,即-f tee -map 0 "[f=mpegts:aco...."
  • @Mulvya 感谢您的回答!我已经尝试过了,它导致了一个稍微不同的问题:Data stream encoding not supported yet (only streamcopy) 我没有在我的问题中提到这一点,但这可能是因为广播由 1 个数据流和 1 个视频流组成。所以我想我将不得不在输出参数中建议流复制数据流(?)

标签: ffmpeg stream udp


【解决方案1】:

试试

ffmpeg -y -i "udp://234.5.6.7:1234" \
-filter_complex "[0:v]split[a][b];[a]scale=-1:320[v1];[b]scale=-1:480[v2]" \
-map [v1] -map [v2] -map 0:d -dcodec copy \
-f tee "[f=mpegts:select=\'v:0\',d]udp://234.5.6.7:1234|[f=mpegts:select=\'v:1\',d]udp://234.5.6.8:1234"

【讨论】:

  • 我觉得我们越来越近了。由于没有音频,我删除了 a 引用:ffmpeg -y -i "udp://234.5.6.7:1234" -filter_complex "[0:v]split[a][b];[a]scale=-1:320[v1];[b]scale=-1:480[v2]" -map [v1] -map [v2] -map 0:d -acodec copy -dcodec copy -f tee "[f=mpegts:select=\'v:0\',d]udp://234.5.6.7:1234|[f=mpegts:select=\'v:1\',d]udp://234.5.6.8:1234"。这目前导致Segmentation fault (core dumped)
  • 我也可以删除-acodec copy。当我尝试时,还没有解决分段错误。
  • 立即尝试。如果不是,则尝试输出到文件而不是流。
  • 目前没有改进。我也尝试转义':',如\'v\:0\''v\:0'。并输出到文件:-f tee "[f=mpegts:select='v\:0',d]test_output_a.ts|[f=mpegts:select='v\:1',d]test_output_b.ts"
  • 不,保留原始选择值。跳过过滤器,使用-map 0select=v,d
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2018-09-17
  • 2017-07-05
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2012-07-30
  • 2011-10-02
相关资源
最近更新 更多