답변:
'페이드'비디오 필터가있는 최근 ffmpeg가이를 수행 할 수 있습니다. 불행히도 우분투 저장소의 ffmpeg에는 어떤 이유로 인해 필터가 활성화되어 있지 않으므로 다른 곳에서 가져와야합니다 ( 여기 참조 ).
프레임 0에서 시작하여 50 프레임 (25fps에서 2 초) 이상 검은 색으로 페이드 인하려면 :
ffmpeg -i input.mp4 -filter:v 'fade=in:0:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
프레임 21000 (14fps @ 25fps)에서 시작하여 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는 많은 라이브러리를 공유하므로 mencoder 대신 ffmpeg를 사용하도록 스크립트를 다시 작성하고 불필요한 추가 인코딩을 피하는 것이 매우 쉽습니다. 나는 당신이 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>