FFmpeg 串联,最终输出中没有音频

FFmpeg concatenation, no Audio in Final Output

我在 ffmpeg 中使用以下命令,它会在视频开头添加 1 秒的黑帧。但是,我在输出视频中丢失了原始视频中的音频。我如何调整命令以确保原始音频与最终输出保持一致,或者更好的是,开头有 1 秒的 "blank" 音频,以便与新的输出视频相匹配。

ffmpeg -i originalvideo -f lavfi -i color=c=black:s=1920x1080:r=25:sar=1/1 -filter_complex "[0:v] setpts=PTS-STARTPTS [main]; [1:v] trim=end=1,setpts=PTS-STARTPTS [pre]; [pre][main] concat=n=2:v=1:a=0 [out]" -map "[out]" finaloutputvideo.mp4

您需要生成或添加与黑色视频关联的音频,因为每个串联部分需要相同数量的视频和音频流。

ffmpeg \
-i originalvideo \
-f lavfi -i color=c=black:s=1920x1080:r=25:sar=1/1:d=1 \
-t 1 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-filter_complex \
"[0:v]setpts=PTS-STARTPTS[mainv]; \
 [0:a]asetpts=PTS-STARTPTS[maina]; \
 [1:v][2:a][mainv][maina]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -movflags +faststart output.mp4
  • 您可以消除颜色的 (a)setpts 过滤器和 anullsrc 源过滤器,因为它们的时间戳从 0 开始。

  • 您可以避免使用 trim 过滤器,因为您可以设置每个过滤器的持续时间。

  • anullsrc 持续时间的 -t 值只需要小于或等于黑色视频的持续时间:concat 过滤器将自动用静音填充其余部分。

  • 使用 anullsrc 确保您匹配主视频的正确频道布局和音频采样率;否则 concat 可能会自动选择 "common" 可能不是您想要的布局和速率。