Siduction Forum > Scripting & Kernelhacking
[DE] Mehrere Videos mit melt zusammenschneiden (Ein-, Aus- u. Überblendeffekte)
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