I am trying to concatenate 3 videos of different resolutions and overlaying 2 videos as transition effects(though the chroma key color removal is not yet implemented) between videos using below command:
ffmpeg
-i input1.mp4
-i input2.mp4
-i input3.mp4
-i transition1.mp4
-i transition2.mp4
-filter_complex
"[0:v]pad=width=1080:height=1920:x=(1080-iw)*0.5:y=(1920-ih)*0.5:color=black[video0];
[1:v]pad=width=1080:height=1920:x=(1080-iw)*0.5:y=(1920-ih)*0.5:color=black[video1];
[2:v]pad=width=1080:height=1920:x=(1080-iw)*0.5:y=(1920-ih)*0.5:color=black[video2];
[video0][video1][video2]concat=n=3:v=1:a=0[outv];
[3:v]scale=w=1080:h=1920[t0];
[4:v]scale=w=1080:h=1920[t1];
[outv][t0]overlay=enable='between(t,6.6045,9.6335)'[out0];
[out0][t1]overlay=enable='between(t,12.5655,15.6165)'[out1];
[0:a][1:a][2:a]concat=n=3:v=0:a=1[audio]"
-c:v libx264 -pix_fmt yuv420p -map [out1] -map [audio] -preset ultrafast output.mp4
I get success only with few videos. Most of the times the command execution never stops. It keeps on appending something to the output video file even for hours. Here is the output from console:
ffmpeg version v4.4-dev-416
Copyright (c) 2000-2020 the FFmpeg developers
built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android24-clang --cxx=aarch64-linux-android24-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls --enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2 --enable-libopencore-amrnb --enable-libshine --enable-libspeex --enable-libwavpack --enable-libkvazaar --enable-libx264 --enable-gpl --enable-libxvid --enable-gpl --enable-libx265 --enable-gpl --enable-libvidstab --enable-gpl --enable-libilbc --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libaom --enable-libtwolame --disable-sdl2 --enable-libvo-amrwbenc --enable-zlib --enable-mediacodec
libavutil 56. 55.100 / 56. 55.100
libavcodec 58. 96.100 / 58. 96.100
libavformat 58. 48.100 / 58. 48.100
libavdevice 58. 11.101 / 58. 11.101
libavfilter 7. 87.100 / 7. 87.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input1.mp4':
Metadata:
major_brand :
mp42
minor_version :
0
compatible_brands:
isommp42
creation_time :
2020-08-12T17:21:49.000000Z
com.android.version:
9
Duration:
00:00:08.12
, start:
0.000000
, bitrate:
17298 kb/s
Stream #0:0
(eng)
: Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 16309 kb/s
, SAR 1:1 DAR 16:9
,
28.70 fps,
29.50 tbr,
90k tbn,
60 tbc
(default)
Metadata:
rotate :
90
creation_time :
handler_name :
VideoHandle
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1
(eng)
: Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s
(default)
Metadata:
creation_time :
2020-08-12T17:21:49.000000Z
handler_name :
SoundHandle
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'input2.mp4':
Metadata:
major_brand :
isom
minor_version :
512
compatible_brands:
isomiso2avc1mp41
encoder :
Lavf57.25.100
Duration:
00:00:05.97
, start:
0.000000
, bitrate:
770 kb/s
Stream #1:0
(und)
: Audio: aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
handler_name :
SoundHandler
Stream #1:1
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 368x480, 608 kb/s
,
27.29 fps,
120 tbr,
12k tbn,
60 tbc
(default)
Metadata:
handler_name :
VideoHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 'input3.mp4':
Metadata:
major_brand :
isom
minor_version :
512
compatible_brands:
isomiso2avc1mp41
encoder :
Lavf55.19.104
Duration:
00:00:13.05
, start:
0.000000
, bitrate:
2453 kb/s
Chapter #2:0:
start 0.000000,
end 13.033000
Metadata:
title :
Stream #2:0
(und)
: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
handler_name :
SoundHandler
Stream #2:1
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 640x480, 2320 kb/s
,
25 fps,
25 tbr,
1200k tbn,
50 tbc
(default)
Metadata:
handler_name :
VideoHandler
Stream #2:2
(eng)
: Data: bin_data (text / 0x74786574), 0 kb/s
Metadata:
handler_name :
SubtitleHandler
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'transition1.mp4':
Metadata:
major_brand :
mp42
minor_version :
0
compatible_brands:
mp41isom
creation_time :
2020-08-17T09:31:23.000000Z
Duration:
00:00:03.03
, start:
0.000000
, bitrate:
6263 kb/s
Stream #3:0
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6307 kb/s
,
30 fps,
30 tbr,
30k tbn,
60 tbc
(default)
Metadata:
creation_time :
handler_name :
VideoHandler
encoder :
AVC Coding
Stream #3:1
(und)
: Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 79 kb/s
(default)
Metadata:
creation_time :
2020-08-17T09:31:23.000000Z
handler_name :
SoundHandler
Input #4, mov,mp4,m4a,3gp,3g2,mj2, from 'transition2.mp4':
Metadata:
major_brand :
mp42
minor_version : 0
compatible_brands:
mp41isom
creation_time :
2020-08-17T09:30:33.000000Z
Duration:
00:00:03.05
, start:
0.000000
, bitrate:
7828 kb/s
Stream #4:0
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 7873 kb/s
,
30 fps,
30 tbr,
30k tbn,
60 tbc
(default)
Metadata:
creation_time :
2020-08-17T09:30:33.000000Z
handler_name :
VideoHandler
encoder :
AVC Coding
Stream #4:1
(und)
: Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 79 kb/s
(default)
Metadata:
creation_time :
2020-08-17T09:30:33.000000Z
handler_name :
SoundHandler
Stream mapping:
Stream #0:0 (h264) -> pad
Stream #0:1 (aac) -> concat:in0:a0
Stream #1:0 (aac) -> concat:in1:a0
Stream #1:1 (h264) -> pad
Stream #2:0 (aac) -> concat:in2:a0
Stream #2:1 (h264) -> pad
Stream #3:0 (h264) -> scale
Stream #4:0 (h264) -> scale
overlay
-> Stream #0:0 (libx264)
concat
-> Stream #0:1 (aac)
Press [q] to stop, [?] for help
[graph 0 input from stream 0:0 @ 0x733a19a900] sws_param option is deprecated and ignored
[graph 0 input from stream 1:1 @ 0x733a19aa80] sws_param option is deprecated and ignored
[graph 0 input from stream 2:1 @ 0x733a19ab40] sws_param option is deprecated and ignored
[graph 0 input from stream 3:0 @ 0x733a19ac00] sws_param option is deprecated and ignored
[graph 0 input from stream 4:0 @ 0x733a19acc0] sws_param option is deprecated and ignored
[mp4 @ 0x733a679400] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
[libx264 @ 0x733a1b0600] using SAR=1/1
[libx264 @ 0x733a1b0600] MB rate (8160000000) > level limit (16711680)
[libx264 @ 0x733a1b0600] using cpu capabilities: ARMv8 NEON
[libx264 @ 0x733a1b0600] profile Constrained Baseline, level 6.2, 4:2:0, 8-bit
[libx264 @ 0x733a1b0600] 264 - core 160 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - 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 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to 'output.mp4':
Metadata:
major_brand :
mp42
minor_version :
0
compatible_brands:
isommp42
com.android.version:
9
encoder :
Lavf58.48.100
Chapter #0:0:
start 0.000000,
end 13.033000
Metadata:
title :
Stream #0:0
: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p(progressive), 1080x1920 [SAR 1:1 DAR 9:16], q=-1--1
,
1000k tbn,
1000k tbc
(default)
Metadata:
encoder :
Lavc58.96.100 libx264
Side data:
cpb:
bitrate max/min/avg: 0/0/0 buffer size: 0
vbv_delay: N/A
Stream #0:1
: Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
encoder :
Lavc58.96.100 aac
E/Progress: Progress: 3.6918316
D/mobile-ffmpeg: Progress: frame: 1, time: 1002, Pct: 0.036918
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:01.00 bitrate= 0.5kbits/s speed=1.79x
More than 1000 frames duplicated
I even tried command without overlay and audio parts but result was same. I am working on Android app and using below ffmpeg wrapper library:
The concat filter can reset the frame rate of the output video stream to the stream time base. This can cause mass frame duplication, which will slow down ffmpeg a lot, making it look like ffmpeg is stuck.
Add -vsync 0
to prevent frame duplication.