Wie wende ich einen Timecode an und beschleunige dann ein Video mit ffmpeg x4, ohne an Qualität zu verlieren?

Ich versuche, eine .bat-Datei für ffmpeg zu erstellen, die:

  • Wendet ein Timecode-Overlay an (z. B. 00:17:23:02)
  • Beschleunigt das Video x4 (aber NACHDEM der Timecode angewendet wurde)
  • Berührt nicht die Qualität des Originalvideos

Das habe ich bekommen:

for %%a in ("*.avi") do ( ffmpeg.exe -i "%%a" -vf "drawtext=fontfile=C\\:/Windows/Fonts/arial.ttf:timecode='00\:00\:00\:00':rate=5:text='Real \time\:':fontsize=46:fontcolor=white:x=30:y=30: box=1: boxcolor=0x00000000@1" -f avi "%%~na_with-time.avi" )


Es funktioniert, aber ich kann das Video nicht x4 beschleunigen und es verliert auch viel an Qualität (sehr pixelig, wenn ich mich im Video bewege).

Dies ist der Code, den ich verwenden könnte, um das Video x4 zu beschleunigen, aber ich kann ihn nicht in den obigen Code einfügen (um zu funktionieren):"setpts=0.25*PTS"

Auch das ist die Qualität:

So sieht das Video vorher aus:

Nach der Konvertierung mit dem obigen ffmpeg .bat-Code:

Gibt es eine Möglichkeit, das Video x4 zu beschleunigen (aber mit dem normalen Zeitcode) und auch die Qualität des exportierten Videos nicht zu ändern)?

Gibt es auch eine Möglichkeit, die Blackbox hinter dem Timecode etwas größer zu machen (5 Pixel in alle Richtungen: links, oben, rechts, unten)? Oder vielleicht ein Stricheffekt für den Text anstelle der Blackbox?

Antworten (1)

Verwenden

for %%a in ("*.avi") do (
    ffmpeg.exe -i "%%a" -vf "drawtext=fontfile=C\\:/Windows/Fonts/arial.ttf:timecode='00\:00\:00\:00':rate=5:text='Real \time\:':fontsize=46:fontcolor=white:x=30:y=30:box=1:boxcolor=0x00000000@1:boxborderw=5,setpts=0.25*PTS" -c:v libx264 -f avi "%%~na_with-time.avi"
)

Für Rahmenbreite hinzugefügt boxborderw=5.

Setpts nach dem Drawtext hinzugefügt.

Encoder explizit hinzugefügt -c:v libx264- seine Standardeinstellungen sollten gute Bilder erzeugen. Sie können auch beim Standard-Encoder (mpeg4) bleiben und nur -q:v 5für eine anständige Qualität hinzufügen - die Standardeinstellung von 200 kbps ist zu niedrig.


Entfernen Sie für eine benutzerdefinierte Timecode-Zeichenfolgetimecode='00\:00\:00\:00':rate=5

und wechseln textzu

text='Real \time\: %{eif\:trunc(t/3600)\:d\:2}h %{eif\:trunc(mod(t/60\,60))\:d\:2}m %{eif\:trunc(mod(t\,60))\:d\:2}s'

Danke dir! Gibt es eine Möglichkeit, Real time:00:06:31:04 durch Real time: 00h 06m 31s zu ersetzen (also gibt es nach time: kein Leerzeichen mehr : und Frames (neueste Ziffern) werden entfernt)?
Außerdem ist es möglich, den Timecode (horizontal) zu zentrieren, ohne zu prüfen, wie breit das Video ist (also verwende ich nicht 1920/2 = 960). Vielleicht so etwas wie 50 % (ähnlich wie HTML/CSS 50 %)?
Für die horizontale Zentrierung fügen Sie hinzu x='(W-tw)/2'. Eine benutzerdefinierte Zeichenfolge kann erstellt werden, ist jedoch etwas kompliziert, sodass ich sie morgen hinzufügen werde.
Vielen Dank! Ich habe den Code getestet und es gibt ein Problem mit der Textgröße des Timecodes. Wenn das Video sehr groß ist (2K/4K), ist der Timecode sehr klein. Gibt es eine Möglichkeit, den Timecode auf 20 % der Breite des Videos einzustellen?
Nicht direkt. Fügen Sie hinzu fontsize=H/10, wo H die Videohöhe ist. Testen Sie und sehen Sie, welcher Ausdruck zu dem erforderlichen Footprint führt.
Danke dir! Gibt es eine Möglichkeit, dieses Problem zu beheben: Manchmal ist das gerenderte/konvertierte Video länger als die tatsächliche Zeit (in diesem Screenshot heißt es also, dass es 51 Minuten lang ist, aber tatsächlich sind es 7:59 Minuten, es kann nicht länger als 7:59 sein Minuten in diesem Player): i.imgur.com/MozuyV4.png
Das klingt nach einem beschädigten AVI. Kann C4D in einem anderen Format speichern?
Ich nehme nicht mit/speichere von Cinema 4D auf. Ich nehme mit Bandicam auf.