FFmpeg - wie kann man die Dauer des Videos (Clips) an die Tondauer anpassen, wenn der Ton länger ist, möglich, ohne ihn mit einer MP3-Datei neu zu codieren?

Ich habe ein Problem. Ich habe meine Videos separat aufgenommen und dann vertont. Manchmal dauert der Ton im Vergleich zur Videodauer länger oder kürzer. Normalerweise ist der Ton länger, manchmal um die 20 Sekunden. Wenn ich auf meinem PC über flv oder einen Windows Media Player laufe, ist das für mich kein Problem, da nach dem Ende des Videos die letzte Aufnahme des Videos angezeigt bleibt (wie ein Bild) und der Ton weiterhin ausgeführt wird und das Video nach dem Ton endet ist vorbei. Auf meinem PC ist also alles in Ordnung, wenn es als .flv- oder .mp4-Datei ausgeführt wird. Aber wenn ich das auf Google Drive oder an einen anderen Ort im Web hochlade (das heißt, wenn ich es in meinem Browser zum Anzeigen nach dem Hochladen ausführe), sehe ich, dass mein Video auf die Länge der Videodauer gekürzt ist (also mein Ton ist geschnitten). Ich verstehe, dass dies an unterschiedlichen Dauergrößen von Ton und Video liegt.

Jetzt brauche ich einen Befehl mit ffmpeg, mit dem mein Video auf meine Tondauer verlängert werden kann. Ich möchte meine Videos nicht noch einmal mit Ton neu codieren (in dem Sinne, dass ich meine mp3-Datei in den ffmpeg-Befehl einfügen müsste), wenn ich es nicht brauche (da ich viele Videos habe und Ton bereits darin eingefügt ist), aber nur um das Video mit einem ffmpeg-Befehl neu zu codieren, um die Videolänge auf die Tonlänge zu verlängern.

Ich habe mir das angesehen (im Moment nicht sicher, ob mir das überhaupt helfen würde): https://superuser.com/questions/801547/ffmpeg-add-audio-but-keep-video-length-the-same-not- kürzeste

Bei diesem Ansatz müssen Sie jedoch zuerst das Video mit der Tondatei (mp3 oder ähnliches) neu codieren.

Kann es getan werden, und was wäre ein Befehl oder Befehle dafür? (Und wenn die einzige Möglichkeit darin besteht, es mit einer MP3-Datei neu zu codieren, was wäre der Befehl dafür?)

Bearbeiten: Ich möchte meinen Ton nicht schneiden, ich muss den letzten Frame halten, bis mein Ton vorbei ist. Derzeit wird das letzte Bild nur beim Ansehen auf meinem PC gehalten, wenn ich das hochlade, wird der Clip sofort geschnitten, wenn das Video stoppt.

Sie könnten ein Standbild des letzten Frames erstellen, es dann mit dem Video verketten und es wiederholen, bis Sie das Ende des Audios erreichen.
stib, ich verstehe, aber das Erstellen von Standbildern und Verketten ist zu viel Arbeit (besonders wenn es viele Videos gibt). Deshalb frage ich, ob es eine Möglichkeit gibt, es eleganter mit ffmpeg anzupassen.
Sie können alles mit ffmpeg machen, also wenn es viele Videos gibt, könnten Sie es automatisieren.
Ich kann dieses Verhalten bei Youtube nicht reproduzieren. Medien werden abgespielt, bis der Audiostream endet.
Stib, irgendein Beispiel? Ich habe wirklich viel recherchiert und nichts gefunden, was mir weiterhilft. Mulvya, ich habe YouTube nie erwähnt, und mein Ton wird in diesen Videos separat aufgenommen. Der Ton wird direkt beim Kopieren hinzugefügt (ohne Neucodierung). Wenn Sie diese Art von Video beispielsweise mit unterschiedlicher Tonlänge auf Google Drive hochladen, wird es geschnitten. Ich denke, YouTube wird dasselbe tun, Sie hatten einfach kein Video mit meinem Beispiel.

Antworten (1)

Sie können dies mit mp4fpsmod hacken (direkter Link zur Win-Binärdatei; C++-Quelle unter https://github.com/nu774/mp4fpsmod ).

Der erste Schritt besteht darin, die Zeitstempel des vorhandenen Videos zu extrahieren

mp4fpsmod -p vid_tc.txt vid.mp4

Dadurch wird eine Textdatei wie diese erstellt

# timecode format v2
0
40
80
120
... 
4880
4920
4960

Jede Zeile enthält den Zeitstempel von Frame #N in Millisekunden.

In diesem Beispiel ist jeder Frame 40 Millisekunden lang und der letzte Frame wird bei 4960 ms gezeigt und somit ist der Videostream 5 Sekunden lang.

Angenommen, Ihr Audio ist 11,34 Sekunden == 11340 ms lang. Bearbeiten Sie den letzten Timecode auf etwas knapp darunter 11340, wie 11320.

# timecode format v2
0
40
80
120
... 
4880
4920
11320

und dann laufen

mp4fpsmod -x -T keep -t vid_tc.txt -o vid_new.mp4 vid.mp4

Dadurch wird eine neue Datei erstellt vid_new.mp4, die Sie hochladen können. Die in Desktop-Playern oder Tools angezeigte Dauer kann falsch sein, aber die Wiedergabe sollte wie gewünscht erfolgen, außer dass das letzte Bild zusammen mit dem Ende des Audios angezeigt wird. Dies überspringt die Neucodierung und ist schnell. Sie können hinzufügen -iund überspringen -o vid_new.mp4, wenn Sie den Timecode direkt in einer vorhandenen Datei bearbeiten möchten, z

mp4fpsmod -x -T keep -t vid_tc.txt -i vid.mp4

aber ich empfehle es nicht.

Danke, ich werde es versuchen. Wird dies vielleicht die Videoqualität meines Videos ruinieren, da dies kein ffmpeg ist? Alles sollte so bleiben, wie es für mich war - Auflösung, Qualität usw. Und zweitens, wenn ich das Problem mit der Anzeige der Dauer in den von Ihnen erwähnten Desktop-Playern beseitigen möchte, was wäre der Weg? Mit mp3-Datei neu codieren? Ps Ich habe das gefunden, aber ich habe es noch nicht ausprobiert, vielleicht wäre das (korrekte Antwort auf diesen Link) das, wonach ich suche Wenn ich die MP3-Datei nicht direkt einbeziehen möchte?: superuser.com/questions /871084/…
Es gibt keine Neucodierung, also gibt es keine Qualitätsänderung. Die Antwort bei SU hilft nicht, wenn der Ton länger ist.
Danke Mulvya. Ich werde es versuchen. Nur noch eine Frage - Sie haben erwähnt, dass es beispielsweise unter 11340 eingestellt werden muss. Sie haben es auf 11320 eingestellt. Könnte es richtig funktionieren, wenn es nur auf 11339 eingestellt ist? Und was würde passieren, wenn beispielsweise auf 9000 gesetzt wird? Ich schätze, dass das Setzen der Zahl auf einen niedrigen Wert das Ende ruinieren könnte?
Jede Zahl, die knapp unter der Audiolänge liegt, ist in Ordnung. 11339 ist also in Ordnung. Die Idee ist, die Länge zu erhöhen, also 9000funktioniert es nicht für einen Audiostream von 11,34 Sekunden.
Gut. Und ich frage mich nur, kann mp4fpmod die Länge von mp3-Dateien erhalten oder funktioniert es nur mit Videodateien? Wenn das der Fall ist, muss ich es entweder manuell lesen (wirklich kein Problem) oder genaue Informationen über ffmpeg erhalten stackoverflow.com/questions/10437750/…
mp4fpsmod betrachtet nur Videostreams.
Ich habe es versucht. Es funktioniert überhaupt nicht. Absolut nichts davon. Nach dem Hochladen ist alles gleich.
Teilen Sie die Datei, wenn Sie können.
Vielen Dank für diese Antwort. Das resultierende Video wird in mkv nicht richtig abgespielt. Ich habe die Videolänge verdoppelt, aber mkv glaubt, dass das Video dreimal so lang ist. Aber nach dem Hochladen auf Youtube funktioniert es einwandfrei!