2017-06-23 6 views
0

Ich versuche, einen Knoten zu erstellen (eine Sammlung von Knoten ist auch in Ordnung), die viele Streams und einen Index aufnimmt und einen Stream durch den Index angegeben. Grundsätzlich möchte ich einen Mux Knoten zu erstellen, so etwas wie:FFmpeg Filter zur Auswahl von Video/Audio-Streams

Node : Stream ... Number -> Stream 

FFmpegs Filtergraph API zwei Filter zu haben scheint zu tun, dass: streamselect (für Video) und astreamselect (für Audio). Und zum größten Teil, scheinen sie zu tun, was ich will:

[in0][in1][in2]streamselect=inputs=3:map=1[out] 

Dieser Strom nimmt in drei Video-Streams und gibt die zweiten in1.

Sie können einen ähnlichen Filter für Audio-Streams verwenden:

[in0][in1]astreamselect=inputs=2:map=0[out] 

, die in zwei Strömen und Ausgang der ersten in0 nehmen.

Die Frage ist, kann ich einen Filter erstellen, der eine Liste von Audio- und Video-Streams aufnimmt und den Stream nur basierend auf dem Stream-Index ausgibt? So etwas wie:

[v0][v1][a0][a1][a2]avstreamselect=inputs=5:map=3[out] 

Welche a1 zu out Karten?

Wenn es hilft, verwende ich die libavfilter C API anstelle der Befehlszeilenschnittstelle.

Antwort

0

Es ist zwar nicht möglich sein kann, mit einem Filter , ist es durchaus möglich, diese mehrere Filter durch die Kombination zu tun, ein für entweder Audio oder Video (je nachdem, welches Sie auswählen), und eine Reihe von nullsink oder anullsink Filter für den Rest von ihnen.

Zum Beispiel wäre der Filter:

[v0][v1][a0][a1]avstreamselect=inputs=4:map=2[out] 

die in zwei Videoströmen und zwei Audio-Streams, und gibt den dritten Strom (der erste Audiostrom) nimmt, kann geschrieben werden als:

[a0][a1]astreamselect=inputs=2:map=0[out]; 
[v0]nullsink;[v1]nullsink 

Hier führen wir Select für den ersten Stream aus und alle verbleibenden werden Senken zugeordnet. Diese Idee könnte möglicherweise nur verallgemeinert werden nullsink, verwenden anullsink, copy und , könnten zum Beispiel haben wir es auch mit 4 Knoten geschrieben:

[a0]acopy[out]; 
[a1]anullsink; 
[v0]nullsink; 
[v1]nullsink 

Ich weiß noch nicht, ob es ist oder nicht. Fühlen Sie sich frei, dies zu entfernen, wenn es tatsächlich möglich ist.