У меня есть скрипт для кодирования видео (используя mencoder), но есть ли способ добавить простое «затухание/появление черного» из командной строки, желательно бесплатный (с открытым исходным кодом)?
Это может быть как Windows, так и Ubuntu Linux.
решение1
Единственное, что мне удалось найти – основываясь на командной строке – этоmmsuper8
, инструмент Linux.
В частности, в нем представлен mmsuper8fade
инструмент, который, как мне кажется, может быть вам полезен.
Лучше всего будет, если вы отредактируете этот вопрос и приведете пример, который сработал у вас!
решение2
Это может сделать недавний ffmpeg с видеофильтром 'fade'. К сожалению, ffmpeg в репозиториях Ubuntu не имеет включенных фильтров по какой-то глупой причине, поэтому вам придется получить его откуда-то еще (см.здесь).
Для постепенного появления из черного, начиная с кадра 0, в течение 50 кадров (2 секунды при 25 кадрах в секунду):
ffmpeg -i input.mp4 -filter:v 'fade=in:0:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Для затухания, начиная с кадра 21000 (14 минут при 25 кадрах в секунду), на протяжении 50 кадров:
ffmpeg -i input.mp4 -filter:v 'fade=out:21000:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Вы можете объединить их в цепочку фильтров:
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
Как вы можете видеть из этих примеров, вам нужно перекодировать видео при использовании видеофильтра. Поскольку ffmpeg и mencoder используют много общих библиотек, должно быть довольно легко переписать ваши скрипты для использования ffmpeg вместо mencoder и избежать ненужного дополнительного кодирования. Я почти уверен, что вы можете добиться того же в mencoder, но я не знаю синтаксиса mencoder.
решение3
У меня есть этот bash-скрипт для автоматического затухания конца фильмов (аудио + видео):
#!/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"
Использование :
FadeOutMp4 <input mp4> <output mp4>