image + audio = mp4: Wie kann man Videos verkleinern?

11

Ich benutze ffmpeg, um einem MP4 ein JPG hinzuzufügen und ein MP4 zu erstellen.

Da es nur ein Bild gibt, um das Video zu erstellen, frage ich mich, ob es eine Möglichkeit gibt, die Videogröße zu reduzieren.

Befehl:

$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4

Ergebnisse:

  • image.jpg = 26,7 K (Bild nicht so klar)
  • audio.mp3 = 64,6 M (54 Minuten)
  • output.mp4 = 80,6 Millionen (Videoergebnis ist nicht so klar, Musik immer noch gut)

Ist es eine vernünftige Größe für MP4?

SIDU
quelle
Könnten Sie bitte den von Ihnen verwendeten Befehl ffmpeg posten?
Ridgy
Bitte machen Sie keine Bilder von (einigen) Texten, sondern kopieren Sie sie und fügen Sie sie stattdessen ein. Bilder sind groß, können nicht durchsucht und nicht kopiert werden.
Llogan
Ups ja, Sir. Ich habe das Cmd-Fenster geschlossen, kann Ihnen also den Text jetzt nicht einfügen: |
SIDU
Ich frage mich, ob es möglich ist, mp4 zu meta, so dass es nur mp3
wiedergibt
Was ist der Zielspieler, das Zielgerät oder die Zielwebsite für die Ausgabe?
Llogan

Antworten:

18

Zum Hochladen auf YouTube

H.264: kleinste Dateien

Diese Methode verwendet libx264 zum Codieren von H.264-Videos. Es ist langsamer als die unten beschriebene Stream-Kopiermethode, gibt jedoch möglicherweise eine kleinere Dateigröße aus.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv

Stream-Kopie: schnellster Prozess

Diese Methode überträgt nur Kopien (keine Codierung) des Bildes in den MKV-Container. Es ist super schnell, aber wenn die Größe wichtig ist, kann die oben beschriebene Methode zu einer kleineren Datei führen.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
  • YouTube akzeptiert so gut wie alles, daher verwenden diese Befehle einige Tricks, um die Codierung zu beschleunigen oder die Dateigröße zu verringern und die Qualität hoch zu halten, da YouTube alles neu codiert, was Sie ihm geben. Deinem Player wird es wahrscheinlich nicht gefallen, YouTube jedoch.

  • In diesen Beispielen wird eine sehr niedrige Bildrate verwendet, die schneller als der Standardwert von 25 fps verarbeitet werden sollte.


Größte Kompatibilität für jeden Spieler

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • Dies sollte auf fast allem außer auf sehr alten Geräten funktionieren (wechseln Sie -profile:v mainzu, -profile:v baselinewenn dies der Fall ist).

  • Wenn Ihr Audioeingang bereits AAC ist, ändern Sie ihn -c:a aacauf -c:a copy, um unnötige Neucodierungen zu vermeiden.

  • Die Codierungszeit ist länger und die Dateigröße größer als die obigen YouTube-Befehle.

  • Weitere Informationen finden Sie im FFmpeg-Wiki: H.264 .

llogan
quelle
Könnten Sie eine Codezeile bereitstellen, um a.jpg + a.mp3 = a.mp4 in 1280 * 720 mit den niedrigsten von youtube zulässigen Frames / Sek. Zu erstellen? Muss ich "-loop 1" löschen, da es nur einen Job gibt? Danke im Voraus.
SIDU
@SIDU Der vorhandene Befehl macht das, was Sie anfordern (außer MKV anstelle von MP4 auszugeben), aber ich weiß nicht, wie niedrig die von YouTube unterstützte Bildrate ist. Sie müssen nur experimentieren. Warum benötigst du MP4, wenn du nur auf YouTube hochlädst?
Llogan
Ich habe es versucht, aber es heißt:Unrecognized option 'preset'. Error splitting the argument list: Option not found
NineCattoRules
@NineCattoRules Ohne weitere Informationen schwer zu sagen. Verwenden Sie eine Pastebin-Site, um Ihren vollständigen ffmpegBefehl und die vollständige Konsolenausgabe des Befehls anzuzeigen, und geben Sie dann den Link in einem Kommentar an.
Llogan
Danke, ich habe FFMPEG mit dem mc3man-Repository neu installiert und funktioniert jetzt gut!
NineCattoRules
3

Mit nur den Informationen, die Sie zur Verfügung gestellt haben, kann ich mir das vorstellen.

Gehen wir in Stücke:

Da dem Video nur ein Bild hinzugefügt wird. Ich frage mich, ob es eine Möglichkeit gibt, die Videogröße zu reduzieren, z. B. Bitrate erzwingen / Sekunde = 1 statt 28?

Da es sich um ein Standbild handelt, müssen Sie keine Änderungen vornehmen. Bleib einfach still stehen.

Was du dort redest, sind Bilder pro Sekunde (fps), nicht Bitrate. Und Sie haben Recht mit dem Konzept. Nur ein Standbild mit 1 fps wäre kein Problem.

Ist es eine vernünftige Größe für mp4? Ist die Bildgröße sehr wichtig?

In diesem Fall hätte die Bildgröße kein signifikantes Gewicht, da es sich nur um ein Standbild handelt. Wenn es sich um ein qualitativ hochwertiges Video handelt, ist dies ein anderes Problem.

Sollte ich die Größe von jpg auf 1080 * 720 ändern und zusätzliche Einstellungen in ffmpeg vornehmen, um sie als 720p auszugeben (wie lautet dann die ffmpeg-Einstellung :)?

Die Auflösung, die Sie sagen, ist 1280x720.

Ich sehe den Punkt in der -loop 1Option hier nicht, es wird nur den Prozess verlangsamen. Haben Sie verwendet, -shortestweil die Datei mehr als 1 Eingabestream hat? Wenn nein, gibt es keinen Grund, es zu benutzen. Da Sie verwendet haben, muss -acodec copyich davon ausgehen, dass Sie es nicht neu codieren möchten.

Für eine Ausgabe von 720p 1fps ohne Neucodierung und ohne Bitrate zu berühren:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4

Stellen Sie sich vor, es hat mehr als einen Eingabestream und Sie möchten, dass ffmpeg die Codierung am kürzesten Stream beendet:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4

Wenn Sie nun die Bitrate ändern müssen (sagen wir 1024k als Beispiel);

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4

Siehe: Begrenzen Sie die Ausgangsbitrate

-c: a copy = Kopiert den eingegebenen Audiostream, damit wir ihn nicht neu codieren.

-b: v = Die angegebene Bitrate ist (nicht genau) konstant.

-bufsize = Dies ist das Intervall, in dem die durchschnittliche Bitrate berechnet wird. Dies bedeutet das Bild mit der niedrigsten Verlustqualität, aber genaueren Bitraten gemäß den Angaben in -b: v .

-s = Die tatsächliche Größe der Videoausgabe.

-framerate = Die Eingabe- Framerate , die die Ausgabe verwenden soll.

Beachten Sie, dass Sie die Qualität opfern müssen, um dies zu erreichen, wenn Sie an einem Punkt immer noch ein kleineres Video möchten. Andere Möglichkeiten sind das Neucodieren mit verlustbehafteter Komprimierung.

Nach dem, was Sie sagen, den Informationen, die Sie bereitstellen, und dem, was Sie versuchen zu tun, scheint es Ihr Ziel zu sein, Albumcover in MP3 einzubetten. Wenn das Ihr Ziel ist, würde dies Ihren Anforderungen besser entsprechen:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

-map_metadata = Der ffmpeg-Metadatenspezifizierer zum Ausgeben der Datei aus der Datei. In diesem Fall ( Null ) die globalen Metadaten.

-map 0 = Eingangsstrom 1 (Audio).

-Karte 1 = Eingabestream 2 (Bild).

Wenn hier nichts zu Ihren Wünschen passt, geben Sie bitte weitere Informationen.

Fenrir
quelle
Erwägen Sie die Verwendung -framerateals Eingabeoption und das Entfernen der Ausgabe -r. Andernfalls wird die Standardeingabe-Framerate von 25 verwendet und anschließend ffmpegwerden Frames gelöscht, um dies zu erreichen -r 1. Wenn Sie nur die Eingabe-Bildrate deklarieren, verwendet die Ausgabe dieselbe Bildrate.
Llogan
Vielen Dank. Wusste das nicht. Bearbeitet, um die vorgeschlagenen Änderungen widerzuspiegeln.
Fenrir
Danke für das Tutorial. Meine ursprüngliche ffmpeg-Codezeile war ein Copy-Paste aus der Google-Suche, von dem ich keine Ahnung habe, was was ist.
SIDU