Ffmpeg - speichert die BMP-Datei als andere Erweiterung

704
Sathya

Ich möchte eine bmpDatei als 1.mp4Ffmpeg speichern. Wie kann ich das erreichen?

Die Frage ist sehr einfach. Ich habe eine Quelldatei, nennen wir sie source.pngund ich möchte sie als kodieren bmp, aber als Datei mit der Erweiterung speichern mp4. Eine Möglichkeit, dies zu erreichen, besteht natürlich darin, sie als Datei mit der bmpErweiterung zu speichern und sie dann in der Befehlszeile umzubenennen mp4. Aber das will ich nicht. Ich möchte, dass es direkt als gespeichert wird mp4.

Ich habe im Internet gesucht und festgestellt, dass man -fParameter angeben sollte, um dies zu erreichen . Dies ist meine Befehlszeile:

ffmpeg -hide_banner -i source.png -f bmp 1.mp4 

Und natürlich bekam ich einen Fehler Requested output format 'bmp' is not a suitable output format.. Ich suchte weiter nach einer Lösung und fand heraus, dass der Aufruf von Ffmpeg mit Parametern -formatsalle unterstützten Formate anzeigt. Ich tat es und fand nur ein Format, das Wort enthielt bmp:

D bmp_pipe piped bmp sequence 

Dann habe ich -f bmp with-f bmp_pipe` ersetzt, aber wieder bekam ich den gleichen Fehler. Also, wie man es richtig macht?

Im Allgemeinen ist meine Frage: Bei einer Erweiterung (zum Beispiel bmpin diesem Fall), wie das Wort bestimmt wird, das danach eingefügt werden muss, damit die -fKodierung so aussieht, als wäre diese Erweiterung vorhanden?


Vielleicht war mir die Frage nicht klar genug. Ich bin nach einer Möglichkeit, die Verbindung zwischen der Verlängerung (zu finden bmp, png, mp4, avi, etc.) und den FFmpeg - Parametern I, um diese Erweiterung zu codieren passieren müssen.

Grundsätzlich erstelle ich eine Benutzeroberflächenanwendung, bei der:

  1. Benutzer gibt die Nebenstelle ein (zum Beispiel mp4)
  2. Benutzer gibt den Namen der Ausgabedatei ein (zum Beispiel C:\1.exe(nur ein dummes Beispiel))
  3. Ich muss einen ffmpeg-Prozess erzeugen, der die Eingabedatei wie die Ausgabedatei in dieser Erweiterung kodiert, die der Benutzer angegeben hat

Ich hoffe es ist jetzt klarer.

0

1 Antwort auf die Frage

1
Gyan

Sie müssen den übergeordneten Muxer für Bildsequenzen durchlaufen image2:

ffmpeg -i in.png -c:v bmp -vframes 1 -f image2 out.mp4 

Führen Sie ffmpeg aus -muxers, um eine Liste der verfügbaren -fWerte abzurufen . Es gibt keine zentrale Liste der mit Muxern verknüpften Erweiterungen.

Hm .. Gilt es allgemein? Ich meine, ich suche nach einer Möglichkeit, den Benutzer nach der Erweiterung zu fragen und dann das Bild (oder Video) für diese Erweiterung zu kodieren (die Ausgabedatei hat jedoch immer den Namen ".mp4"). Kann ich also -c: v bmp ersetzen? `mit einer anderen Erweiterung und wird es funktionieren? vor 6 Jahren 0
Bei Bildformaten ist dies die Methode. Geben Sie für Videoformate "-f ext" an Gyan vor 6 Jahren 0
Ich habe die Frage aktualisiert. Zusammenfassend muss ich sagen, dass für alle Bilderweiterungen "-c: v ext -f image2" und für alle Videoformate "-f ext" übergeben werden müssen, oder? Gibt es Ausnahmen? vor 6 Jahren 0
Ich meine, es ist nicht schwer zwei getrennte Listen zu erstellen: eine mit Bilderweiterungen und eine andere mit Videoerweiterungen, aber ich frage mich nur, gibt es irgendwelche Ausnahmen? vor 6 Jahren 0
Nicht alle Erweiterungen funktionieren als "-f-Werte". MKV ruft zum Beispiel "-f matroska" auf. Für JPEG können Sie einfach `-f singlejpeg` verwenden. Es gibt Dutzende von Formaten, so dass nicht alle möglichen Ausnahmen aufgeführt werden können, aber unter den wichtigsten Formaten ist dies der Fall. Gyan vor 6 Jahren 0
Tut mir leid, wenn meine Fragen langweilig sind, aber ich glaube immer noch, dass dies ein einfacher Weg sein muss. Wenn Sie zum Beispiel den Parameter `-f` weglassen, ermitteln Ffmpeg das richtige Format entsprechend der Erweiterung der Ausgabedatei, richtig? Daher verwenden sie einen Algorithmus, um dies zu tun. Ich möchte nur, dass sich Ffmpeg wie eine bestimmte Erweiterung verhält, unabhängig von der tatsächlichen Erweiterung der Ausgabedatei. vor 6 Jahren 0
Es gibt keine Möglichkeit, dies automatisch zu tun, da sich ffmpeg nicht so verhält, als wäre die Ausgabeerweiterung ein False-Flag. Dies ist ein sehr untypischer und unerwarteter Anwendungsfall, vor allem wenn man bedenkt, dass man die Datei danach einfach umbenennen kann. Gyan vor 6 Jahren 1
* "ffmpeg verhält sich nicht so, als wäre die Ausgabeerweiterung ein falsches Flag." * - Aber was ist, wenn ich es in einem bestimmten Format an einen anderen Prozess streamen möchte (unsere Ausgabe an stdout)? Zum Beispiel möchte ich die angegebene Datei in einer bestimmten Erweiterung (mit ffmpeg) kodieren, dann zu einem anderen Prozess streamen und ihn kodieren und speichern. Daher wird ffmpeg nicht in einer Datei gespeichert, sondern es werden Daten in einen anderen Prozess gestreamt, und wie soll damit umgegangen werden? Wo haben Sie gefunden, dass `matroska` für` mkv` und `singlejpeg` für` jpg` ist? Wo finde ich diese Muster? Ich muss das automatisch machen. vor 6 Jahren 0
Wenn Sie es streamen und der Ausgabe-URI keine Erweiterung hat, müssen Sie `-f` angeben. Führen Sie `ffmpeg -muxers` aus, um eine Liste der verfügbaren` -f`-Werte zu erhalten. Es gibt keine zentrale Liste der mit Muxern verknüpften Erweiterungen. Gyan vor 6 Jahren 1