[FFmpeg-user] ffmpeg to stream an already h.264 encoded stream
DopeLabs
dopelabs at dubstep.fm
Mon Sep 9 17:42:59 EEST 2019
> On Sep 9, 2019, at 5:59 28AM, Verachten Bruno <gounthar at gmail.com> wrote:
>
> Hi there,
>
> this is my first message on this list, so please bear with me.
> I have access to a h.264 encoder that will supply a few rtmp streams
> corresponding to the various HDMI inputs it has. It is supposed to use
> ffmpeg by the way (TBS2605).
> Anyway... I have a Linux machine, and my goal is to:
> - grab one of these streams, add audio coming from a USB sound card
> (FocusRite 2i4 2nd Gen), and stream that to YouTube while recording on
> the disk too.
> - grab two of these streams, compose them on top of a template, add
> audio (like in https://youtu.be/01nM2Shnyz0?t=1638), stream that to
> YouTube while recording on the disk too.
>
> For the time being, I have managed to stream to YouTube, but the
> YouTube platform is not happy with my stream quality, saying "The
> stream's current bitrate (1653.00 Kbps) is lower than the recommended
> bitrate. We recommend that you use a stream bitrate of 4500 Kbps.".
> The bitrate that is output by the encoder is supposed to be 4000Kbps.
> The ffmpeg command I have gives me around 2200/2400Kbps.
> So I guess I made a mess and decoded with my command the h.264 stream
> before encoding again... as the speed is around 0.962x, and the CPU is
> quite busy. I thought there was no need to decode/encode to add an
> audio stream (but I have no idea what I'm doing, as you had already
> guessed ;-) ).
>
> I recompiled the 4.2 ffmpeg release sources on this very machine.
>
> Here is the kind of output I get:
> ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
> built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
> configuration: --enable-gpl --enable-version3 --disable-static
> --enable-shared --enable-small --enable-avisynth --enable-chromaprint
> --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa
> --enable-libaom --enable-libass --enable-libcaca --enable-libcdio
> --enable-libcodec2 --enable-libfontconfig --enable-libfreetype
> --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack
> --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
> --enable-libopencore-amrwb --enable-libopencore-amrwb
> --enable-libopenjpeg --enable-libopenmpt --enable-libopus
> --enable-libpulse --enable-librsvg --enable-librubberband
> --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr
> --enable-libspeex --enable-libssh --enable-libtesseract
> --enable-libtheora --enable-libtwolame --enable-libv4l2
> --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
> --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
> --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi
> --enable-lv2 --enable-libmysofa --enable-openal --enable-opencl
> --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac
> --enable-libbluray --extra-libs='-lnettle -lhogweed -lgmp'
> libavutil 56. 31.100 / 56. 31.100
> libavcodec 58. 54.100 / 58. 54.100
> libavformat 58. 29.100 / 58. 29.100
> libavdevice 58. 8.100 / 58. 8.100
> libavfilter 7. 57.100 / 7. 57.100
> libswscale 5. 5.100 / 5. 5.100
> libswresample 3. 5.100 / 3. 5.100
> libpostproc 55. 5.100 / 55. 5.100
> Input #0, flv, from 'rtmp://192.168.1.211:1935/live/stream0':
> Duration: N/A, start: 15024.271000, bitrate: N/A
> Stream #0:0: Video: h264, yuv420p(progressive), 1920x1080, 30 fps,
> 30 tbr, 1k tbn
> Stream #0:1: Audio: aac, 48000 Hz, stereo, fltp
> Guessed Channel Layout for Input Stream #1.0 : stereo
> Input #1, pulse, from 'default':
> Duration: N/A, start: 1568033472.683289, bitrate: 1536 kb/s
> Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
> Stream mapping:
as you can see below, you are re-encoding...
> Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
> Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
> Press [q] to stop, [?] for help
> [libx264 @ 0x559c4df3e780] using cpu capabilities: MMX2 SSE2Fast SSSE3
> SSE4.2 AVX FMA3 BMI2 AVX2
> [libx264 @ 0x559c4df3e780] profile High, level 4.0
> [libx264 @ 0x559c4df3e780] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4
> AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html -
> options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7
> psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1
> 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2
> threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1
> interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2
> b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=60
> keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf
> mbtree=1 crf=3.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=7000
> vbv_bufsize=512 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40
> aq=1:1.00
> Output #0, flv, to 'rtmp://a.rtmp.youtube.com/live2/dh5g-r8tf-x5qy-cse8':
> Metadata:
> encoder : Lavf58.29.100
> Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007),
> yuv420p, 1920x1080, q=-1--1, 5000 kb/s, 30 fps, 1k tbn, 30 tbc
> Metadata:
> encoder : Lavc58.54.100 libx264
> Side data:
> cpb: bitrate max/min/avg: 7000000/0/5000000 buffer size: 512000
> vbv_delay: -1
> Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002),
> 48000 Hz, stereo, fltp, 712 kb/s
> Metadata:
> encoder : Lavc58.54.100 libmp3lame
> frame= 621 fps= 27 q=40.0 size= 5451kB time=00:00:20.73
> bitrate=2153.8kbits/s speed=0.904x
>
> And here is my command to stream from the h.264 encoded stream while
> adding audio coming from the USB Sound card. It is based on this gist
> https://gist.github.com/olasd/9841772 :
> VBR="5000k"
> FPS="30"
> ffmpeg -i "$SOURCE" -thread_queue_size 2048 -f pulse -i default
> -vcodec h264 -r 30 -g $(($FPS * 2)) -b:v $VBR -maxrate 7000k -threads
> 6 -crf 3 -b:a 712000 -bufsize 512k -f flv "$YOUTUBE_URL/$KEY"
you can do a 'stream copy' which will bea much lighter process...
so instead of specifying any type of encoding values you would simply
ffmpeg -i videoin -i audioin -c:v copy -c:a aac -b:a 64k -f flv rtmp://out
you would basically replace this
> -vcodec h264 -r 30 -g $(($FPS * 2)) -b:v $VBR -maxrate 7000k -threads
> 6 -crf 3 -bufsize 512k
with
-c:v copy
>
> If you have any pointer to help me, please let me know. I've been
> reading quite a lot for a while regarding ffmpeg, but I can't seem to
> understand the basics.
>
> Best regards,
> --
> Bruno Verachten
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-user
mailing list