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

6 video-editor ffmpeg

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

llo*_*gan 8

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

如果你想淡出声音太然后添加afade过滤器:

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

要自动使用它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
Run Code Online (Sandbox Code Playgroud)

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

...并保持其他所有内容相同(编解码器,质量)

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


Vij*_*jay 1

  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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 查找每秒的帧数

帧率

24 了

  1. 添加淡入/淡出

    ffmpeg -i clip.mp4 -vf "fade=in:0:24,fade=out:5106:24" -acodec copy clip-out.mp4
    
    Run Code Online (Sandbox Code Playgroud)

完毕