FFMpeg: la superposición no se muestra cuando se agrega enable = between
Estoy usando el siguiente comando para agregar efectos de transición entre videos usando superposiciones de modo que cuando uno de los videos está a punto de terminar, la superposición se vuelve visible. Antes de mostrar superposiciones, tengo que agregar relleno y concatenar videos para hacer un solo video y luego mostrar superposiciones:
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]colorkey=0x00d800:0.1[t0];
[t0]scale=w=1080:h=1920[tr0];
[4:v]colorkey=0x00d800:0.1[t1];
[t1]scale=w=1080:h=1920[tr1];
[outv][tr0]overlay=0:0:enable='between(t\,7\,9)'[out0];
[out0][tr1]overlay=0:0:enable='between(t\,12\,15)'[out1];
[0:a][1:a][2:a]concat=n=3:v=0:a=1[audio]"
-vsync 0 -c:v libx264 -pix_fmt yuv420p -map [out1] -map [audio] -preset ultrafast output.mp4
Pero el comando anterior no muestra ningún video superpuesto. Si elimino enable = between (t, start, end) de los parámetros de superposición, toda la superposición se muestra al inicio del video. Soy muy principiante en la edición de video y en FFMpeg. ¿Alguien puede guiarme sobre lo que estoy haciendo mal aquí?
Aquí está el registro de la consola:
ffmpeg version v4.4-dev-416
I/mobile-ffmpeg: 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
I/mobile-ffmpeg: 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:
I/mobile-ffmpeg: 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 :
2020-08-12T17:21:49.000000Z
handler_name :
VideoHandle
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0:1
I/mobile-ffmpeg: (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
I/mobile-ffmpeg: 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
I/mobile-ffmpeg: 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,
I/mobile-ffmpeg: 120 tbr,
12k tbn,
60 tbc
(default)
Metadata:
handler_name :
VideoHandler
I/mobile-ffmpeg: Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 'input3.mp4':
Metadata:
major_brand :
isom
minor_version :
512
compatible_brands:
isomiso2avc1mp41
I/mobile-ffmpeg: 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)
I/mobile-ffmpeg: 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
I/mobile-ffmpeg: Metadata:
handler_name :
SubtitleHandler
I/mobile-ffmpeg: Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'transition1.mp4':
Metadata:
major_brand :
mp42
minor_version :
0
I/mobile-ffmpeg: compatible_brands:
mp41isom
creation_time :
2020-08-17T09:24:04.000000Z
Duration:
00:00:02.22
, start:
0.000000
, bitrate:
2445 kb/s
Stream #3:0
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2414 kb/s
,
30 fps,
30 tbr,
30k tbn,
60 tbc
(default)
I/mobile-ffmpeg: Metadata:
creation_time :
2020-08-17T09:24:04.000000Z
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 :
I/mobile-ffmpeg: 2020-08-17T09:24:04.000000Z
handler_name :
I/mobile-ffmpeg: SoundHandler
I/mobile-ffmpeg: 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:21:33.000000Z
Duration:
00:00:02.22
, start:
0.000000
, bitrate:
2331 kb/s
I/mobile-ffmpeg: Stream #4:0
(und)
: Video: h264 (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2298 kb/s
,
30 fps,
30 tbr,
30k tbn,
60 tbc
(default)
Metadata:
creation_time :
2020-08-17T09:21:33.000000Z
handler_name :
VideoHandler
encoder :
AVC Coding
Stream #4:1
(und)
I/mobile-ffmpeg: : Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 79 kb/s
(default)
Metadata:
creation_time :
2020-08-17T09:21:33.000000Z
handler_name :
SoundHandler
I/mobile-ffmpeg: 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) -> colorkey
Stream #4:0 (h264) -> colorkey
I/mobile-ffmpeg: overlay
-> Stream #0:0 (libx264)
concat
-> Stream #0:1 (aac)
Press [q] to stop, [?] for help
W/mobile-ffmpeg: [graph 0 input from stream 0:0 @ 0x73485c3fc0] sws_param option is deprecated and ignored
[graph 0 input from stream 1:1 @ 0x73485c4140] sws_param option is deprecated and ignored
[graph 0 input from stream 2:1 @ 0x73485c4200] sws_param option is deprecated and ignored
[graph 0 input from stream 3:0 @ 0x73485c42c0] sws_param option is deprecated and ignored
W/mobile-ffmpeg: [graph 0 input from stream 4:0 @ 0x73485c4380] sws_param option is deprecated and ignored
W/mobile-ffmpeg: [swscaler @ 0x7324db9000] No accelerated colorspace conversion found from yuv420p to argb.
W/mobile-ffmpeg: [swscaler @ 0x7324876000] No accelerated colorspace conversion found from yuv420p to argb.
I/mobile-ffmpeg: [libx264 @ 0x7332f9a500] using SAR=1/1
W/mobile-ffmpeg: [libx264 @ 0x7332f9a500] MB rate (8160000000) > level limit (16711680)
I/mobile-ffmpeg: [libx264 @ 0x7332f9a500] using cpu capabilities: ARMv8 NEON
I/mobile-ffmpeg: [libx264 @ 0x7332f9a500] profile Constrained Baseline, level 6.2, 4:2:0, 8-bit
[libx264 @ 0x7332f9a500] 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
I/mobile-ffmpeg: Output #0, mp4, to 'output.mp4':
Metadata:
I/mobile-ffmpeg: 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
I/mobile-ffmpeg: : 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:
I/mobile-ffmpeg: encoder :
Lavc58.96.100 aac
E/Progress: Progress: 3.6918316
D/mobile-ffmpeg: Progress: frame: 1, time: 1002, Pct: 0.036918
I/mobile-ffmpeg: frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:01.00 bitrate= 0.5kbits/s speed=1.13x
Respuestas
El filtro de superposición sincroniza ambas entradas por marcas de tiempo, de modo que la segunda X del video de superposición se imprime encima de la segunda X del video principal. Entonces, con un argumento de overlay=0:0:enable='between(t\,7\,9)'
, ffmpeg comenzará con el objetivo de superponer el marco de superposición con la marca de tiempo 7.00 sobre el video principal con la marca de tiempo 7.00. Si el video de superposición no es tan largo, no habrá ningún efecto.
Las marcas de tiempo de los videos superpuestos deben modificarse para crear la sincronización requerida.
[3:v]colorkey=0x00d800:0.1,scale=w=1080:h=1920,setpts=PTS-STARTPTS+7/TB[tr0];
Los setpts desplazan el primer flujo de transición para comenzar con la marca de tiempo 7. Ahora se puede superponer con enable='between(t\,7\,9)'
.