FFmpeg Kein solcher Filterfehler

Ich versuche, FFmpeg zu verwenden, um ein neues Video mit einigen wiederholten Frames und darin eingefügten schwarzen Frames zu erstellen. Hier ist mein Befehl:

#! /bin/sh
fn="Drifting with Cars.mp4"

#
ffmpeg -y -i "${fn}" -ss 00:00:05 -to 00:00:06 -r 1/1 _05.png
ffmpeg -y -i "${fn}" -ss 00:00:10 -to 00:00:11 -r 1/1 _10.png
ffmpeg -y -i "${fn}" -ss 00:00:15 -to 00:00:16 -r 1/1 _15.png
ffmpeg -y -i "${fn}" -ss 00:00:20 -to 00:00:21 -r 1/1 _20.png
ffmpeg -y -i "${fn}" -ss 00:00:25 -to 00:00:26 -r 1/1 _25.png
ffmpeg -y -i "${fn}" -ss 00:00:30 -to 00:00:31 -r 1/1 _30.png
ffmpeg -y -i "${fn}" -ss 00:00:35 -to 00:00:36 -r 1/1 _35.png

#
ffmpeg -y -i "${fn}" \
-i _05.png \
-i _10.png \
-i _15.png \
-i _20.png \
-i _25.png \
-i _30.png \
-i _35.png \
-filter_complex "
[0:v]trim=0:5,setpts=PTS-STARTPTS[0v_1];
[1:v]loop=loop=25*3:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=2:d=1[pause1];
[0:v]trim=5:10,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_2];
[2:v]loop=loop=25*4:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=3:d=1[pause2];
[0:v]trim=10:15,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_3];
[3:v]loop=loop=25*5:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=3:d=2[pause3];
[0:v]trim=15:20,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_4];
[4:v]loop=loop=25*6:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=3:d=3[pause4];
[0:v]trim=20:25,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_5];
[5:v]loop=loop=25*7:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=3:d=4[pause5];
[0:v]trim=25:30,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_6];
[6:v]loop=loop=25*5:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=3:d=2[pause6];
[0:v]trim=30:35,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_7];
[7:v]loop=loop=25*3:size=2
,drawtext='fontsize=40:fontcolor=0x0000FF@0.7
:text=pause -> fade-out':x=920:y=20:shadowcolor=black@0.7:shadowx=1:shadowy=1
,fade=t=out:st=2:d=1[pause7];
[0:v]trim=35,setpts=PTS-STARTPTS
,fade=t=in:d=1[0v_8];

[0v_1][pause1]
[0v_2][pause2]
[0v_3][pause3]
[0v_4][pause4]
[0v_5][pause5]
[0v_6][pause6]
[0v_7][pause7]
[0v_8]
concat=n=15:a=0:v=1[v]
" -map '[v]' -an "DriftingWithCars_pf.mp4"

Aber beim Ausführen (des Filterteils) erhalte ich die folgende Fehlermeldung:

[AVFilterGraph @ 0x2261560] No such filter: 'loop'
Error initializing complex filters.
Invalid argument

Was ist das Problem? Woher kommt das? Ich verwende eine aktualisierte Version von ffmpeg:version 2.8.15 Copyright (c) 2000-2018

Antworten (1)

Der 2.8-Zweig ist zu alt. Der Schleifenfilter wurde am 18.02.2016 hinzugefügt. Der 2.8-Zweig wurde am 05.09.2015 vom Master-Zweig getrennt. Release-Zweige erhalten keine neuen Features, die zurückportiert werden (nur gelegentliche Fehlerbehebungen).

Verwenden Sie kein so altes FFmpeg. Kompilieren oder laden Sie einen aktuellen Build herunter.

Mit können Sie eine Liste der verfügbaren Filter für Ihren Build anzeigen ffmpeg -filters.

Ja, mein Update hat es geschafft! Wusste nicht, dass Schleife kürzlich hinzugefügt wurde! Danke.
@TinaJ Es wurde vor mehr als drei Jahren hinzugefügt, was ein paar Epochen in Bezug auf die FFmpeg-Entwicklung sind. Verwenden Sie immer eine aktuelle Version.
Danke. Das Problem ist nun, dass Ihr freezedetectBefehl in der anderen Frage in diesem generierten Video keine erkennt :-/
@TinaJ Experimentieren Sie mit den Werten für die beiden Optionen. In meinem Beispiel wurden nur die Standardwerte verwendet.
oh nein ... tut mir leid. Eingabe war das Originalvideo! Lol
weißt du zufällig was die lizenz für freezedetect filter ist? Können wir es aus dem Quellcode verwenden?
@TinaJ Dem Inhalt nach libavfilter/vf_freezedetect.cist es LGPL 2.1 oder höher lizenziert. Ich bin mir nicht sicher, was Sie in Ihrer 2. Frage fragen.
Ja, ich meinte, wenn wir diesen Filterquellcode auf Unternehmensebene verwenden können.
@TinaJ Natürlich kannst du das. Sie müssen nur die LGPL einhalten.