Ich habe ein Skript zum Kodieren von Videos (mit Mencoder), aber gibt es eine Möglichkeit, über die Befehlszeile ein einfaches „Ausblenden/Einblenden in Schwarz“ hinzuzufügen, vorzugsweise kostenlos (also Open Source)?
Es könnte entweder unter Windows oder Ubuntu Linux laufen.
Antwort1
Das einzige, was ich finden konnte – basierend auf der Befehlszeile – istmmsuper8
, ein Linux-Tool.
Insbesondere wird das mmsuper8fade
Tool vorgestellt, das für Sie nützlich sein könnte.
Am besten wäre es, wenn Sie diese Frage bearbeiten und ein Beispiel angeben, das für Sie funktioniert hat!
Antwort2
Ein aktuelles ffmpeg mit dem Videofilter „fade“ kann dies. Leider hat das ffmpeg in den Ubuntu-Repos aus irgendeinem albernen Grund keine Filter aktiviert, also müssen Sie es woanders herbekommen (sieheHier).
So blenden Sie ab Bild 0 über 50 Bilder (2 Sekunden bei 25 fps) von Schwarz ein:
ffmpeg -i input.mp4 -filter:v 'fade=in:0:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Zum Ausblenden ab Bild 21000 (14 Minuten bei 25 fps) über 50 Bilder:
ffmpeg -i input.mp4 -filter:v 'fade=out:21000:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Sie können beides zu einer Filterkette kombinieren:
ffmpeg -i input.mp4 -filter:v 'fade=in:0:50,fade=out:21000:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Wie Sie diesen Beispielen entnehmen können, müssen Sie Videos transkodieren, wenn Sie einen Videofilter verwenden. Da ffmpeg und mencoder viele Bibliotheken gemeinsam nutzen, sollte es relativ einfach sein, Ihre Skripte so umzuschreiben, dass sie ffmpeg statt mencoder verwenden und eine unnötige zusätzliche Kodierung vermeiden. Ich bin ziemlich sicher, dass Sie dasselbe in mencoder erreichen können, aber ich kenne die Mencoder-Syntax nicht.
Antwort3
Ich habe dieses Bash-Skript, um das Ende von Filmen (Audio + Video) automatisch auszublenden:
#!/bin/bash
# Audio + vidéo fade out at the end of mp4 files
# 2015-09-09 19:07:17.0 +0200 / Gilles Quenot
# length of the fade out
fade_duration=2 # seconds
if [[ ! $2 ]]; then
cat<<EOF
Usage:
${0##*/} <input mp4> <output mp4>
EOF
exit 1
fi
for x in bc awk ffprobe ffmpeg; do
if ! type &>/dev/null $x; then
echo >&2 "$x should be installed"
((err++))
fi
done
((err > 0)) && exit 1
duration=$(ffprobe -select_streams v -show_streams "$1" 2>/dev/null |
awk -F= '$1 == "duration"{print $2}')
final_cut=$(bc -l <<< "$duration - $fade_duration")
ffmpeg -i "$1" \
-filter:v "fade=out:st=$final_cut:d=$fade_duration" \
-af "afade=t=out:st=$final_cut:d=$fade_duration" \
-c:v libx264 -crf 22 -preset veryfast -strict -2 "$2"
Verwendung :
FadeOutMp4 <input mp4> <output mp4>