使用 concat 解复用器

使用 concat 解复用器

我正在尝试转换由多个 FLV 文件组成的 Adob​​e Connect Recording。有些文件包含音频,有些文件包含视频。我想将 FLV 文件合并为一个视频。但是,有一个重要要求。我想在特定时间开始播放音频/视频。例如:

audio1.flv start at 0s
audio2.flv start at 20s
video1.flv start at 15s
video2.flv start at 160s

那么我如何告诉 FFmpeg 将哪些 FLV 用作音频,哪些用作视频,以及何时开始播放每一个 FLV?

答案1

使用 concat 解复用器

这使用颜色源过滤器创建 15 秒黑色视频间隔放在开头:

ffmpeg -f lavfi -i color=s=640x480:r=25:d=15 blank.flv

这需要匹配其他视频的所有属性,包括宽度、高度、像素格式、帧速率(理想情况下)、视频格式、容器格式、时间基准等。

为创建输入列表文件连接解复用器

例子video.txt

file 'blank.flv'
file 'video1.flv'
file 'video2.flv'

例子audio.txt

file 'audio1.flv'
file 'audio2.flv'

然后连接:

ffmpeg -f concat -i video.txt -f concat -i audio.txt -map 0:v -map 1:a -c copy -shortest output.flv

在连接之前,请确保所有输入都具有相同的属性。如果它们不同,则可能会失败或产生不良结果,并且您需要在连接之前使用各种过滤器对它们进行预处理,或者参见下文。

使用过滤器

过滤需要重新编码,因此您无法流复制已过滤的流,但您可以在一个命令中完成所有操作,并且输出可能比使用 concat 解复用器更一致(因为用户试图连接任意、不同的输入)。

使用延迟(延迟音频),混合物(混音音频),平板(延迟视频),以及连接过滤器:

ffmpeg -i audio1.flv -i audio2.flv -i video1.flv -i video2.flv -filter_complex "[1:a]adelay=20s[a1];[2:v]tpad=start_duration=15[v0];[0:a][a1]amix[a];[v0][3:v]concat=n=2:v=1:a=0[v]" -map "[v]" -map "[a]" -shortest  output.flv

由于缺乏有关您的输入的信息,这是一个通用的答案,并做出了一些假设:

  • 所有输入都具有相同的属性。这是正确连接所必需的。如果不是这种情况,则在使用连接之前添加额外的过滤器以使所有属性相同。

  • 我假设的持续时间为video1.flv145 秒,并且您想要在 160 秒(145 + 15 延迟)结束video2.flv时播放。video1.flv

  • 确保使用最近的ffmpeg,否则您会收到来自不支持(秒)后缀的 adelay 的错误s:在这种情况下请升级或使用毫秒。

相关内容