GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Befehlszeilen-Videobearbeitung unter Linux (Schneiden, Verbinden und Vorschau)

Ok, da ich nicht viel über 05 finden kann Befehlszeilenverwendung, hier sind einige Anmerkungen. Code> )

Zunächst einmal gibt es ein Ubuntu/Debian-Paket für 23 (Ich habe Ubuntu 11.04 mit MLT Melt 0.6.2); der von @Ielton angegebene Link ist für das "Media Lovin' Toolkit" (MLT) Wiki, das 38 ist ist ein Teil von (aber auch 46 und 54 ). 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.

Im Moment ist das größte (einzige) Problem, das ich damit habe, dass ich keine Möglichkeit finde, eine unkomprimierte Videokomposition zu exportieren (entweder als 63 Frames oder ein unkomprimiertes Videoformat).

Zuerst in der Befehlszeile 76 Sie können die Wiedergabe über Frames steuern; zum Beispiel, um ein 15 Frames langes weißes Leerzeichen zu "erstellen" und es mit dem eingebauten 86 anzuzeigen Spieler, verwenden Sie

melt -blank 15

Wenn Sie mit 90 anzeigen , erhalten Sie auch eine Befehlszeileninfo zu 104 für den eingebauten Player:

$ melt -blank 15 
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
|1=-10| |2= -5| |3= -2| |4= -1| |5=  0| |6=  1| |7=  2| |8=  5| |9= 10|
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
+---------------------------------------------------------------------+
|               H = back 1 minute,  L = forward 1 minute              |
|                 h = previous frame,  l = next frame                 |
|           g = start of clip, j = next clip, k = previous clip       |
|                0 = restart, q = quit, space = play                  |
+---------------------------------------------------------------------+
Current Position:         15

Einmal 119 Wenn die Wiedergabe beendet ist, wird es nicht beendet - Sie sollten also 120 eingeben um es zu verlassen.

Wir sollten beachten, dass es in 139 sogenannte „Produzenten“ und „Konsumenten“ gibt . Wenn nichts angegeben ist, ist der standardmäßige „Verbraucher“ ein SDL-Fenster (Simple DirectMedia Layer), das das Video abspielt; der obige Befehl ist also derselbe wie:

melt -blank 15 -consumer sdl

Also, wenn wir was speichern wollen 142 anzeigt, sollten wir den Verbraucher auf etwas ändern, das ein Dateiformat unterstützt. So erhalten Sie eine Verbraucherliste:

$ melt -query "consumers"
---
consumers:
  - sdl
  - sdl_audio
  - sdl_preview
  - sdl_still
  - gtk2_preview
  - avformat
  - libdv
  - xml
  - decklink
  - null
...

Die 152 Consumer gibt DV-formatierte Daten direkt an 165 aus , um das Video also unter 179 zu speichern Datei, die Sie tun würden:

melt -blank 15 -consumer libdv > test.dv

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, 180 ist (Ich habe 191 verwendet als weitere Anwendung); Dies kann jedoch bei einer anderen Art der Transcodierung fehlschlagen (z. B. wenn ich anstelle eines Leerzeichens versuche, einen Ausschnitt aus einem 203 zu konvertieren Datei, die resultierende .dv-Datei wird geöffnet und in 212 abgespielt , ist aber beschädigt ).

Nun zur Bearbeitung Teil; Im Wesentlichen können Sie eine Reihe von Dateinamen angeben /in/out-Strophen direkt auf der Befehlszeile; Angenommen, Sie haben eine Datei, 228 - Dann könnten Sie Folgendes tun:

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79

oder etwas besser formatiert:

melt \ 
video.avi in=30 out=79 \ 
-blank 15 \
video.avi in=30 out=79

Das bedeutet 231 von seinem Rahmen 30 bis zu seinem Rahmen 79 wird abgespielt; dann ein 15-Frame-Blank; und dann die 245 Sequenz wieder von Bild 30 bis Bild 79.

Um Bilder zu verwenden (z. B. 258 ) in einer Videobearbeitungskomposition:

melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15

Beachten Sie das für 262 , 271 Parameter muss nicht 0 sein - das Bild wird jedoch für 289 angezeigt -295 Zeit; in diesem Fall wäre es am einfachsten, die 307 einfach stehen zu lassen Parameter ganz aus.

Das Gute ist, dass diese Bearbeitungsreihenfolge gespeichert werden kann - oder als 317 nennt es serialisiert - in eine Datei; Beachten Sie, dass es zwei gibt Möglichkeiten einer solchen Serialisierung:"einfach" oder XML. Um beispielsweise den obigen Befehl als "einfache" serialisierte Datei zu speichern, können wir einfach den 327 hinzufügen Wechseln Sie zum Befehl:

$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt 
Project saved as file.melt.

Jetzt die 338 enthält:

video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79

Anscheinend enthält dieses "einfache" serialisierte Dateiformat kein "Kommentarzeichen" - wenn ich versuche, ein "345 " Zeile, 353 beschwert sich mit:'Fehler beim Laden von "# Kommentar" ' (aber abgesehen davon scheint eine solche Zeile ignoriert zu werden, und die Wiedergabe wird trotzdem fortgesetzt). "365 " scheint eine Erweiterung zu sein, die 371 erkennt als einfache serialisierte Datei.

Um diese serialisierte Datei erneut abzuspielen, könnten wir im Prinzip einfach 383 aufrufen - Eine vollständigere Befehlszeile wäre jedoch:

melt melt_file:file.melt -consumer sdl

... was bedeuten würde:Verwenden Sie den 393 "Produzent", um 406 zu öffnen , und rendert seine Frames auf dem "Verbraucher" 417 (Fenster).

Beachten Sie, dass ich die Erfahrung gemacht habe, dass (sagen wir) 427 Videos werden problemlos auf der Befehlszeile abgespielt - verursachen jedoch einen Segmentierungsfehler, wenn sie im 436 angegeben sind serialisierte Datei! 440 von 453 produzierte Videos selbst, scheinen in 462 gut zu funktionieren ...

Der XML-Typ der Serialisierung kann durch Verwendung des 479 erreicht werden wechseln (statt 485 ) - das obige Beispiel wäre also jetzt:

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt

Zum „Abspielen“ des neu generierten 496 XML-Datei kann man jetzt direkt 500 machen - oder eine vollständigere Befehlszeile wäre:

melt xml:file.mlt -consumer sdl

... was bedeuten würde:Verwenden Sie den 515 "Produzent" (beachten Sie, vorher war es ein Konsument ), um 526 zu öffnen , und rendert seine Frames auf dem "Verbraucher" 539 (Fenster).

Beachten Sie, dass ich in diesem Fall genau dasselbe 541 erlebt habe Videos, die Segfault mit einer einfachen Serialisierungsdatei verursacht haben - funktionieren gut mit einer XML-Serialisierungsdatei!

In diesem Fall das Ergebnis 555 Die XML-Datei hat viel mehr Einstellungen, wie Auflösung, Bildrate, Codec-Informationen usw. - aber es ist auch schwieriger, direkt mit einem Texteditor zu arbeiten:

<?xml version="1.0" encoding="utf-8"?>
<mlt root="/path/to" title="video.avi">
  <profile description="automatic" width="320" height="240" progressive="1" sample_aspect_num="1" sample_aspect_den="1" display_aspect_num="320" display_aspect_den="240" frame_rate_num="25" frame_rate_den="1" colorspace="601"/>
  <producer id="producer0" in="30" out="79">
    <property name="mlt_type">producer</property>
    <property name="aspect_ratio">1.000000</property>
    <property name="length">125</property>
    <property name="eof">pause</property>
    <property name="resource">video.avi</property>
    <property name="meta.media.nb_streams">2</property>
    <property name="meta.media.0.stream.type">video</property>
    <property name="meta.media.0.stream.frame_rate">25.000000</property>
    <property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
    <property name="meta.media.0.codec.frame_rate">25.000000</property>
    <property name="meta.media.0.codec.pix_fmt">yuv420p</property>
    <property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
    <property name="meta.media.0.codec.colorspace">601</property>
    <property name="meta.media.0.codec.name">mpeg4</property>
    <property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
    <property name="meta.media.0.codec.bit_rate">0</property>
    <property name="meta.media.1.stream.type">audio</property>
    <property name="meta.media.1.codec.sample_fmt">s16</property>
    <property name="meta.media.1.codec.sample_rate">22050</property>
    <property name="meta.media.1.codec.channels">1</property>
    <property name="meta.media.1.codec.name">mp2</property>
    <property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
    <property name="meta.media.1.codec.bit_rate">64000</property>
    <property name="seekable">1</property>
    <property name="meta.media.sample_aspect_num">1</property>
    <property name="meta.media.sample_aspect_den">1</property>
    <property name="meta.attr.title.markup"></property>
    <property name="meta.attr.author.markup"></property>
    <property name="meta.attr.copyright.markup"></property>
    <property name="meta.attr.comment.markup"></property>
    <property name="meta.attr.album.markup"></property>
    <property name="audio_index">1</property>
    <property name="video_index">0</property>
    <property name="mlt_service">avformat</property>
  </producer>
  <producer id="producer1" in="30" out="79">
    <property name="mlt_type">producer</property>
    <property name="aspect_ratio">1.000000</property>
    <property name="length">125</property>
    <property name="eof">pause</property>
    <property name="resource">video.avi</property>
    <property name="meta.media.nb_streams">2</property>
    <property name="meta.media.0.stream.type">video</property>
    <property name="meta.media.0.stream.frame_rate">25.000000</property>
    <property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
    <property name="meta.media.0.codec.frame_rate">25.000000</property>
    <property name="meta.media.0.codec.pix_fmt">yuv420p</property>
    <property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
    <property name="meta.media.0.codec.colorspace">601</property>
    <property name="meta.media.0.codec.name">mpeg4</property>
    <property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
    <property name="meta.media.0.codec.bit_rate">0</property>
    <property name="meta.media.1.stream.type">audio</property>
    <property name="meta.media.1.codec.sample_fmt">s16</property>
    <property name="meta.media.1.codec.sample_rate">22050</property>
    <property name="meta.media.1.codec.channels">1</property>
    <property name="meta.media.1.codec.name">mp2</property>
    <property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
    <property name="meta.media.1.codec.bit_rate">64000</property>
    <property name="seekable">1</property>
    <property name="meta.media.sample_aspect_num">1</property>
    <property name="meta.media.sample_aspect_den">1</property>
    <property name="meta.attr.title.markup"></property>
    <property name="meta.attr.author.markup"></property>
    <property name="meta.attr.copyright.markup"></property>
    <property name="meta.attr.comment.markup"></property>
    <property name="meta.attr.album.markup"></property>
    <property name="audio_index">1</property>
    <property name="video_index">0</property>
    <property name="mlt_service">avformat</property>
  </producer>
  <playlist id="playlist0">
    <entry producer="producer0" in="0" out="49"/>
    <blank length="16"/>
    <entry producer="producer1" in="0" out="49"/>
  </playlist>
  <tractor id="tractor0" title="video.avi" global_feed="1" in="0" out="115">
    <track producer="playlist0"/>
  </tractor>
</mlt>

Ja da ist. Versuchen Sie es mit der App „Melt“. Sehen Sie sich die Dokumentation hier an.

Wenn Sie eine von Debian abgeleitete Distribution verwenden:

apt-get install melt

Die ffmpeg-Lösung für dieses Problem sieht etwa so aus:

mkfifo temp1 temp2 temp3
ffmpeg -i input.wmv -ss 30 -to 60 -c copy output.wmv temp1 2> /dev/null & \
ffmpeg -i input2.wmv -t 60 -c copy temp2 2> /dev/null & \
ffmpeg -i input3.wmv -i image.png -filter_complex "[0:v][1:v] \
overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy temp3 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp1|temp2|temp3" -c copy output.mp4

Es verwendet benannte Pipes, sodass keine temporären Dateien auf der Festplatte erstellt werden müssen, und Sie können Teile der Videoclips zerschneiden und Bilder hinzufügen.

Dieses Beispiel verwendet die Zeit 30–60 der ersten Eingabe und fügt dann die erste Minute der zweiten Eingabe hinzu, fügt dann eine Bilddatei und dann das gesamte dritte Video ein.

Code entfernt von:

ffmpeg-Verkettungsseite: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


Linux
  1. Open-Source-Videokonverter für Linux [GUI und CLI]

  2. Cut / Grep und Df -h?

  3. VidCutter – Schnelles Trimmen und Verbinden von Videoclips

  4. Die 10 besten Medienbearbeitungsanwendungen für Linux

  5. Cinelerra GG Infinity – Eine kostenlose Videobearbeitungssoftware für Linux

Die besten kostenlosen Videokonverter für Linux [GUI, CLI und Online]

50 einfacher und nützlicher Linux-Cut-Befehl in Unix mit Beispielen

Die 20 besten Linux-Videokonferenzsoftware und -tools

OpenShot:Ein einfacher und leistungsstarker Video-Editor für Linux

15 beste Videobearbeitungssoftware für Linux-Systeme

Welche Videobearbeitungsanwendungen sind unter Linux verfügbar?