在Android中使用FFMPEG在另一个视频上循环叠加视频

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android中使用FFMPEG在另一个视频上循环叠加视频相关的知识,希望对你有一定的参考价值。

我想在第一个视频上叠加第二个视频(在圈子上)。我试过,但我在视频中出现故障!

我的命令是

command = "-i " + this.video1Path.getPath() + " -i " + this.video2Path.getPath() + " -filter_complex [1]trim=end_frame=1,geq=lum_expr='st(3,pow(X-(W/2),2)+pow(Y-(H/2),2));if(lte(ld(3)," + (this.mZoomLayout.getZoomedWidth()/2) + "*" + (this.mZoomLayout.getZoomedWidth()/2) + "),255,0)':128:128,format=gray,loop=-1:1,setpts=N/FRAME_RATE/TB[mask];[1][mask]alphamerge,format=rgba,lutrgb=a=if(gte(val\,16)\,val)[cutout];[0][cutout]overlay=" + this.mZoomLayout.getCircleX() + ":" + this.mZoomLayout.getCircleY() + ":enable='between(t,0," + this.videoTwoDuration + ") -c:v libx264 -crf 24 -preset ultrafast " + videoPath.getPath();

示例:我想要这样

enter image description here

但我在视频中遇到了问题

enter image description here

我正在使用ffmpeg android库: - https://github.com/bravobit/FFmpeg-Android

注意:我试过这个链接但从未工作过

https://stackoverflow.com/questions/42518592/circular-movie-overlay-in-ffmpeg(变得毛刺)

FFMPEG日志

11-04 19:56:37.505 28420-28420/app.kdblue.com.ffmpegdemo E/ffmpeg Success: ffmpeg version n4.0-39-gda39990 Copyright (c) 2000-2018 the FFmpeg developers
      built with gcc 4.9.x (GCC) 20150123 (prerelease)
      configuration: --target-os=linux --cross-prefix=/root/bravobit/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/root/bravobit/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-ffprobe --enable-libopus --enable-libvorbis --enable-libfdk-aac --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-libvpx --enable-libass --enable-yasm --enable-pthreads --disable-debug --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-linux-perf --disable-doc --disable-shared --enable-static --enable-runtime-cpudetect --enable-nonfree --enable-network --enable-avresample --enable-avformat --enable-avcodec --enable-indev=lavfi --enable-hwaccels --enable-ffmpeg --enable-zlib --enable-gpl --enable-small --enable-nonfree --pkg-config=pkg-config --pkg-config-flags=--static --prefix=/root/bravobit/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/root/bravobit/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/root/bravobit/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-cxxflags=
      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
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  1.100 /  5.  1.100
      libswresample   3.  1.100 /  3.  1.100
      libpostproc    55.  1.100 / 55.  1.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/MixVideos/video1_1541341464579.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: isommp42
        creation_time   : 2018-11-04T14:24:29.000000Z
        com.android.version: 8.1.0
        com.android.manufacturer: OnePlus
        com.android.model: ONE A2003
      Duration: 00:00:04.15, start: 0.000000, bitrate: 9983 kb/s
        Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 9978 kb/s, SAR 1:1 DAR 16:9, 29.39 fps, 30 tbr, 90k tbn, 180k tbc (default)
        Metadata:
          rotate          : 90
          creation_time   : 2018-11-04T14:24:29.000000Z
          handler_name    : VideoHandle
        Side data:
          displaymatrix: rotation of -90.00 degrees
    Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/MixVideos/video2_1541341478507.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: isommp42
        creation_time   : 2018-11-04T14:24:42.000000Z
        com.android.version: 8.1.0
        com.android.manufacturer: OnePlus
        com.android.model: ONE A2003
      Duration: 00:00:02.62, start: 0.000000, bitrate: 9833 kb/s
        Stream #1:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 9824 kb/s, SAR 1:1 DAR 16:9, 29.73 fps, 30 tbr, 90k tbn, 180k tbc (default)
        Metadata:
          rotate          : 90
          creation_time   : 2018-11-04T14:24:42.000000Z
          handler_name    : VideoHandle
        Side data:
          displaymatrix: rotation of -90.00 degrees
    Stream mapping:
      Stream #0:0 (h264) -> overlay:main
      Stream #1:0 (h264) -> trim
      Stream #1:0 (h264) -> alphamerge:main
      overlay -> Stream #0:0 (libx264)
    Press [q] to stop, [?] for help
    [swscaler @ 0xed8a7000] No accelerated colorspace conversion found from yuv420p to rgba.
    [libx264 @ 0xf2016c00] using SAR=1/1
    [libx264 @ 0xf2016c00] using cpu capabilities: ARMv6 NEON
    [libx264 @ 0xf2016c00] profile Constrained Baseline, level 4.0
    [libx264 @ 0xf2016c00] 264 - core 152 r2851M ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 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=0 threads=12 lo
答案

这是由avfilter: slice processing for geq引起的错误。您可以:

  • 添加-filter_complex_threads 1(或-filter_threads 1为任何其他读者使用-vf而不是-filter_complex)到你的命令。
  • 或者使用之前的提交:make distclean; git checkout 206b25f9f45a7a0e408338f9f6ab022ff2efb196 && ./configure --enable-gpl && make ffmpeg

以上是关于在Android中使用FFMPEG在另一个视频上循环叠加视频的主要内容,如果未能解决你的问题,请参考以下文章

Android - 获取视频帧的 FFmpeg 替代方案。 (由于许可)

android 中使用ffmpeg,将视频加入字幕,用ass文件,在PC上可以,但在Android上一直不行

Android使用FFmpeg播放视频(二):音频播放

android ffmpeg视频添加字幕和配音

在 Android 中使用 FFmpeg 将视频裁剪为方形格式

视频学习笔记:Android ffmpeg解码多路h264视频并显示