Docker 낮은 CPU 설정에서 FFMPEG 트리밍 비디오

Docker 낮은 CPU 설정에서 FFMPEG 트리밍 비디오

그래서 저는 debian Stretch를 실행하는 도커 컨테이너 내에서 여러 mp4를 결합하려고 노력해 왔습니다. 출력 mp4 파일을 디스크에 쓸 수 없다는 제약이 있으므로 ffmpeg 파일 출력을 stdout으로 파이프해야 합니다. 나는 다음 명령을 사용하고 있습니다.

$ffmpeg -i https://clips-media-assets.twitch.tv/214592710.mp4 -i https://clips-media-assets.twitch.tv/214731012.mp4 -i https://clips-media-assets.twitch.tv/28082606352-offset-2786.mp4 -i https://clips-media-assets.twitch.tv/214777342.mp4 -i https://clips-media-assets.twitch.tv/214638267.mp4 -i https://clips-media-assets.twitch.tv/214636156.mp4 -i https://clips-media-assets.twitch.tv/214804499.mp4 -i https://clips-media-assets.twitch.tv/214826823.mp4 -i https://clips-media-assets.twitch.tv/214741267.mp4 -i https://clips-media-assets.twitch.tv/214575427.mp4 -filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] [3:v:0] [3:a:0] [4:v:0] [4:a:0] [5:v:0] [5:a:0] [6:v:0] [6:a:0] [7:v:0] [7:a:0] [8:v:0] [8:a:0] [9:v:0] [9:a:0] concat=n=10:v=1:a=1 [v] [a]" -map [v] -map [a] -frag_duration 3600 -f mp4 -

이로 인해 출력 비디오의 예상 부분이 몇 초로 잘립니다.

다음은 stdErr에서 읽은 ffmpegs 출력입니다. 여기서 docker의 CPU 수는 2GB의 RAM을 사용하여 1입니다.

ffmpeg version 3.4.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18) 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-libfribidi --enable-libass --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-libxvid --enable-libzimg
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214592710.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:21.47, start: 0.000000, bitrate: 3678 kb/s
  Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 3501 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214731012.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:01:00.01, start: 0.000000, bitrate: 8782 kb/s
  Stream #1:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 8606 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 164 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/28082606352-offset-2786.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:30.00, start: 0.000000, bitrate: 6181 kb/s
  Stream #2:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 6002 kb/s, 60 fps, 60 tbr, 90k tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #2:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214777342.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:27.67, start: 0.000000, bitrate: 5891 kb/s
  Stream #3:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 5715 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #3:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 164 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #4, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214638267.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:46.43, start: 0.000000, bitrate: 10449 kb/s
  Stream #4:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 10273 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #4:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #5, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214636156.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:07.75, start: 0.000000, bitrate: 8070 kb/s
  Stream #5:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 7892 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #5:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #6, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214804499.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:01:00.01, start: 0.000000, bitrate: 6529 kb/s
  Stream #6:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 6354 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #6:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #7, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214826823.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:07.68, start: 0.000000, bitrate: 3713 kb/s
  Stream #7:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 3536 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #7:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 163 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #8, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214741267.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:07.19, start: 0.000000, bitrate: 5785 kb/s
  Stream #8:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 5610 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #8:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 165 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Input #9, mov,mp4,m4a,3gp,3g2,mj2, from 'https://clips-media-assets.twitch.tv/214575427.mp4':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.71.100
Duration: 00:00:51.01, start: 0.000000, bitrate: 3874 kb/s
  Stream #9:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc), 1280x720, 3698 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
  Metadata:
    handler_name    : VideoHandler
  Stream #9:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 164 kb/s (default)
  Metadata:
    handler_name    : SoundHandler
Stream mapping:
Stream #0:0 (h264) -> concat:in0:v0
Stream #0:1 (aac) -> concat:in0:a0
Stream #1:0 (h264) -> concat:in1:v0
Stream #1:1 (aac) -> concat:in1:a0
Stream #2:0 (h264) -> concat:in2:v0
Stream #2:1 (aac) -> concat:in2:a0
Stream #3:0 (h264) -> concat:in3:v0
Stream #3:1 (aac) -> concat:in3:a0
Stream #4:0 (h264) -> concat:in4:v0
Stream #4:1 (aac) -> concat:in4:a0
Stream #5:0 (h264) -> concat:in5:v0
Stream #5:1 (aac) -> concat:in5:a0
Stream #6:0 (h264) -> concat:in6:v0
Stream #6:1 (aac) -> concat:in6:a0
Stream #7:0 (h264) -> concat:in7:v0
Stream #7:1 (aac) -> concat:in7:a0
Stream #8:0 (h264) -> concat:in8:v0
Stream #8:1 (aac) -> concat:in8:a0
Stream #9:0 (h264) -> concat:in9:v0
Stream #9:1 (aac) -> concat:in9:a0
concat:out:v0 -> Stream #0:0 (libx264)
concat:out:a0 -> Stream #0:1 (aac)
Press [q] to stop, [?] for help
[libx264 @ 0x88d3640] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x88d3640] profile High, level 3.2
[libx264 @ 0x88d3640] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=1 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=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'pipe:':
Metadata:
  major_brand     : isom
  minor_version   : 512
  compatible_brands: isomiso2avc1mp41
  encoder         : Lavf57.83.100
  Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuvj420p(pc, progressive), 1280x720, q=-1--1, 60 fps, 15360 tbn, 60 tbc (default)
  Metadata:
    encoder         : Lavc57.107.100 libx264
  Side data:
    cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
  Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
  Metadata:
    encoder         : Lavc57.107.100 aac
frame= 2320 fps= 20 q=31.0 size=   25147kB time=00:00:38.50 bitrate=5318.2kbits/s dup=1 drop=0 speed=0.334x
frame= 4560 fps= 17 q=31.0 size=   62654kB time=00:01:15.83 bitrate=6768.0kbits/s dup=1 drop=0 speed=0.275x
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6109940] stream 1, offset 0x1187c5: partial filets/s dup=2 drop=0 speed=0.315x    speed=0.275x
[h264 @ 0x69b8980] Invalid NAL unit size (10904 > 8072).39kB time=00:01:52.43 bitrate=5795.4kbits/s dup=2 drop=0 speed=0.315x
[h264 @ 0x69b8980] Error splitting the input into NAL units.
Error while decoding stream #3:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214777342.mp4: Invalid data found when processing input
  Last message repeated 2 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x69c01c0] stream 1, offset 0x124bed: partial filets/s dup=4 drop=0 speed=0.314x    0 speed=0.315x
[h264 @ 0x69e5220] Invalid NAL unit size (40844 > 37063).8kB time=00:01:53.36 bitrate=5817.7kbits/s dup=4 drop=0 speed=0.314x
[h264 @ 0x69e5220] Error splitting the input into NAL units.
Error while decoding stream #4:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214638267.mp4: Invalid data found when processing input
  Last message repeated 2 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6e34300] stream 1, offset 0x134e04: partial filets/s dup=4 drop=0 speed=0.314x    0 speed=0.314x
[h264 @ 0x6e936e0] Invalid NAL unit size (3219 > 2887).
[h264 @ 0x6e936e0] Error splitting the input into NAL units.
Error while decoding stream #5:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214636156.mp4: Invalid data found when processing input
  Last message repeated 2 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6e65f80] stream 1, offset 0x1411c1: partial filets/s dup=5 drop=0 speed=0.314x    0 speed=0.314x
[h264 @ 0x72c63c0] Invalid NAL unit size (5000 > 3708).841kB time=00:01:55.87 bitrate=5856.6kbits/s dup=5 drop=0 speed=0.314x
[h264 @ 0x72c63c0] Error splitting the input into NAL units.
Error while decoding stream #6:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214804499.mp4: Invalid data found when processing input
  Last message repeated 2 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x779e0e0] stream 1, offset 0x134b57: partial filets/s dup=6 drop=0 speed=0.316x    0 speed=0.314x
[h264 @ 0x7bec920] Invalid NAL unit size (18581 > 8590).18kB time=00:02:05.68 bitrate=5698.0kbits/s dup=6 drop=0 speed=0.316x
[h264 @ 0x7bec920] Error splitting the input into NAL units.
Error while decoding stream #8:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214741267.mp4: Invalid data found when processing input
  Last message repeated 2 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7bed200] stream 1, offset 0xdb7f6: partial fileits/s dup=6 drop=0 speed=0.317x    0 speed=0.317x
[h264 @ 0x84cbc60] Invalid NAL unit size (1625 > 440).
[h264 @ 0x84cbc60] Error splitting the input into NAL units.
Error while decoding stream #9:0: Invalid data found when processing input
https://clips-media-assets.twitch.tv/214575427.mp4: Invalid data found when processing input
  Last message repeated 2 times
frame= 7655 fps= 19 q=31.0 Lsize=   88771kB time=00:02:07.54 bitrate=5701.5kbits/s dup=8 drop=0 speed=0.316x     speed=0.317x
video:85056kB audio:2074kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.883764%
[libx264 @ 0x88d3640] frame I:40    Avg QP:22.85  size:143772
[libx264 @ 0x88d3640] frame P:2853  Avg QP:26.55  size: 20092
[libx264 @ 0x88d3640] frame B:4762  Avg QP:31.26  size:  5045
[libx264 @ 0x88d3640] consecutive B-frames:  2.8% 41.0%  5.4% 50.8%
[libx264 @ 0x88d3640] mb I  I16..4: 13.8% 21.0% 65.2%
[libx264 @ 0x88d3640] mb P  I16..4:  3.7%  3.7%  3.9%  P16..4: 29.6% 13.4%  6.3%  0.0%  0.0%    skip:39.4%
[libx264 @ 0x88d3640] mb B  I16..4:  0.9%  0.6%  0.6%  B16..8: 21.9%  5.6%  0.8%  direct: 1.6%  skip:68.1%  L0:41.3% L1:46.4% BI:12.3%
[libx264 @ 0x88d3640] 8x8 transform intra:30.7% inter:37.6%
[libx264 @ 0x88d3640] coded y,uvDC,uvAC intra: 57.7% 42.7% 8.6% inter: 10.5% 5.6% 0.4%
[libx264 @ 0x88d3640] i16 v,h,dc,p: 28% 30% 22% 20%
[libx264 @ 0x88d3640] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 24% 22%  3%  3%  4%  5%  4%  5%
[libx264 @ 0x88d3640] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 20% 20%  5%  5%  6%  6%  5%  5%
[libx264 @ 0x88d3640] i8c dc,h,v,p: 66% 18% 14%  2%
[libx264 @ 0x88d3640] Weighted P-Frames: Y:2.4% UV:0.7%
[libx264 @ 0x88d3640] ref P L0: 68.0% 13.8% 15.7%  2.5%  0.0%
[libx264 @ 0x88d3640] ref B L0: 87.4% 11.4%  1.2%
[libx264 @ 0x88d3640] ref B L1: 98.8%  1.2%
[libx264 @ 0x88d3640] kb/s:5461.32
[aac @ 0x8076a00] Qavg: 721.442

재미있는 점은 도커의 CPU 수를 늘릴 때 도커에 6개의 CPU를 제공할 때까지 예상 출력이 점점 더 작아지는 것처럼 보인다는 것입니다. 이 시점에서는 어떤 비디오도 잘리지 않고 예상대로 모든 비디오를 결합합니다. 또한 "잘못된 NAL 단위 크기" 오류가 더 이상 출력에 나타나지 않습니다. ffmpeg를 처음 사용하는 것이므로 낮은 CPU 구성에서 mp4 연결을 보다 안정적으로 만드는 데 도움이 될 것입니다.

관련 정보