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"
的意思是:
我收到错误消息:
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/A
s 看起来很奇怪,不是吗?
选择器前面不应有文件索引。请参阅文档。
修复了这个问题,但仍然不适用于 Twitch。虽然它在只为 Twitch 编码或编码两次时单独工作,一次用于 UDP,另一次用于 Twitch。以上是关于FFMPEG tee muxer 给出“输出文件 #0 不包含任何流”的主要内容,如果未能解决你的问题,请参考以下文章
Linux - ffmpeg 3.4.6 与 4.2.1 - 带有 Tee(记录和流)的 bash 脚本在旧版本中运行得很好 - 新版本需要改变啥?