有没有办法从命令行向视频添加“淡入黑色”效果?

Man*_*anu 10 video windows command-line ubuntu video-editing

我有一个脚本来编码视频(使用mencoder),但是有没有办法从命令行添加一个简单的“淡出/淡入黑色”,最好是免费的(如在开源中)。

它可以在 Windows 或 Ubuntu Linux 上。

evi*_*oup 15

最近带有“淡入淡出”视频过滤器的 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
Run Code Online (Sandbox Code Playgroud)

要从 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
Run Code Online (Sandbox Code Playgroud)

您可以将两者组合成一个过滤器链:

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
Run Code Online (Sandbox Code Playgroud)

从这些示例中可以看出,使用视频过滤器时必须对视频进行转码。由于 ffmpeg 和 mencoder 共享许多库,因此重写脚本以使用 ffmpeg 而不是 mencoder 并避免不必要的额外编码应该相当容易。我很确定你可以在 mencoder 中实现同样的事情,但我不知道 mencoder 语法。


Gil*_*not 7

我有这个 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"
Run Code Online (Sandbox Code Playgroud)

用法 :

FadeOutMp4 <input mp4> <output mp4>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢吉尔斯,该脚本对我很有用。我只需将第 29 行更改为 `final_cut=$(echo "$duration - $fade_duration" | sed 's/\r//' | bc -l)` 因为我在 WSL 上 (2认同)

slh*_*hck 1

我唯一能根据命令行 \xe2\x80\x93 找到 \xe2\x80\x93 的是mmsuper8Linux 工具。

\n\n

具体来说,它具有该mmsuper8fade工具,这似乎对您有用。

\n\n

最好的是,如果您编辑这个问题并提供一个适合您的示例!

\n