尝试同时流式传输和分段存储带有图形覆盖的摄像头输入(必须缩小以适应)

尝试同时流式传输和分段存储带有图形覆盖的摄像头输入(必须缩小以适应)

我正在尝试使用 ffmpeg 编写一个 python 程序来从 USB 摄像头捕获输入视频,在其上叠加品牌图形,然后在运行时存储视频并将其流式传输到 WOWza。

无论我怎么尝试,初始化过滤器图或识别命名的 pad 或其他方面都会出现问题。我想我只是没有正确使用转义和命名 pad。

下面是当前版本的输出,我缩小了代码以仅捕获视频、品牌徽标和音频,然后缩放徽标以适合视频。下一步是复杂的过滤器和叠加过滤器,但我需要先走再跑。

import subprocess 
import time
import os
os.system("sleep 1")
os.system("ffmpeg -y -f v4l2 -framerate 30 -video_size 1280x720 \
-input_format mjpeg -i /dev/video0 \
-f alsa -channels 1 -sample_rate 44100 -i default \
-i /home/dbbarron/Streaming/brand.png -framerate 30 \
-vf scale=160:100 split=2[SplitOut1][SplitOut2]\
[SplitOut1] -f segment -strftime 1 -segment_time 10 out_%Y-%m-%d-%H-%M-%S.mov\
[SplitOut2] -f flv rtmp://4567890449bs.entrypoint.cloud.wowza.com/app-d17Q984B/c9874586453799d314@")

控制台输出:

-/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 13565.321871, bitrate: N/A
    Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, alsa, from 'default':
  Duration: N/A, start: 1686322834.401513, bitrate: 705 kb/s
    Stream #1:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Input #2, png_pipe, from '/home/dbbarron/Streaming/MBM_Alpha1.png':
  Duration: N/A, bitrate: N/A
    Stream #2:0: Video: png, rgba(pc), 1464x732 [SAR 5669:5669 DAR 2:1], 25 tbr, 25 tbn, 25 tbc
[NULL @ 0x1d1c070] Unable to find a suitable output format for 'split=2[SplitOut1][SplitOut2][SplitOut1]'
split=2[SplitOut1][SplitOut2][SplitOut1]: Invalid argument

答案1

当你希望生成单个输出并将其用于多个目标时,你应该使用球座一般情况下,使用多路复用器可以帮助避免多重编码。

ffmpeg -y \
-f v4l2 -framerate 30 -video_size 1280x720 -input_format mjpeg -i /dev/video0 \
-f alsa -channels 1 -sample_rate 44100 -i default \
-i /home/dbbarron/Streaming/brand.png \
-filter_complex "
 [2]scale=160:100[logo];
 [0][logo]overlay=x=0:y=0[v]
" \
-map '[v]' -map 1:a -c:v libx264 -flags:v +global_header -c:a aac \
-f tee \
  "[f=segment:strftime=1:segment_time=10]out_%Y-%m-%d-%H-%M-%S.mov
 | [f=flv]rtmp://4567890449bs.entrypoint.cloud.wowza.com/app-d17Q984B/c9874586453799d314@"

相关内容