У меня есть скрипт, который записывает отображение x11 и выводит три потока HLS.
./ffmpeg -y \
-f x11grab -framerate 60 -s 1920x1080 -i :1.0 \
-c:v:0 libx264 -c:s:0 copy -c:a:0 aac -b:v:0 4000k -b:a:0 512k -s:v:0 1920x1080 -r:0 30 -g:0 90 -preset:0 superfast -tune:0 zerolatency -level:v:0 4 -f flv \
-c:v:1 libx264 -c:s:1 copy -c:a:1 aac -b:v:1 2500k -b:a:1 256k -s:v:1 1280x720 -r:1 30 -g:1 90 -preset:1 superfast -tune:1 zerolatency -level:v:1 4 -f flv \
-c:v:2 libx264 -c:s:2 copy -c:a:2 aac -b:v:2 800k -b:a:2 256k -s:v:2 960x540 -r:2 30 -g:2 90 -preset:2 superfast -tune:2 zerolatency -level:v:2 4 -f flv \
-hls_time 6 \
-hls_list_size 2 \
-hls_flags delete_segments \
-map 0:v -map 0:a? -map 0:s? -map 0:v -map 0:a? -map 0:s? -map 0:v -map 0:a? -map 0:s? \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
-f hls -master_pl_name "${name}.m3u8" \
-hls_segment_filename "/tmp/hls/${name}_%v-%d.ts" \
-max_muxing_queue_size 1024 \
"/tmp/hls/${name}_%v.m3u8"
Эта строка:
-map 0:v -map 0:a? -map 0:s? -map 0:v -map 0:a? -map 0:s? -map 0:v -map 0:a? -map 0:s? \
Имеет вопросительные знаки после каждого 0:a
, этопотому что на входе не всегда есть звук, поэтому он игнорирует ошибку, когда нет звука, и отображает ее, когда есть.
Однако, следующий переключатель:
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
Будетработать только при наличии звука, есть ли способ, которым я могу иметь -var_stream_map с записями, которые будут игнорировать ошибки, как -map делает?
Вот ошибки, если я пытаюсь использовать этот текущий скрипт без звука:
[hls @ 0x6231800] Unable to map stream at a:0
[hls @ 0x6231800] Variant stream info update failed with status ffffffea
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:2 --
Если это уместно, вот весь вывод:
ffmpeg version 4.0.3-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
[x11grab @ 0x6229300] 16 bits per pixel screen is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[x11grab @ 0x6229300] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, x11grab, from ':1.0':
Duration: N/A, start: 1546439595.240575, bitrate: N/A
Stream #0:0: Video: rawvideo (RGB[16] / 0x10424752), rgb565le, 1920x1080, 60 fps, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #0:0 -> #0:1 (rawvideo (native) -> h264 (libx264))
Stream #0:0 -> #0:2 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x62334c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x62334c0] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x62334c0] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0x1 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=6 threads=4 lookahead_threads=4 sliced_threads=1 slices=4 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=90 keyint_min=9 scenecut=40 intra_refresh=0 rc=abr mbtree=0 bitrate=4000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[libx264 @ 0x6234840] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x6234840] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x6234840] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0x1 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=6 threads=4 lookahead_threads=4 sliced_threads=1 slices=4 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=90 keyint_min=9 scenecut=40 intra_refresh=0 rc=abr mbtree=0 bitrate=2500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[libx264 @ 0x6235740] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x6235740] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x6235740] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0x1 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=6 threads=4 lookahead_threads=4 sliced_threads=1 slices=4 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=90 keyint_min=9 scenecut=40 intra_refresh=0 rc=abr mbtree=0 bitrate=800 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[hls @ 0x6231800] Unable to map stream at a:0
[hls @ 0x6231800] Variant stream info update failed with status ffffffea
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:2 --
[libx264 @ 0x62334c0] frame I:1 Avg QP:31.45 size: 91065
[libx264 @ 0x62334c0] mb I I16..4: 56.4% 0.0% 43.6%
[libx264 @ 0x62334c0] final ratefactor: 36.79
[libx264 @ 0x62334c0] coded y,u,v intra: 42.4% 8.7% 11.4%
[libx264 @ 0x62334c0] i16 v,h,dc,p: 53% 32% 11% 5%
[libx264 @ 0x62334c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 20% 14% 8% 6% 6% 6% 5% 6%
[libx264 @ 0x62334c0] kb/s:21855.60
[libx264 @ 0x6234840] frame I:1 Avg QP:30.27 size: 62907
[libx264 @ 0x6234840] mb I I16..4: 48.6% 0.0% 51.4%
[libx264 @ 0x6234840] final ratefactor: 35.22
[libx264 @ 0x6234840] coded y,u,v intra: 53.9% 14.2% 17.2%
[libx264 @ 0x6234840] i16 v,h,dc,p: 49% 36% 11% 5%
[libx264 @ 0x6234840] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 19% 15% 8% 7% 6% 6% 6% 6%
[libx264 @ 0x6234840] kb/s:15097.68
[libx264 @ 0x6235740] final ratefactor: 29.77
Conversion failed!