Ich nehme meinen Desktop mit avconv (auch bekannt als ffmpeg) auf und skaliere ihn dann auf 720p.
Ich habe kürzlich zu meinem Skript hinzugefügt, damit sie ein Fenster mit xwininfo auswählen können, das dieses speziell aufzeichnet.
Wenn das Ausgabeformat jedoch nicht durch 2 teilbar ist, flippt der Encoder aus und ich bekomme mein Video nicht.
Gibt es eine Möglichkeit, dies in ffmpeg zu beheben, damit ich nicht ein paar manuelle Berechnungen in Bash durchführen muss, um die Skalierungswerte festzulegen?
Ist es möglich, dass der Skalierungsfilter eine Breite / Höhe subtrahiert / addiert, wenn sie ungleichmäßig sind? (runden?)
Ist es möglich, einen anderen Filter nach der ursprünglichen Skala anzuwenden, um dies zu erreichen? (Dies würde Videos runden, die eine ungleichmäßige Eingabegröße und keine Skalierung haben.)
#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Einige alte Mailinglisten schlagen eine round()
Funktion vor, die Sie im Filter verwenden können, aber ich kann die Syntax anscheinend nicht richtig verstehen. Wenn es funktioniert, würde ein scale=round(iw,2):round(ih,2)
am Ende angewendeter Filter alle meine Probleme auf einmal lösen. iw
und ih
scheinen nicht zu funktionieren.
ceil
stattdessentrunc
, um eine höhereEigentlich kann der Filter direkt damit umgehen. Sie müssen nur passieren ,
-2
anstatt-1
an den Filter: zBIch war überrascht, dies in einem Fehlerbericht von vor 3 Jahren herauszufinden .
quelle
Nach vielen Experimenten sieht es so aus, als würde der folgende Filter, der angewendet wird, nachdem andere Skalierungsfilter die Breite und Höhe auf 2 gerundet haben.
Es ist im Grunde eine Sache der Teilung, Runde, Multiplikation, ich hatte einfach nicht die richtige Syntax.
quelle