如何使用 ffmpeg 在视频结尾添加 1 秒淡出效果?

如何使用 ffmpeg 在视频结尾添加 1 秒淡出效果?

如何使用 ffmpeg 在视频的开始或结束处添加简单的一秒或半秒淡入淡出效果,并保持其他所有内容不变(编解码器,质量)

答案1

对于 10 秒的视频,开头淡入 1 秒,结尾淡出 1 秒,使用褪色筛选:

ffmpeg -i input.mp4 -vf "fade=type=in:duration=1,fade=type=out:duration=1:start_time=9" -c:a copy output.mp4

如果你也想淡化音频,那么添加阿法德筛选:

ffmpeg -i input.mp4 -filter_complex "[0:v]fade=type=in:duration=1,fade=type=out:duration=1:start_time=9[v];[0:a]afade=type=in:duration=1,afade=type=out:duration=1:start_time=9[a]" -map "[v]" -map "[a]" output.mp4

为了实现自动化,使用ffprobe来获取持续时间并bc计算最后淡出的开始时间:

#!/bin/bash
mkdir fade
for f in *.mp4; do
  dur=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 "$f")
  offset=$(bc -l <<< "$dur"-1)
  ffmpeg -i "$f" -filter_complex "[0:v]fade=type=in:duration=1,fade=type=out:duration=1:start_time='$offset'[v];[0:a]afade=type=in:duration=1,afade=type=out:duration=1:start_time='$offset'[a]" -map "[v]" -map "[a]" fade/"$f"
done

假设所有输入都有视频和音频。如果没有,您可以结合使用 if/then 语句来ffprobe确定是否有音频。

...其他一切保持不变(编解码器、质量)

过滤需要编码。输出有损格式时无法保持质量。要么输出无损格式(不推荐,文件很大,兼容性问题),要么接受一定程度的损失。幸运的是,您可能不会注意到。只需-crf在输出 H.264 视频时使用该选项即可。使用看起来仍然足够好的最高值。请参阅FFmpeg 维基:H.264更多细节。

答案2

  1. 找出视频片段中的帧数。命令:

    ffmpeg -i clip.mp4 -vcodec copy -f rawvideo -y /dev/null 2>&1 | tr ^M '\n' | awk '/^frame=/ {print $2}'|tail -n 1
    5130
    
  2. 查找每秒的帧数

每秒帧数

现在是 24

  1. 添加淡入/淡出

    ffmpeg -i clip.mp4 -vf "fade=in:0:24,fade=out:5106:24" -acodec copy clip-out.mp4
    

完毕

相关内容