Zwei Videodateien zu Ende zu setzen, klingt nach dem billigsten Betrieb der Welt, und ungefähr fünf Minuten lang habe ich es geglaubt. Dann habe ich einen 1280x720-Clip mit 30fps zu einem 640x480-Clip mit 25fps mit der schnellsten verfügbaren Methode verbunden, die die Streams kopiert und nichts umschreibt. Es hat eine Datei erstellt. Die Akte behauptete, neun neun sechs Sekunden lang zu sein, als sich die beiden Clips auf elf summieren. Der Container sagte 1280x720, während die zweite Hälfte des Streams 640x480 war, und der Muxer warnte eine Warnung vor neu geschriebenen Zeitstempel für jeden Rahmen des zweiten Clips. Alles über das Beitritt zu Videos ergibt sich aus dem Grund, warum das passiert.
tl; dr: Der billige Join funktioniert nur, wenn sich beide Dateien bereits über Codec, Auflösung, Bildrate und Zeitbasis einigen, was von zwei Geräten niemals der Fall ist. Die ehrliche Route dekodiert beides und codiert eine neue Datei, die langsamer ist und etwas produziert, das abgespielt wird. Hier gemessen: Die Kopiermethode meldete 11,996 Sekunden für 11 Sekunden Filmmaterial und erklärte die falsche Auflösung; die Neukodierung erzeugte genau 11.000 Sekunden bei einer einzigen konsistenten 1280x720 in 0,63 Sekunden. Zuerst müssen Clips unterschiedlicher Größe in einen Rahmen eingebaut werden, sonst wird die Verbindung komplett abgelehnt. der Video-Editor Erledigt alles im Browser, bis zu acht Clips und 30 Minuten.
Warum können zwei Clips nicht einfach zusammengeklebt werden?
Weil eine Videodatei kein Bildstrom mit einem Header ist. Es ist ein Container, der codierte Ströme enthält, und die Codierung trägt den Zustand.
H.264 komprimiert, indem es die meisten Frames als Unterschiede zu anderen Frames beschreibt. Ein Keyframe steht alleine, alles nachdem es relativ zu dem vorhergegangen ist, bis zum nächsten Keyframe. Der Decoder benötigt auch die Parametersätze des Streams, die die Auflösung, das Farbformat und das Profil beschreiben, und enthält eine Zeitbasis, die die Zahlen auf jedem Paket in Sekunden umwandelt.
Zwei Dateien, die von zwei Geräten erstellt wurden, sind sich nicht einig. Unterschiedliche Auflösung bedeutet unterschiedliche Parametersätze. Eine andere Bildrate bedeutet normalerweise eine andere Zeitbasis. Selbst zwei Clips vom selben Telefon, die im Abstand von einem Jahr aufgenommen wurden, können unterschiedlich sein, da die Kamera-App ihre Encoder-Einstellungen geändert hat.
Durch die Verkettung der Bytes erhalten Sie einen Stream, dessen Decoder eine Sache in der Kopfzeile erzählt und die Hälfte durchgereicht wird. Manchmal kommt ein Spieler zurecht. Oft zeigt es den ersten Clip und stoppt oder spielt den zweiten als farbiges Rauschen ab.
Was produziert die schnelle Methode?
eine Datei, ein Haufen von Warnungen und eine falsche Dauer.
ffmpegs Concat-Deuxer Mit Stream-Kopieren ist die Methode die Methode, die jeder "Just Join Them" empfiehlt, und es ist wirklich das richtige Werkzeug, wenn die Eingaben übereinstimmen. Ich habe auf meine beiden nicht übereinstimmenden Clips wies gezeigt, und hier ist, was es zurückgibt:
| Messen | erwartet | produziert |
|---|---|---|
| Dauer | 11.000 s | 11.996 s |
| erklärte Entschließung | Ein Wert, richtig | 1280x720 für einen Stream, der 640x480 wird |
| Zeitstempelwarnungen | Keine | eine pro Frame des zweiten Clips |
Die Warnungen sagen alle dasselbe:
Non-monotonic DTS; previous: 90981, current: 76133; changing to 90982.
This may result in incorrect timestamps in the output file.
Der zweite Clip wird von Null neu gestartet, wie es in seiner eigenen Datei sollte, und der Muxer schreibt keinen Stream, dessen Zeitstempel rückwärts gehen. Es erfindet also neue, ein Frame nach dem anderen, und der akkumulierte Unterschied zwischen dem realen Timing und dem erfundenen Timing ist der Ort, an dem die zusätzliche Sekunde herkommt.
FFmpeg kann danach beide Hälften noch dekodieren, da ffmpeg ungewöhnlich tolerant ist. Ein Browser ist nicht. Dies ist die Datei, die auf Ihrem Computer gut abgespielt wird und ein schwarzes Rechteck für einen Betrachter anzeigt.
Was kostet das Verbinden durch einen Filterdiagramm und was kauft es?
Es kostet eine vollständige Dekodierung und Verschlüsselung. Es kauft eine Datei, die korrekt ist.
Anstatt Ströme zu kopieren, wird jede Eingabe in Rahmen dekodiert, die Rahmen werden in einem Filterdiagramm gekürzt und verbunden, und ein neuer Stream wird aus dem Ergebnis codiert. Jeder Frame durchläuft einen Decoder und einen Encoder, was echte Arbeit ist.
Was es kauft, ist, dass der Ausgang einen Codec, eine Auflösung, eine Bildrate und eine kontinuierliche Zeitstempel hat, da alles auf einmal von Grund auf codiert wurde. Auf den gleichen zwei Clips:
| Messen | Kopiermethode | filter graph |
|---|---|---|
| Dauer | 11.996 s | 11.000 s |
| Resolution | deklariert 1280x720, wird 640x480 | 1280x720 im gesamten |
| Rahmen | 305 | 305 |
| Exportzeit | augenblick | 0,63 s |
| Größe | Kleiner | 2,1 MB |
0,63 Sekunden Arbeit für 11 Sekunden Ausgabe auf einem Desktop, auf dem ffmpeg nativ ausgeführt wird. In einem Browser-Tab über WebAssembly ist es um ein Vielfaches langsamer, was der ehrliche Handel ist und der Grund, warum die Clip-Anzahl begrenzt wird.
Warum muss jeder Clip seine Zeitstempel neu basie?
Weil die Verkettung in einem Filterdiagramm Streams verbindet und die Zeitstempel eines Streams absolut sind.
Die Frames jedes Clips kommen mit den vom Anfang der eigenen Datei gemessenen Tragzeiten an. Schneiden Sie einen Abschnitt aus der Mitte eines Clips und diese Rahmen sagen immer noch "Dies geschieht bei 42 Sekunden". Verbinden Sie sie mit einem Clip, der mit 6 Sekunden endet, und Sie haben einen Stream, der von 6 auf 42 springt, mit 36 Sekunden nichts dazwischen.
setpts=PTS-STARTPTS Zieht jeden Clip von jedem Frame ab, so dass jeder Clip bei Null beginnt, bevor er verbunden wird. Das Audioäquivalent ist asetptsdrohen Ohne sie spielt der Ausgang den ersten Clip, dann einen langen Einfrieren, dann den zweiten. Es ist der häufigste Fehler in handgeschriebenen ffmpeg-Join-Befehlen, und es ist stumm: Die Datei ist gültig und die Dauer ist einfach falsch.
Was passiert, wenn die Clips unterschiedlich groß sind?
Der Beitritt wird abgelehnt, und bis vor kurzem war diese Ablehnung die ganze Geschichte hier.
der Concat-Filter Vergleicht seine Eingänge und wird nicht ausgeführt, wenn die Videodimensionen oder das Seitenverhältnis der Probe nicht übereinstimmen:
Input link in0:v0 parameters (size 640x480, SAR 1:1) do not match the
corresponding output link in0:v0 parameters (1280x720, SAR 1:1)
Failed to configure output pad on Parsed_concat_8
Das ist ein Abbruch, keine Warnung: Es wird keine Datei produziert. Zwei Telefone oder ein Telefonclip und eine Bildschirmaufzeichnung sind genau der Fall, der dies auslöst, und es ist der gewöhnliche Grund, warum sich jemand überhaupt Clips anschließt.
Audio braucht keine solche Hilfe, was wissenswert ist, weil es nicht intuitiv ist. Derselbe Grafiker schloss eine 44,1-kHz-Monospur ohne Reklamation mit einer 48-kHz-Stereoanlage und erzeugte eine genaue 11.000-Sekunden-Datei. Nur die Videoseite ist streng.
Der Fix besteht darin, einen Frame für die gesamte Zeitleiste zu fixieren und jeden Clip vor dem Verbinden einzufügen. Die Höhe ergibt sich aus der von Ihnen gewählten Ausgabeauflösung oder aus dem ersten Clip, wenn Sie die Quellenauflösung beibehalten, und die Breite folgt dem Seitenverhältnis des Clips, sodass eine Zeitleiste des Porträtmaterials im Porträt bleibt. Jeder Clip wird dann skaliert, um in diesen Rahmen zu passen und gepolstert, um ihn zu füllen:
scale=1280:720:force_original_aspect_ratio=decrease,
pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1
Anstatten statt zu füllen bedeutet, dass ein Clip einer anderen Form in Briefkasten statt gestreckt ist, was das kleinere von zwei Übeln ist, wenn ein 4: 3-Clip eine 16: 9-Zeitleiste erfüllt. setsar=1 Ist nicht Dekoration: Der Filter vergleicht das Seitenverhältnis von Mustern sowie die Pixelabmessungen, sodass zwei Clips gleich groß sein können und dennoch abgelehnt werden können.
Beide Maße sind auf geraden Zahlen gerundet, da H.264 in 4:2:0 Farbe in jeder Richtung mit halber Auflösung speichert und eine ungerade Breite oder Höhe nicht kodieren kann.
Warum nur acht Clips und dreißig Minuten?
Da jeder Clip einen Dekodierungspass innerhalb eines Browser-Tabs kostet und die Registerkarte einen festen Speicher hat.
Acht Eingänge bedeuten acht Decoder, die gegen denselben Filterdiagramm laufen, plus den Encoder, plus jede im Speicher gespeicherte Quelldatei, da keine Festplatte zum Streamen vorhanden ist. Dreißig Minuten Ausgabe ist der Punkt, den die Codierung so lange dauert, bis die Leute annehmen, dass die Seite gehängt hat.
Keine der Grenzen ist ein Gesetz des Formats. Beide sind die Linie, die der Browser-Build nicht mehr angenehm ist, und sie werden eher im Voraus als entdeckt, wenn ein Tab vierzig Minuten nach einem Export abstürzt. Ein Clip, der kürzer als eine Zehntelsekunde ist, wird ebenfalls abgelehnt, da unten, dass er keine Frames und FFmpeg-Fehler beiträgt, anstatt zu warnen.
Für alles größere ist dies das falsche Tool und ein Desktop-Editor ist das richtige.
Wie unterscheidet sich das Trimmen hier vom Trimmer?
Das Trimmen in einer Verbindung ist rahmengenau und kostet nichts mehr.
Die engagierten Videoschneider Bietet einen schnellen Modus, der den Stream kopiert und nur auf einem Keyframe geschnitten wird, weshalb der Start einer Trimmung manchmal bis zu zehn Sekunden früher landet. Seine Anleitung Beinhaltet warum im Detail.
Dieser Handel gibt es hier nicht, denn der Export codiert sowieso alles neu. Die Trimmung erfolgt innerhalb des Filterdiagramms bei dekodierten Frames, sodass ein Schnitt bei 4,3 Sekunden ein Schnitt bei 4,3 Sekunden ist. Sie erhalten die Bildgenauigkeit als Nebeneffekt der Kosten, die Sie bereits zahlen.
Wenn Sie also einen Clip und nichts anderes möchten, ist der Schnellmodus des Trimmers viel schneller. Wenn Sie etwas beitreten, schneiden Sie hier.
Was macht eine Geschwindigkeitsänderung am Audio?
Es muss separat behandelt werden, und die Arithmetik ist nicht die gleiche wie für Videos.
Videogeschwindigkeit ist ein Zeitstempelbetrieb: setpts=PTS/2 Die Hälfte der Frame-Präsentationszeit und die Rahmen selbst sind unberührt. Audio kann nicht so funktionieren, da das Spielen von Samples doppelt so schnell die Tonhöhe um eine Oktave erhöht. der atempo Filtern Sie stattdessen Resamples, halten Sie die Tonhöhe und ändern Sie die Dauer.
atempo Akzeptiert nur 0,5 bis 2,0 in einem einzigen Durchgang für den größten Teil seiner Lebensdauer, so dass eine 4-fache Änderung als zwei 2x Durchgänge und eine 0,25-fache Änderung als zwei 0,5-fache Durchgänge erstellt wird. Aktuelle Builds haben die Obergrenze angehoben, und FFMPEG 8.1 meldet einen Bereich von 0,5 bis 100. gemessen an einem Clip, einem einzigen atempo=4 Und ein angeketteter atempo=2,atempo=2 landete 11 Millisekunden voneinander entfernt.
Die Kette wird immer noch gebaut, da der WebAssembly-Kern zur Laufzeit abgerufen wird, anstatt an einer Version festzumachen, und die Multiplikationsdurchgänge sind bei jedem Build korrekt, der jemals den Filter ausgeliefert hat. Der angebotene Geschwindigkeitsbereich von 0,25 bis 4x ist das Ergebnis, das immer noch eine Bearbeitung und nicht eine Neuheit ist.
MP4 oder WebM?
MP4 Es sei denn, Sie haben einen bestimmten Grund, und der Grund ist fast immer eine Lizenz und nicht ein Qualitätsargument.
| MP4 | WebM | |
|---|---|---|
| Video-Codec | H.264 | VP9 |
| Audio-Codec | AAC | Werk |
| einspielen | alles | Browser, die meisten modernen Player |
| Geschwindigkeit in einer Registerkarte codieren | schneller | wesentlich langsamer |
| Größe bei ähnlicher Qualität | größer | Kleiner |
VP9 produziert kleinere Dateien für die gleiche wahrgenommene Qualität, und es ist lizenzfrei, was für einige Projekte wichtig ist und für andere überhaupt nicht. ffmpegs eigene VP9-Kodierhandbuch ist stumpf über die Geschwindigkeitskosten. Was es nicht ist, ist schnell. Der WebM-Pfad läuft hier bei einem höheren CRF mit einer Echtzeit-Deadline und cpu-used 5, die Einstellungen sind, die ein Desktop-Codierung als unvorsichtig erachtet, denn ohne sie dauert ein VP9-Codierung in einem Tab lange genug, um sich kaputt zu fühlen.
Der MP4-Pfad verwendet -preset veryfast bei CRF 23 mit yuv420p, plus -movflags +faststart, der den Index an die Vorderseite der Datei bewegt, damit er beim Herunterladen und nicht erst danach abgespielt wird.
Wie groß wird der Export sein und wie lange wird er dauern?
Größe ist aus der Auflösung vorhersehbar. Die Zeit ist von nichts vorhersehbar.
Da der Export immer neu codiert, sagt die Größe der Quelldatei sehr wenig über das Ergebnis aus. Die gezeigte Schätzung ergibt sich stattdessen aus der Ausgabehöhe: ungefähr 5 Mbit / s bei 1080p, 2,5 bei 720p, 1,2 darunter, wobei webM etwa 70% der MP4-Figur landet und Audio 128 kbit / s hinzufügt, sofern sie nicht stumm geschaltet wird.
Das ist eine Schätzung und wird als eine bezeichnet, da der Inhalt mehr wichtig ist als jede Formel. Ein statisches Interview und ein Handheld-Pfannen durch Bäume mit derselben Auflösung und der gleiche CRF unterscheiden sich um mehrere Male, da CRF ein Qualitätsniveau anstrebt und die erforderliche Bitrate ausgibt.
Die Zeit hängt von Ihrem Gerät, der Auflösung, der Anzahl der Clips und der Tabs ab, die noch etwas zu tun hat. Das native FFMPEG-Lauf läuft in 11 Sekunden in 0,63 Sekunden, damit der Browser ein Vielfaches langsamer ist und WebM wieder langsamer wird.
Was das nicht tut
Es verbindet, trimmt, neu ordnet, skaliert, ändert die Geschwindigkeit und lässt Audio fallen. Das ist die gesamte Funktionsumfang, und die Lücke zwischen ihm und einem Video-Editor ist klar.
Es gibt keine Übergänge, keine Titel, keinen Musiktitel, keine Farbkorrektur, kein Zuschneiden, kein Pro-Clip-Volume, kein Keyframed, keine Vorschau der fertigen Zeitleiste. Jeder Clip wird zugeschnitten und platziert, ein Satz Ausgabeeinstellungen gilt für alle und das Ergebnis wird codiert.
Das deckt einen echten und gemeinsamen Job ab: Mehrere Aufnahmen, die zu einer Datei werden müssen, die auf die nützlichen Teile zugeschnitten ist, in der richtigen Reihenfolge, in einer Größe, die etwas akzeptiert. Verwenden Sie für alles, was eine kreative Entscheidung betrifft, einen Editor.
In welcher Reihenfolge gehen die Clips und können Sie sie ändern?
Die Reihenfolge, die Sie hinzugefügt haben, und ja, mit den Auf- und Ab-Tasten auf jedem Clip.
Das Neuordnen ist eher eine Listenoperation als ein Video: Das Verschieben eines Clips ändert den Eingabeindex, den er in der Filtergraphik belegt, und es wird nichts erneut gelesen oder neu decodiert, bis der Export ausgeführt wird. So groß sind die Dateien, wie groß die Dateien sind, und Sie können eine Timeline so oft neu anordnen, wie Sie möchten.
Schaltflächen statt Drag & Drop sind eine bewusste Wahl für eine Liste von höchstens acht Elementen. Jeder trägt eine Bezeichnung, die den Clip, den er bewegt, benannt, sodass die Reihenfolge durch die Tastatur veränderbar und mit einem Bildschirmleser lesbar ist, von denen keiner ohne viel zusätzliche Arbeit ohne viel Arbeit lesbar ist.
Das Ding, das es wert ist, vor dem Export zu überprüfen, ist die Richtung der Sequenz. Mehrere Aufnahmen des gleichen Ereignisses kommen in der Regel von einem Datei-Picker in alphabetischer Reihenfolge, was der Reihenfolge entspricht, in der die Dateinamen der Kamera zufällig produziert werden, und nicht immer die Reihenfolge, in der die Aufnahmen gemacht wurden.
Warum läuft das im Browser?
Denn das Filmmaterial ist in der Regel die Art, die man lieber nicht hochladen möchte und der Job keinen Server benötigt.
Jede Operation hier ist ffmpeg und ffmpeg Kompiliert zur WebAssemblydrohen Die Dateien werden von Ihrer Festplatte in die Registerkarte eingelesen, dort dekodiert, dort verbunden, dort codiert und als Download zurückgegeben. Es wird nichts hochgeladen, es enthält keine Warteschlange für Ihr Filmmaterial und es gibt keine Kopie auf einem Computer, den Sie nicht steuern.
Die Clips, die die Leute beitreten, sind Interviews, Konsultationen, Familienaufzeichnungen, Screenshots von interner Software, Entwürfe unter Embargo. Die übliche Alternative lädt mehrere hundert Megabyte auf einen kostenlosen Dienst, konvertiert sie auf Hardware, von der Sie nichts wissen, und hält sie unter Begriffen, die niemand liest.
Die Kosten sind die acht Clip- und 30-Minuten-Decken und eine Enkodierung, die langsamer ist als eine Desktop-One. Beide werden vor dem Start angegeben, was der Handel ist, der es wert ist, genommen zu werden.



