Error de ffmpeg al intentar concatenar 2 partes con diferente velocidad

Error de ffmpeg al intentar concatenar 2 partes con diferente velocidad

Estoy intentando concatenar partes del mismo vídeo de entrada, pero uno se acelera 20 veces. El código que estoy usando es este:

ffmpeg -i 7.mp4 -filter_complex "[0:v]select='between(t,0,9)',setpts=PTS-STARTPTS[vn];[0:a]aselect='between(t,0,9)',asetpts=PTS-STARTPTS[an];[0:v]select='between(t,191,1174)',setpts=(1/20)*(PTS-STARTPTS)[vr];[0:a]aselect='between(t,191,1174)',atempo=20,asetpts=PTS-STARTPTS[ar];[vn][an][vr][ar]concat=n=2:v=1:a=1[vid]" -map [vid] -c:v libx265 -tag:v hvc1 -crf 23 -preset slow "output5.mp4"

¿Alguna idea de lo que estoy haciendo mal, acerca de la parte de no poder asignar memoria? Tengo 16 GB de memoria y solo ejecuto ffmpeg...

Errores:

[h264 @ 00000181d923ccc0] get_buffer() failed
[h264 @ 00000181d923ccc0] thread_get_buffer() failed
[h264 @ 00000181d923ccc0] decode_slice_header error
[h264 @ 00000181d923ccc0] no frame!
[fc#0 @ 00000181d91dbdc0] Task finished with error code: -12 (Cannot allocate memory)peed=0.0342x
[fc#0 @ 00000181d91dbdc0] Terminating thread with return code -12 (Cannot allocate memory)
[vist#0:0/h264 @ 00000181db1bbcc0] [dec:h264 @ 00000181d91e4680] Error submitting packet to decoder: Invalid data found when processing input

Respuesta1

Parece un error en FFmpeg, que está relacionado con la concatenación de un vídeo consigo mismo.
Una posible solución es utilizar el mismo archivo de entrada dos veces (como si fueran dos archivos de entrada):

ffmpeg -i 7.mp4 -i 7.mp4 -filter_complex "[0:v]select='between(t,0,9)',setpts=PTS-STARTPTS[vn];[0:a]aselect='between(t,0,9)',asetpts=PTS-STARTPTS[an];[1:v]select='between(t,191,1174)',setpts=(1/20)*(PTS-STARTPTS)[vr];[1:a]aselect='between(t,191,1174)',atempo=20,asetpts=PTS-STARTPTS[ar];[vn][an][vr][ar]concat=n=2:v=1:a=1[vid]" -map [vid] -c:v libx265 -tag:v hvc1 -crf 23 -preset slow "output5.mp4"


La siguiente expiación es solo una suposición:
al concatenar dos partes de la misma entrada, creo que hay casos en los que FFmpeg almacena muchos cuadros decodificados en la memoria (cuadros de almacenamiento en búfer). El objetivo del almacenamiento en búfer es evitar decodificar los mismos fotogramas varias veces. Cuando se utiliza la misma entrada dos veces, cada entrada se decodifica por separado (evite el almacenamiento en búfer). No estoy seguro del mecanismo de almacenamiento en búfer, pero podría explicar el error "No se puede asignar memoria".

información relacionada