Tôi có một tập lệnh để mã hóa video (sử dụng mencoder), nhưng có một cách để thêm "fade out / in to black" đơn giản từ dòng lệnh, tốt nhất là miễn phí (như trong nguồn mở).
Nó có thể là trên Windows hoặc Ubuntu Linux.
Tôi có một tập lệnh để mã hóa video (sử dụng mencoder), nhưng có một cách để thêm "fade out / in to black" đơn giản từ dòng lệnh, tốt nhất là miễn phí (như trong nguồn mở).
Nó có thể là trên Windows hoặc Ubuntu Linux.
Câu trả lời:
Một ffmpeg gần đây với bộ lọc video 'fade' có thể làm điều này. Thật không may, ffmpeg trong repos Ubuntu không có bộ lọc được kích hoạt vì một số lý do vô ích, vì vậy bạn sẽ phải lấy nó từ một nơi khác (xem tại đây ).
Để mờ dần từ màu đen, bắt đầu từ khung 0, trên 50 khung hình (2 giây @ 25fps):
ffmpeg -i input.mp4 -filter:v 'fade=in:0:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Để làm mờ dần bắt đầu từ khung 21000 (14 phút @ 25 khung hình / giây), hơn 50 khung hình:
ffmpeg -i input.mp4 -filter:v 'fade=out:21000:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4
Bạn có thể kết hợp cả hai thành một bộ lọc:
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
Như bạn có thể thấy từ các ví dụ này, bạn phải chuyển mã video khi sử dụng bộ lọc video. Do ffmpeg và mencoder chia sẻ nhiều thư viện, nên việc viết lại các tập lệnh của bạn để sử dụng ffmpeg thay vì mencoder khá dễ dàng và tránh việc mã hóa thêm không cần thiết. Tôi khá chắc chắn rằng bạn có thể đạt được điều tương tự trong mencoder, nhưng tôi không biết cú pháp mencoder.
Tôi có tập lệnh bash này để tự động làm mờ dần phần cuối của phim (âm thanh + video):
#!/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>