FFMPEG tee muxer 给出“输出文件 #0 不包含任何流”

Posted

技术标签:

【中文标题】FFMPEG tee muxer 给出“输出文件 #0 不包含任何流”【英文标题】:FFMPEG tee muxer giving "Output file #0 does not contain any stream" 【发布时间】:2020-08-31 09:46:22 【问题描述】:

我正在尝试创建两个流:一个是 mpegts UDP 流,另一个是 rtmp 到 Twitch 服务器。

此命令有效:

  ffmpeg -threads:v 2 -threads:a 16 -filter_threads 2 -thread_queue_size 16 -y \
 -f dshow -video_size 1920x1080 -pixel_format uyvy422 -framerate 25 -rtbufsize 500M -i video="Decklink Video Capture" \
 -f dshow -rtbufsize 100M -i audio="Decklink Audio Capture" \
 -preset ultrafast -c:v libx264 -tune zerolatency -b:v 900k -map 0:v:0 -f mpegts udp://127.0.0.1:5555 \ 
 -pix_fmt yuv420p -c:v libx264 -crf 20 -tune zerolatency -f flv rtmp://live-fra05.twitch.tv/app/stream_key

但它需要双倍的编码 CPU 能力。

所以,按照this,我重写了这样的命令:

ffmpeg -threads:v 2 -threads:a 16 -filter_threads 2 -thread_queue_size 16 -y \
 -f dshow -video_size 1920x1080 -pixel_format uyvy422 -framerate 25 -rtbufsize 500M -i video="Decklink Video Capture" \
 -f dshow -rtbufsize 100M -i audio="Decklink Audio Capture" \
 -preset ultrafast -c:v libx264 -tune zerolatency -b:v 900k \
 -f tee "[select=\'0:v:0\':f=mpegts]udp://127.0.0.1:5555|[select=\'0:v:0,1:a:0\':f=flv]rtmp://live-fra05.twitch.tv/app/stream_key"

我写-f tee "[select=\'0:v:0\':f=mpegts]udp://127.0.0.1:5555|[select=\'0:v:0,1:a:0\':f=flv]rtmp://live-fra05.twitch.tv/app/stream_key"的意思是:

在 udp://127.0.0.1:5555 创建 UDP 流并且只包含来自“Decklink Video Capture”的视频流 创建 RTMP 流,其中我们包含与上述相同的视频流以及来自 “Decklink 音频捕获”的音频流

我收到错误消息:

Output file #0 does not contain any stream

我该如何解决这个问题?我假设我在命令中犯了一个错误。

【问题讨论】:

【参考方案1】:

如链接所示,必须映射流。

ffmpeg -thread_queue_size 16 -y \
 -f dshow -video_size 1920x1080 -pixel_format uyvy422 -framerate 25 -rtbufsize 500M -i video="Decklink Video Capture" \
 -f dshow -rtbufsize 100M -i audio="Decklink Audio Capture" \
 -map 0:v -map 1:a \
 -preset ultrafast -c:v libx264 -tune zerolatency -b:v 900k \
 -f tee "[select=\'v:0\':f=mpegts]udp://127.0.0.1:5555|[select=\'v:0,a:0\':f=flv]rtmp://live-fra05.twitch.tv/app/stream_key"

在http://ffmpeg.org/ffmpeg-formats.html#tee-1查看完整的官方文档 tee

【讨论】:

听从您的建议并运行以下命令ffmpeg -threads:v 2 -threads:a 16 -filter_threads 2 -thread_queue_size 16 -y -f dshow -video_size 1920x1080 -pixel_format uyvy422 -framerate 25 -rtbufsize 500M -i video="Decklink Video Capture" -f dshow -rtbufsize 500M -i audio="Decklink Audio Capture" -map 0:v -map 1:a -pix_fmt yuv420p -preset ultrafast -c:v libx264 -crf 28 -g 10 -tune zerolatency -c:a libmp3lame -f tee "[select=\'0:v:0\':f=mpegts]udp://127.0.0.1:5555|[select=\'0:v:0,1:a:0\':f=flv]rtmp://live-fra05.twitch.tv/app/stream_key" 得到错误:imgur.com/Nz6aYgA 去掉了选择器,只运行了 ..... -f tee "[f=mpegts]udp://127.0.0.1:5555|[f=flv]rtmp://live-fra05.twitch.tv/app/stream_key" 。 UDP 工作,Twitch 显示 Live 但无法播放流。可能是什么问题呢?此外,输出为 frame= 368 fps= 25 q=34.0 size=N/A time=00:00:14.72 bitrate=N/A speed= 1x 。那些N/As 看起来很奇怪,不是吗? 选择器前面不应有文件索引。请参阅文档。 修复了这个问题,但仍然不适用于 Twitch。虽然它在只为 Twitch 编码或编码两次时单独工作,一次用于 UDP,另一次用于 Twitch。

以上是关于FFMPEG tee muxer 给出“输出文件 #0 不包含任何流”的主要内容,如果未能解决你的问题,请参考以下文章

Linux - ffmpeg 3.4.6 与 4.2.1 - 带有 Tee(记录和流)的 bash 脚本在旧版本中运行得很好 - 新版本需要改变啥?

ffmpeg 基本用法

FFMPEG入门篇

FFMPEG入门篇

ffmpeg里有x264么

FFmpeg Mp4加解密