Ich habe versucht, das selbst herauszufinden, aber die Vielzahl der Möglichkeiten verwirrt mich einfach.
Ich möchte idealerweise entweder ffmpeg
oder mencoder
(oder etwas anderes, aber die beiden, von denen ich weiß, dass sie funktionieren) verwenden, um eingehende Videos in eine feste Bildschirmgröße zu konvertieren.
Wenn das Video breiter oder zu kurz ist, können Sie es in der Mitte zuschneiden. Wenn es dann nicht die richtige Größe ist, ändern Sie die Größe nach oben oder unten, um genau die festgelegte Bildschirmgröße zu erhalten.
Das Letzte, was ich brauche, ist 720x480 in einem XVid-AVI mit einem MP3-Audiotrack.
Ich habe viele Seiten gefunden, auf denen gezeigt wird, wie die Größe auf eine maximale Auflösung geändert werden kann, aber ich benötige ein Video mit genau dieser Auflösung (mit abgeschnittenen zusätzlichen Teilen, ohne schwarze Balken).
Kann mir jemand sagen, dass die Kommandozeile ausgeführt werden soll - oder bringt mich zumindest ein Stück weit dorthin? Wenn es mehrere Befehlszeilen sein müssen (führen Sie X aus, um die Auflösung zu erhalten, führen Sie diese Berechnung aus und führen Sie dann Y mit der Ausgabe dieser Berechnung aus), kann ich das skripten.
quelle
Antworten:
Ich bin kein ffmpeg-Guru, aber das sollte den Trick machen.
Zunächst können Sie die Größe des Eingangsvideos wie folgt ermitteln:
Mit einem einigermaßen aktuellen ffmpeg können Sie die Größe Ihres Videos mit den folgenden Optionen ändern:
Sie können die Breite oder Höhe auf einstellen
-1
, um dieffmpeg
Größe des Videos unter Beibehaltung des Seitenverhältnisses zu ändern. Eigentlich-2
ist das eine bessere Wahl, da der berechnete Wert gerade sein sollte. Sie könnten also Folgendes eingeben:Sobald Sie das Video erhalten haben, ist es möglicherweise größer als erwartet,
720x480
da Sieffmpeg
die Höhe berechnen lassen , sodass Sie es zuschneiden müssen. Das kann so gemacht werden:Schließlich könnten Sie ein Skript wie dieses schreiben (kann leicht optimiert werden, aber ich habe es aus Gründen der Lesbarkeit einfach gehalten):
quelle
echo "scale=3; ${in_width}/${out_width}*1000"| bc | awk '{printf "%d", $0}'
h_rate =echo "scale=3; ${in_height}/${out_height}*1000"| bc | awk '{printf "%d", $0}'
# Nehmen wir die kürzere Seite, sodass das Video mindestens # so groß ist wie die gewünschte Größe, und schneiden Sie die längere Seite zu: crop_side = 'n' if [$ {w_rate} -gt $ {h_rate}]; dann scale = "- 2: $ {out_height}" crop_side = 'w' sonst scale = "$ {out_width}: - 2" crop_side = 'h' fi 'Ersetzen Sie "input.file" durch den Namen Ihrer Eingabedatei.
quelle
-c:a copy scaled_result.mp4
Wenn Sie in einem Durchgang zuschneiden und skalieren möchten, können Sie eine Filterkette mit anschließender Skalierung wie folgt erstellen:
Mit dem obigen Befehl wird ein Video zuerst auf ein 16: 9-Porträt zugeschnitten und dann auf 400px hoch x die entsprechende Breite (gerade Zahl) skaliert.
quelle
Ich bin neu in ffmpeg, habe aber jetzt einen netten kleinen Konverter in VB.NET, der RAW-Filme in verschiedenen Ausgabeformaten für die Verwendung in kleinen Geräten erstellt, die über SD-Kartenzugriff verfügen, aber nicht genug Leistung zum Dekodieren komplexer Videos bieten.
Aufgrund der Art und Weise, wie es beim Ändern der Größe und beim Zuschneiden funktioniert, musste ich es manuell codieren und die Parameter erstellen. Grundsätzlich muss ich die resultierende Breite und Höhe kennen.
Ich habe 2 Kontrollkästchen für die Optionen: -
Seitenverhältnis beibehalten (X) Alle Pixel ausfüllen (X)
Es werden nur 4 Variablen als Eingabe benötigt. (1) Originalvideobreite, (2) Originalvideohöhe, (3) Gerätebreite, (4) Gerätehöhe.
Obwohl für VB.NET könnte für jede Sprache ganz einfach angepasst werden.
quelle