Verwenden von ffmpeg zum Codieren eines Videos hoher Qualität [geschlossen]

92

Ich habe eine Reihe von Videobildern als Bilder in einem Verzeichnis gespeichert und versuche, diese in ein Video von guter Qualität zu kodieren. Jede Einstellung und jedes Format, das ich versuche, erzeugt jedoch sehr auffällige Artefakte.

Der grundlegende Befehl lautet:

ffmpeg -r 25 -i %4d.png myvideo.mpg

und ich habe die Minrate- und Maxrate-Flags ausprobiert. Jedes der Formate {mpg, avi, mov, flv} ist ausreichend.

Anregungen für Einstellungen? Die endgültige Dateigröße ist kein Problem.

CakeMaster
quelle
7
Auf meinem Mac verwende ich den folgenden Befehl : ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Ich stellte fest, dass ich die Framerate sowohl für die Eingabe- als auch für die Ausgabedatei angeben musste, um sie zu erzwingen. Dieser Codec scheint für mich zu funktionieren - Sie müssen ihn möglicherweise nicht angeben. Ich wollte nur einschließen, was ich getan habe, weil ich viel Zeit damit verbracht habe, daran zu arbeiten. Der einzige Nachteil ist, dass meine Eingabebilder kontrastreich sind (blaue und rote Kugeln vor weißem Hintergrund) und später im Film alle Kugeln die gleiche dunkle Farbe annehmen - ein unerwünschter Kontrasteffekt.
Jvriesem
Danke @jvriesem! Das hat bei mir super funktioniert.
Dan Loewenherz
Ich schlage vor, diese Frage in StackOverflow für Multimedia-Systeme
Hamed
c ++ - Version stackoverflow.com/a/43464269/6180077 Besuchen Sie diesen Link, um die Bildschirmschreiberanwendung im FFMPEG c ++ mp4-Format zu verwenden.
Abdullah Farweez
Überprüfen Sie diesen Link, der das Schreiben von Videodateien mit FFMPEG-Bibliotheken programmgesteuert demonstriert
Abdullah Farweez

Antworten:

64

Einige Sachen:

  • Sie müssen die Videobitrate einstellen. Ich habe noch nie Minrate und Maxrate verwendet, daher weiß ich nicht, wie genau sie funktionieren, aber durch Einstellen der Bitrate mit dem -bSchalter kann ich qualitativ hochwertige Videos erhalten. Sie müssen eine Bitrate entwickeln, die einen guten Kompromiss zwischen Komprimierung und Videoqualität bietet. Möglicherweise müssen Sie damit experimentieren, da alles von der Bildgröße, der Bildrate und der Bewegungsmenge im Inhalt Ihres Videos abhängt. Denken Sie daran, dass DVDs im Durchschnitt bei 720 x 480 etwa 4 bis 5 Mbit / s betragen. Daher beginne ich normalerweise dort und entscheide, ob ich mehr oder weniger benötige, und experimentiere dann einfach. Sie können beispielsweise -b 5000kder Befehlszeile hinzufügen , um mehr oder weniger DVD-Videobitrate zu erhalten.

  • Sie müssen einen Video-Codec angeben. Wenn Sie dies nicht tun, verwendet ffmpeg standardmäßig MPEG-1, das ziemlich alt ist und nicht annähernd so viel Komprimierung bietet wie MPEG-4 oder H.264. Wenn Ihre ffmpeg-Version mit libx264-Unterstützung erstellt wurde, können Sie dies -vcodec libx264als Teil der Befehlszeile angeben . Ansonsten macht -vcodec mpeg4es auch einen besseren Job als MPEG-1, aber nicht so gut wie x264.

  • Es gibt viele andere erweiterte Optionen, mit denen Sie die beste Qualität bei niedrigsten Bitraten erzielen können. Schauen Sie sich hier einige Beispiele an.

Jason B.
quelle
6
Eine konstante Bitrate ist schlecht für die Qualität. Die Verwendung eines konstanten Geschwindigkeitsfaktors ist überlegen (dies ist einer der x264-Betriebsmodi). Zum Beispiel : ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 ist das CRF mit sehr geringem Qualitätsverlust, aber die Bitrate wird wahrscheinlich niedrig sein. Sie können auch größere CRF-Werte ausprobieren, wenn Sie eine kleinere Dateigröße benötigen. Und wie Sie sehen, ist das ziemlich einfach.
Anzeigename
Beachten Sie, dass -b vor dem Video sein muss, aber nach der Eingabe -i
mateuszb
45

Sie müssen die Option -vb angeben, um die Videobitrate zu erhöhen. Andernfalls erhalten Sie die Standardeinstellung, die kleinere Videos mit mehr Artefakten erzeugt.

Versuchen Sie so etwas:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg

jeff7
quelle
1
das ist gut für mich, danke;)
thiago.adriano26
15

Stellen Sie sicher, dass die PNGs vollständig undurchsichtig sind, bevor Sie das Video erstellen

Geben Sie ihnen beispielsweise mit imagemagick einen schwarzen Hintergrund:

convert 0.png -background black -flatten +matte 0_opaque.png

Nach meinen Tests reicht keine Bitrate oder kein Codec aus, um das Video gut aussehen zu lassen, wenn Sie ffmpeg-PNGs mit Transparenz füttern

Oran Fry
quelle
Dies löste das Problem für mich.
Matěj Kripner
0

Wenn Sie keine Nachbearbeitung durchführen, ist das Video niemals besser als die Originalbilder. Auch genau wie bei einem Daumenkino wird es lustig aussehen, wenn Sie einen großen "Sprung" zwischen Keyframes haben. Im Allgemeinen benötigen Sie genügend "Tweens" zwischen den Keyframes, um eine reibungslose Animation zu erzielen. HTH

JustBoo
quelle
Die Bilder stammen ursprünglich aus einer Videosequenz. Sie haben gerade ein bisschen beschnitten, skaliert und was nicht mit Imagemagick gemacht. Die Effekte sind definitiv Kompressionsartefakte. Ich habe jetzt diesen Beitrag gesehen, der eine Antwort zu haben scheint: stackoverflow.com/questions/3158235/…
CakeMaster
@CakeMaster Ich habe die verlustbehaftete Komprimierung nicht erwähnt, da Sie in Ihrem Beispiel ".png" -Bilder haben. .png's können verlustbehaftet sein, aber ich finde, dass dies normalerweise nicht der Fall ist. .jpg's sind fast immer verlustbehaftet, daher die Artefakte bei ihrer Verwendung. Wenn Sie können, können Sie Ihre PNGs mit verlustfreier Komprimierung erneut speichern.
JustBoo