有沒有辦法從命令列為影片添加「淡入黑色」效果?

有沒有辦法從命令列為影片添加「淡入黑色」效果?

我有一個對視訊進行編碼的腳本(使用 mencoder),但是有沒有辦法從命令列添加一個簡單的“淡出/淡入黑色”,最好是免費的(如開源)。

它可以在 Windows 或 Ubuntu Linux 上。

答案1

我唯一能找到的——基於命令列——是mmsuper8,一個Linux工具。

具體來說,它具有該mmsuper8fade工具,這似乎對您有用。

最好的是,如果您編輯這個問題並提供一個適合您的範例!

答案2

最近帶有“淡入淡出”視訊過濾器的 ffmpeg 可以做到這一點。不幸的是,Ubuntu 儲存庫中的 ffmpeg 由於某些愚蠢的原因沒有啟用過濾器,因此您必須從其他地方取得它(請參閱這裡)。

要從黑色淡入,從第 0 幀開始,超過 50 幀(2 秒 @ 25fps):

ffmpeg -i input.mp4 -filter:v 'fade=in:0:50' \
-c:v libx264 -crf 22 -preset veryfast -c:a copy output.mp4

要從第 21000 幀(14 分鐘 @ 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 共享許多庫,因此重寫腳本以使用 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>

相關內容