Ich habe ziemlich einfache Bearbeitungsanforderungen - ich muss einige Videos zerschneiden, möglicherweise einige PNGs dazwischen einfügen und diese Videos zusammenfügen (Übergänge, Effekte usw. sind nicht erforderlich). Grundsätzlich pitivi
würde ich tun, was ich will - außer, ich verwende AVIs mit 640 x 480 und 30 fps von einer Kamera und sobald ich mehr als ein paar Minuten dieses Materials einlege, pitivi
friert die Vorschau ein und wird somit unbrauchbar.
Also suchte ich nach einem Befehlszeilentool für Linux. Ich denke nur ffmpeg
( Kommandozeile - Verwenden von ffmpeg zum Schneiden von Videos - Super User ) und mplayer
( Sam - Bearbeiten von Videodateien mit Mencoder unter Linux ) sind bisher Kandidaten, aber ich kann keine Beispiele für die Verwendung finden, die ich mir vorgestellt habe.
Grundsätzlich würde ich mir vorstellen, dass es Encoder- und Player-Tools (wie ffmpeg
vs ffplay
; oder mencoder
vs mplayer
) gibt - so dass zunächst die Bearbeitungssequenz direkt in der Befehlszeile angegeben werden kann, vorzugsweise mit Frame-Auflösung - ein Pseudocode wie folgt aussehen würde:
videnctool -compose --file=vid1.avi --start=00:00:30:12 --end=00:01:45:00 --file=vid2.avi --start=00:05:00:00 --end=00:07:12:25 --file=mypicture.png --duration=00:00:02:00 --file=vid3.avi --start=00:02:00:00 --end=00:02:45:10 --output=editedvid.avi
... oder es könnte eine "Playlist" -Textdatei geben, wie:
vid1.avi 00:00:30:12 00:01:45:00
vid2.avi 00:05:00:00 00:07:12:25
mypicture.png - 00:00:02:00
vid3.avi 00:02:00:00 00:02:45:10
... so könnte man es nennen mit
videnctool -compose --playlist=playlist.txt --output=editedvid.avi
Die Idee hier wäre, dass alle Videos im gleichen Format sind - das Werkzeug zu vermeiden Umcodierung ermöglichen, und einfach eine „rohe Kopie“ statt (wie in mencoder
‚s kopieren Codec:" -oac copy -ovc copy
„) - oder in Mangel an , dass, unkomprimiertes Audio / Video wäre in Ordnung (obwohl es ein bisschen Platz verschlingen würde). Im Fall des Standbilds würde das Tool die von den Videodateien festgelegte Codierung verwenden.
Die Sache ist, ich kann das soweit sehen mencoder
und ffmpeg
einzelne Dateien bearbeiten; B. einen einzelnen Abschnitt aus einer einzelnen Datei ausschneiden oder Dateien zusammenfügen ( mencoder
verfügt auch über EDL ( Edit Decision Lists)) , mit der Sie rahmengenaue Schnitte ausführen können. Sie können also mehrere Schnittbereiche definieren, die jedoch wieder einer einzelnen Datei zugeordnet werden ). Was bedeutet, dass ich zuerst einzelne Dateien ausschneiden muss (jede davon würde eine eigene temporäre Datei auf der Festplatte erfordern) und sie dann zu einer endgültigen Videodatei zusammenfügen muss.
Ich würde mir dann vorstellen, dass es ein entsprechendes Player-Tool gibt, das dasselbe Befehlszeilenoptionsformat / dieselbe Wiedergabelistendatei wie das Codierungs-Tool lesen kann - es wird jedoch keine Ausgabedatei generiert, sondern das Video abgespielt. zB im Pseudocode:
vidplaytool --playlist=playlist.txt --start=00:01:14 --end=00:03:13
... und, da es genug Speicher, wäre es eine Low-Res - Video - Vorschau in RAM, erzeugen und es wieder in einem Fenster spielen, während einige begrenzte Interaktion anbieten (wie mplayer
‚s Tastenkombinationen für Wiedergabe, Pause, Rücklauf, Schritt Rahmen ). Natürlich würde ich mir vorstellen, dass sich die Start- und Endzeiten auf die gesamte Wiedergabeliste beziehen und alle Dateien, die möglicherweise in dieser Region landen, in die Wiedergabeliste aufnehmen.
Das Endergebnis all dessen wäre also: Befehlszeilenoperation; keine temporären Dateien während der Bearbeitung - und auch keine temporären Dateien (noch Transcodierung) beim Rendern der endgültigen Ausgabe ... was ich selbst schön finde.
Also, während ich denke, dass all das ein bisschen langwierig sein könnte - gibt es irgendetwas, das den oben beschriebenen Workflow annähern würde?
quelle
mkvmerge
, werde mich darum kümmern .. Prost!Antworten:
Ja da ist. Versuchen Sie es mit der App "Melt". Siehe die Dokumentation hier:
https://www.mltframework.org/docs/melt/
Wenn Sie eine von Debian abgeleitete Distribution verwenden:
quelle
brew install mlt
Ok, da ich nicht viel über die Verwendung der
melt
Befehlszeile herausfinden kann , hier ein paar Hinweise. (Und danach diese Antwort. Verwenden der Prozessersetzung, um Programme auszutricksen, die Dateien mit bestimmten Erweiterungen als Argument erwarten? - Unix & Linux Stack Exchange für ein Skript Beispiel viabash
)Zu Beginn - gibt es ein Ubuntu / Debian-Paket für
melt
(ich habe Ubuntu 11.04 mit MLT Melt 0.6.2); Der von @Ielton angegebene Link bezieht sich auf das "Media Lovin 'Toolkit" (MLT) Wiki, dasmelt
Teil von (aber auchopenshot
undkdenlive
) ist. Hier ist der Link zu den Dokumentationstextdateien von ihrem Git: mltframework.org/mlt.git/tree - docs / ; Beachten Sie, dass das Wiki eine Seite über BuildScripts enthält .Das größte (einzige) Problem, das ich derzeit habe, ist, dass ich keine Möglichkeit finde, eine unkomprimierte Videokomposition (entweder als
png
Frames oder als unkomprimiertes Videoformat) zu exportieren .Erstens können Sie in der Befehlszeile
melt
die Wiedergabe über Frames steuern.melt
Verwenden Sie beispielsweise, um ein weißes Leerzeichen mit einer Länge von 15 Frames zu erstellen und mit dem integrierten Player anzuzeigenWenn Sie mit anzeigen
melt
, erhalten Sie auch eine Befehlszeileninformationstderr
für den eingebauten Player:Sobald
melt
die Wiedergabe abgeschlossen ist, wird sie nicht mehr beendet. Geben Sieq
daher Folgendes ein, um sie zu beenden.Wir sollten beachten, dass es sogenannte "Produzenten" und "Konsumenten" gibt
melt
. Wenn nichts angegeben ist, ist der Standard-Consumer ein SDL- Fenster (Simple DirectMedia Layer) , in dem das Video wiedergegeben wird. Der obige Befehl ist also der gleiche wie:Wenn wir also speichern möchten, was
melt
angezeigt wird, sollten wir den Consumer auf etwas ändern, das ein Dateiformat unterstützt. So erhalten Sie eine Liste der Verbraucher:Der
libdv
Verbraucher gibt DV-formatierte Daten direkt an ausstdout
. So speichern Sie das Video in einer von.dv
Ihnen erstellten Datei:Beachten Sie, dass von den aufgelisteten Verbrauchern das einzige Format, das ich ausprobiert habe und das auch in einer anderen Anwendung geöffnet werden kann, ist
libdv
(ich habe esvlc
als andere Anwendung verwendet). Dies kann jedoch bei einer anderen Art der Transcodierung fehlschlagen ( z. B. wenn ich anstelle eines Leerzeichens versuche, ein Snippet aus einer.flv
Datei zu konvertieren , wird die resultierende .dv-Datei geöffnet und abgespieltvlc
, ist jedoch beschädigt ).Nun zum Bearbeitungsteil ; Im Wesentlichen können Sie eine Reihe von Dateinamen- / Ein- / Ausgabe-Zeilengruppen direkt in der Befehlszeile angeben . Angenommen, Sie haben eine Datei.
video.avi
Dann könnten Sie Folgendes tun:oder etwas besser formatiert:
Dies bedeutet, dass
video.avi
von seinem Bild 30 bis zu seinem Bild 79 abgespielt wird; dann ein 15-Frame-Rohling; und dann dievideo.avi
Sequenz von Bild 30 zu Bild 79 erneut.So verwenden Sie Bilder (z. B.
.png
) in einer Videobearbeitungskomposition:Beachten Sie, dass für
test.png
,in=
Parameter nicht 0 sein muss - jedoch wird das Bild für angezeigtout
-in
Zeit; In diesem Fall ist es am einfachsten, denin=0
Parameter ganz wegzulassen.Die gute Sache ist , dass diese Bearbeitung Sequenz gespeichert werden - oder wie sie
melt
nennt, serialisiert - in eine Datei; Beachten Sie, dass es zwei Möglichkeiten für eine solche Serialisierung gibt: "simple" oder XML. Um zum Beispiel den obigen Befehl als "einfache" serialisierte Datei zu speichern, können wir einfach den-serialise [filename]
Schalter zum Befehl hinzufügen :Nun
file.melt
enthält das:Scheinbar enthält dieses "einfache" serialisierte Dateiformat kein "kommentierendes" Zeichen. Wenn ich versuche, eine "
# comment
" Zeile hinzuzufügen ,melt
beschwert ich mich mit: "# comment" konnte nicht geladen werden (aber ansonsten scheint das so Eine Zeile wird ignoriert und die Wiedergabe wird trotzdem fortgesetzt. ".melt
" scheint eine Erweiterung zu sein,melt
die eine einfache serialisierte Datei erkennt.Um diese serialisierte Datei erneut abzuspielen, können wir im Prinzip nur aufrufen
melt file.melt
- eine vollständigere Befehlszeile wäre jedoch:... was bedeuten würde: Verwenden Sie den
melt_file
"Producer"file.melt
, um seine Frames auf dem "Consumer"sdl
(Fenster) zu öffnen und zu rendern .Beachten Sie, dass ich die Erfahrung habe, dass (sagen wir)
.flv
Videos problemlos über die Befehlszeile abgespielt werden - jedoch einen Segmentierungsfehler verursachen, wenn sie in derfile.melt
serialisierten Datei angegeben sind!.dv
Selbst produzierte Videosmelt
scheinen infile.melt
...Der XML-Serialisierungstyp kann mithilfe des
-consumer xml:
Schalters ( anstelle von-serialise
) erreicht werden. Das obige Beispiel lautet nun:Um die neu erzeugte
file.mlt
XML-Datei "abzuspielen" , kann man sie jetzt direkt ausführenmelt file.mlt
- oder eine vollständigere Befehlszeile wäre:... was bedeuten würde: Verwenden Sie den
xml
"Producer" ( Hinweis, zuvor war es ein Consumer )file.mlt
, um seine Frames im "Consumer"sdl
(Fenster) zu öffnen und zu rendern .Beachten Sie, dass ich in diesem Fall
.flv
festgestellt habe, dass die gleichen Videos, die bei einer einfachen Serialisierungsdatei zu Segfault geführt haben, auch bei einer XML-Serialisierungsdatei einwandfrei funktionieren.In diesem Fall enthält die resultierende
file.mlt
XML-Datei viel mehr Einstellungen wie Auflösung, Bildrate, Codec-Informationen usw. - es ist jedoch auch schwieriger, direkt in einem Texteditor zu arbeiten:quelle
Die ffmpeg-Lösung für dieses Problem sieht ungefähr so aus:
Es werden Named Pipes verwendet, sodass keine temporären Dateien auf der Festplatte erstellt werden können. Außerdem können Sie Teile der Videoclips ausschneiden und Bilder hinzufügen.
In diesem Beispiel wird die Zeit 30-60 der ersten Eingabe verwendet und anschließend die erste Minute der zweiten Eingabe hinzugefügt. Anschließend wird eine Bilddatei und anschließend das gesamte dritte Video eingefügt.
Code aufgehoben von:
Seite zum Verknüpfen von ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
Superuser-Seite Verwenden von ffmpeg zum Schneiden von Videos
Superuser-Seite https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg
quelle
npm
installieren müssen). Ich dachte, ich würde es erwähnenIch habe auch nach einem solchen Werkzeug gesucht und es scheint, dass Schmelze das Werkzeug für den Job ist, jedoch ist die Dokumentation fast unmöglich zu verstehen / zu fehlen. Sie können fast jede Kombination von Bearbeitungen durchführen. Ich hatte Action-Cam-Aufnahmen ... der Sound war jedoch unbrauchbar. Ich habe das (h264) -Video zusammengefügt, eine 60-Frame-Überblendung hinzugefügt und den Ton durch eine Tonspur ersetzt.
Sie können mehr darüber lesen Sie hier . Die Hauptwebsite ist hier .
quelle