У мене є сценарій для кодування відео (за допомогою mencoder), але чи є спосіб додати простий "fade out / in black" з командного рядка, бажано безкоштовно (як у відкритому коді).
Це може бути або в Windows, або Ubuntu Linux.
У мене є сценарій для кодування відео (за допомогою mencoder), але чи є спосіб додати простий "fade out / in black" з командного рядка, бажано безкоштовно (як у відкритому коді).
Це може бути або в Windows, або Ubuntu Linux.
Відповіді:
Це може зробити нещодавній 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.
У мене є цей сценарій 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>