如何使用ffmpeg加速创建视频马赛克

huangapple go评论90阅读模式
英文:

How to speed up creating video mosaic with ffmpeg

问题

Here is the translated content:

"我想要加速ffmpeg管道的某种方式(相机配置、不同的滤镜或任何其他想法都将不胜感激)。

我有一个捕获视频流的设备,稍后会从4个摄像头创建马赛克视频视图。我遇到的主要问题是创建马赛克视频太慢了。设备上没有GPU可用来加速处理,所以我只能使用相机配置(Hikvision)。

目前我有以下情况:

在Intel J-1900上大约需要160秒:

  • 5分钟的视频文件,
  • 640*480分辨率,
  • h264编码,
  • 10 fps,
  • 1024最大比特率,
  • 10个I帧间隔,

我正在使用的命令是:

ffmpeg -y -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 \
   -filter_complex " \
      color=c=black:size=1280x720 [base]; \
      [0:v] setpts=PTS-STARTPTS, scale=640x360 [cam0]; \
      [1:v] setpts=PTS-STARTPTS, scale=640x360 [cam1]; \
      [2:v] setpts=PTS-STARTPTS, scale=640x360 [cam2]; \
      [3:v] setpts=PTS-STARTPTS, scale=640x360 [cam3]; \
      [base][cam0] overlay=shortest=1:x=0:y=0  [z1]; \
      [z1][cam1] overlay=shortest=1:x=640:y=0  [z2]; \
      [z2][cam2] overlay=shortest=1:x=0:y=360  [z3]; \
      [z3][cam3] overlay=shortest=1:x=640:y=360 \
    " \
    -an -c:v libx264  -x264-params keyint=10 \
    -movflags faststart -preset fast -nostats -loglevel quiet -r 10.000000 mosaic.mp4

谢谢"

If you need any further assistance or have more specific questions, feel free to ask.

英文:

I'm looking to speed up ffmpeg pipeline in some way (camera configuration, different filters or any other ideas would be appreciated).

I have a device that captures videos streams and later creates mosaic video view from 4 cameras. The main issue I'm having is that it's taking too long to create mosaic video. There is no GPU on the device that could be used to accelerate the process so I'm left with camera configurations (Hikvision).

Here is what I have so far

About 160 sec on Intel J-1900:

- 5 min video files,
- 640*480 resolution,
- h264 encoding,
- 10 fps,
- 1024 max bitrate,
- 10 I-frame interval,      

Command that I'm using:

ffmpeg -y -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 \
   -filter_complex " \
      color=c=black:size=1280x720 [base]; \
      [0:v] setpts=PTS-STARTPTS, scale=640x360 [cam0]; \
      [1:v] setpts=PTS-STARTPTS, scale=640x360 [cam1]; \
      [2:v] setpts=PTS-STARTPTS, scale=640x360 [cam2]; \
      [3:v] setpts=PTS-STARTPTS, scale=640x360 [cam3]; \
      [base][cam0] overlay=shortest=1:x=0:y=0  [z1]; \
      [z1][cam1] overlay=shortest=1:x=640:y=0  [z2]; \
      [z2][cam2] overlay=shortest=1:x=0:y=360  [z3]; \
      [z3][cam3] overlay=shortest=1:x=640:y=360 \
    " \
    -an -c:v libx264  -x264-params keyint=10 \
    -movflags faststart -preset fast -nostats -loglevel quiet -r 10.000000 mosaic.mp4

Thanks

Here is full output as requested

ffmpeg -y -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 \
>    -filter_complex " \
>       color=c=black:size=1280x720 [base]; \
>       [0:v] setpts=PTS-STARTPTS, scale=640x360 [cam0]; \
>       [1:v] setpts=PTS-STARTPTS, scale=640x360 [cam1]; \
>       [2:v] setpts=PTS-STARTPTS, scale=640x360 [cam2]; \
>       [3:v] setpts=PTS-STARTPTS, scale=640x360 [cam3]; \
>       [base][cam0] overlay=shortest=1:x=0:y=0  [z1]; \
>       [z1][cam1] overlay=shortest=1:x=640:y=0  [z2]; \
>       [z2][cam2] overlay=shortest=1:x=0:y=360  [z3]; \
>       [z3][cam3] overlay=shortest=1:x=640:y=360 \
>     " \
>     -an -c:v libx264  -x264-params keyint=10 \
>     -movflags faststart -preset fast -nostats -r 10.000000 mosaic.mp4
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg -y -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4 -i 1578324600-1-stitched.mp4    -filter_complex " \
      color=c=black:size=1280x720 [base]; \
      [0:v] setpts=PTS-STARTPTS, scale=640x360 [cam0]; \
      [1:v] setpts=PTS-STARTPTS, scale=640x360 [cam1]; \
      [2:v] setpts=PTS-STARTPTS, scale=640x360 [cam2]; \
      [3:v] setpts=PTS-STARTPTS, scale=640x360 [cam3]; \
      [base][cam0] overlay=shortest=1:x=0:y=0  [z1]; \
      [z1][cam1] overlay=shortest=1:x=640:y=0  [z2]; \
      [z2][cam2] overlay=shortest=1:x=0:y=360  [z3]; \
      [z3][cam3] overlay=shortest=1:x=640:y=360 \
    "     -an -c:v libx264  -x264-params keyint=10     -movflags faststart -preset fast -r 10.000000 mosaic.mp4
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1578324600-1-stitched.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:05:00.07, start: 0.000000, bitrate: 96 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x480, 95 kb/s, 10 fps, 25 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '1578324600-1-stitched.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:05:00.07, start: 0.000000, bitrate: 96 kb/s
    Stream #1:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x480, 95 kb/s, 10 fps, 25 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '1578324600-1-stitched.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:05:00.07, start: 0.000000, bitrate: 96 kb/s
    Stream #2:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x480, 95 kb/s, 10 fps, 25 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from '1578324600-1-stitched.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:05:00.07, start: 0.000000, bitrate: 96 kb/s
    Stream #3:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x480, 95 kb/s, 10 fps, 25 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
[libx264 @ 0x171c9e0] using SAR=1/1
[libx264 @ 0x171c9e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x171c9e0] profile High, level 3.1
[libx264 @ 0x171c9e0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=2 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=6 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=1 keyint=10 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=10 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 'mosaic.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 10 fps, 10240 tbn, 10 tbc (default)
    Metadata:
      encoder         : Lavc56.60.100 libx264
Stream mapping:
  Stream #0:0 (h264) -> setpts
  Stream #1:0 (h264) -> setpts
  Stream #2:0 (h264) -> setpts
  Stream #3:0 (h264) -> setpts
  overlay -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[mp4 @ 0x1730600] Starting second pass: moving the moov atom to the beginning of the filerop=4497
frame= 3002 fps= 17 q=-1.0 Lsize=   51052kB time=00:05:00.00 bitrate=1394.1kbits/s dup=0 drop=4498
video:51017kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.068308%
[libx264 @ 0x171c9e0] frame I:301   Avg QP:15.80  size:154257
[libx264 @ 0x171c9e0] frame P:959   Avg QP:21.69  size:  5486
[libx264 @ 0x171c9e0] frame B:1742  Avg QP:22.73  size:   315
[libx264 @ 0x171c9e0] consecutive B-frames: 22.0%  0.0%  5.8% 72.2%
[libx264 @ 0x171c9e0] mb I  I16..4:  9.7% 31.0% 59.4%
[libx264 @ 0x171c9e0] mb P  I16..4:  0.6%  0.7%  0.2%  P16..4: 14.5%  2.8%  2.4%  0.0%  0.0%    skip:78.7%
[libx264 @ 0x171c9e0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  2.7%  0.3%  0.0%  direct: 1.4%  skip:95.5%  L0:25.9% L1:73.3% BI: 0.9%
[libx264 @ 0x171c9e0] 8x8 transform intra:31.8% inter:43.5%
[libx264 @ 0x171c9e0] coded y,uvDC,uvAC intra: 83.2% 85.2% 69.5% inter: 3.0% 6.3% 0.7%
[libx264 @ 0x171c9e0] i16 v,h,dc,p: 35% 21%  8% 36%
[libx264 @ 0x171c9e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 42% 10%  3%  2%  3%  6%  4%  5%
[libx264 @ 0x171c9e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 33%  9%  6%  5%  5%  7%  5%  6%
[libx264 @ 0x171c9e0] i8c dc,h,v,p: 44% 29% 20%  7%
[libx264 @ 0x171c9e0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x171c9e0] ref P L0: 93.8%  6.2%
[libx264 @ 0x171c9e0] ref B L0: 91.7%  8.3%
[libx264 @ 0x171c9e0] ref B L1: 89.3% 10.7%
[libx264 @ 0x171c9e0] kb/s:1392.16

答案1

得分: 1

Version 2.8 is ancient. Update to a modern build (download or compile) and use the xstack filter. It will be faster than color + overlay.

-filter_complex
"[0]setpts=PTS-STARTPTS,crop=iw:360[topleft];
1setpts=PTS-STARTPTS,crop=iw:360[topright];
2setpts=PTS-STARTPTS,crop=iw:360[bottomleft];
3setpts=PTS-STARTPTS,crop=iw:360[bottomright];
[topleft][topright][bottomleft][bottomright]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0"

Additionally you can use a faster -preset such as ultrafast, superfast, veryfast, faster.

英文:

Version 2.8 is ancient. Update to a modern build (download or compile) and use the xstack filter. It will be faster than color + overlay.

-filter_complex \
"[0]setpts=PTS-STARTPTS,crop=iw:360[topleft]; \
[1]setpts=PTS-STARTPTS,crop=iw:360[topright]; \
[2]setpts=PTS-STARTPTS,crop=iw:360[bottomleft]; \
[3]setpts=PTS-STARTPTS,crop=iw:360[bottomright]; \
[topleft][topright][bottomleft][bottomright]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0"

Additionally you can use a faster -preset such as ultrafast, superfast, veryfast, faster.

huangapple
  • 本文由 发表于 2020年1月7日 00:49:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/59615960.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定