Ich möchte viele Videodateien für die Website unseres Unternehmens in Flash-Videos konvertieren. Ich habe eine Anforderung, dass alle Videos im 360p-Format vorliegen müssen, damit ihre Größe Nx360 ist.
FFMpeg verwendet das Argument -s , um die Zielauflösung als B x H anzugeben . Ich kenne W idth nicht, da es vom Seitenverhältnis der Quelldatei abhängt. Wenn die Quelle 640 x 480 ist, ist das Ziel 480 x 360. Wenn die Quelle 848 x 480 ist, ist das Ziel 636 x 360.
Gibt es eine Möglichkeit, es mit einem Schalter von ffmpeg zu tun? Dass das Seitenverhältnis erhalten bleibt und ich nur die Höhe des Zielvideos angeben werde?
Ich könnte es leicht lösen, indem ich ein Programm mache, das ffprobe startet, um die Größe des Quellvideos zu ermitteln, das Seitenverhältnis zu berechnen und dann eine neue Breite zu berechnen.
Es sind noch nicht genügend Punkte vorhanden, um eine vorhandene Antwort zu kommentieren. Dies folgt jedoch der Antwort von user65600 und wird fortgesetzt, wenn für bestimmte Codecs eine durch 2 teilbare Breite / Höhe erforderlich ist (z. B. libx264).
Wenn Sie -1 (Variable / Unbekannt) verwenden, kann eine ungerade Zahl zurückgegeben werden. Um eine gerade # zu gewährleisten, müssen Sie so etwas wie verwenden
trunc(ow/a/2)*2
, dass automatisch die nächste gerade # berechnet wird, während das Seitenverhältnis beibehalten wird.Quelle: https://ffmpeg.org/trac/ffmpeg/ticket/309
quelle
-vf "scale=trunc(ow/a/2)*2:360"
funktioniert aufgrund eines "selbstreferenzierenden" Fehlers nicht.Stattdessen funktioniert Folgendes:
Selbstreferenzierung wird somit durch zwei aufeinanderfolgende Skalierungen vermieden und die Rundung erfolgt im zweiten Schritt. Süß, nicht wahr? :)
quelle