Siduction Forum > Scripting & Kernelhacking

[DE] Mehrere Videos mit melt zusammenschneiden (Ein-, Aus- u. Überblendeffekte)

<< < (2/3) > >>

scholle1:
Hallo pit,
freut mich, dass ich dir helfen konnte.
;D

scholle1:
Habe das Skript noch einmal überarbeitet und vereinfacht.


--- Code: ---#!/bin/sh
#
# Name: multifilm.sh
#
# Voraussetzung:
#  Eindeutige Dateinamen die die Reihenfolge, in der die Dateien
#  zusammengesetzt werden sollen, widerspiegelt. Am besten Nummerierung
#  mit führenden Nullen. Die Nummerierung muss nicht durchgehend sein.
#  Die Dateinamenerweiterung muss .mp4 lauten.
# Ausführen:
#  Dieses Skript z.B. in /usr/local/bin ablegen und ausführbar machen.
#  In den Ordner mit den .mp4 Dateien wechseln und das Skript aufrufen.
# Aufruf:
#  multifilm.sh 30
#  Der Parameter 30 gibt die Anzahl der Überblend-Frames an.
#  Er ist entsprechend den eigenen Wünschen anpassbar.


# Prüfung auf Vorhandensein des Parameters für die Überblend-Frames.
if [ $# -ne 1 ]
then
  echo "Der Parameter für die Anzahl der Überblend-Frames fehlt."
  exit 1
fi

# Befehl zusammenstellen
# 1. Einblenden
OUTPUT="melt colour:black out=$1"

# 2. Überblenden
for i in *.mp4; do
    OUTPUT="$OUTPUT $i -mix $1 -mixer luma -mixer mix:-1";
done

# 3. Ausblenden 
OUTPUT="$OUTPUT colour:black out=$1 -mix $1 -mixer luma -mixer mix:-1"

# Befehl mit Angabe der Codecs und Ausgabedatei ausführen. (In einer Zeile!)
exec $OUTPUT -profile hdv_1080_25p -consumer avformat:$(date +%y%m%d-%H%M%S)-videomix.mp4 vcodec=libx264 b=2M acodec=aac ab=96k
--- End code ---

pit:
@scholle1

Ich habe noch eine kleine Erweiterung eingebaut. Melt versteht sich auf alle möglichen Video Container (mp4, mov, mpg ... usw.). Folgende Script-Variante fragt verschiedene Video File Extensions ab, ignoriert solche, die im Verzeichnis nicht vorkommen (shopt -s nullglob), behandelt vorhandene unabhängig von Groß- und Kleinschreibung (shopt -s nocaseglob) und arbeitet ansonsten wie beschrieben.


--- Code: ---#!/bin/bash
case $1 in
    ''|*[!0-9]*) FRAMES="30" ;;
    *) FRAMES="$1" ;;
esac
OUTPUT="melt colour:black out=$FRAMES"
shopt -s nullglob
for i in `shopt -s nocaseglob && \ls -1 *.mp4 *.mpg *.mov *.webm *.avi *.ogv *.mkv *.flv *.mpeg && shopt -u nocaseglob`
do
# for i in *.mp4; do
    OUTPUT="$OUTPUT $i -mix $FRAMES -mixer luma -mixer mix:-1";
done
    OUTPUT="$OUTPUT colour:black out=$FRAMES -mix $FRAMES -mixer luma -mixer mix:-1";
shopt -u nullglob
exec $OUTPUT -profile hdv_1080_25p -consumer avformat:$(date +%y%m%d-%H%M%S)-videomix.mp4 vcodec=libx264 b=2M acodec=aac ab=96k
--- End code ---

scholle1:
Hallo @pit,

wir denken beide viel zu sehr um drei Ecken, weil wir ursprünglich
von .mp4 Dateien ausgingen und das Skript dann auf andere Dateitypen
erweitern wollten.
Statt

--- Code: ---shopt -s nullglob
for i in `shopt -s nocaseglob && \ls -1 *.mp4 *.mpg *.mov *.webm *.avi *.ogv *.mkv *.flv *.mpeg && shopt -u nocaseglob`, do
 . . .
shopt -u nullglob

--- End code ---

reicht

--- Code: ---for i in $(ls); do
--- End code ---

 - weil wir für die Zusammenstellung der Videos einen separaten Ordner verwenden,
 - weil in diesem Ordner ausschließlich Videos landen,
 - weil wir die Videos mit führenden Ziffern entsprechend ihrer späteren Reihenfolge umbenennen,
 - weil melt mit nahezu allen erdenklichen AV Formaten umgehen kann,
 - weil `ls` alle Videos, gleichgültig welcher Formate, aufsteigend nach den Ziffern sortiert,
 - weil `ls` nur existierende Videos ausgibt und keine RegEx mit Metazeichen verarbeiten muss.

Manchmal ist die Lösung sooooo einfach dass man schier daran vorbei denkt.

pit:
Hallo @scholle1

Erneut vielen Dank!

Du hast ja recht - Keep it simple, stupid (letzteres bezieht sich auf mich selbst) ;-)

Da du augenblicklich im irc nicht erreichbar bist: Artikel ist redigiert u. liegt mit neuem Namen in der Cloud.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks WYSIWYG Editor