cmd = [
'ffmpeg',
'-stream_loop', '10', # 循环播放第一个输入文件10次
'-i', bgmPath, # 第一个输入文件
'-i', videoPath, # 第二个输入文件
'-filter_complex', "[0:a]volume=0.1[a0];[1:a][a0]amix=inputs=2:duration=first:dropout_transition=3[out]", #你可以在一个复杂的过滤器图中定义多个音频和视频过滤器,并指定它们之间的连接和操作。
'-map', '1:v', # 映射视频流(从输入文件0的第一个视频流)
'-map', '[out]', # 映射音频流(从输入文件1的第一个音频流)
'-c:v', 'copy', # 视频编解码器设置为copy,即直接复制视频流
'-c:a', 'aac', # 音频编解码器设置为aac
'-strict', 'experimental', # 允许使用实验性功能(对于某些版本的FFmpeg可能需要)
'-shortest', # 输出文件的时长与最短的输入流相同
'-y', # 覆盖输出文件(如果存在)
outVideoPath # 输出文件路径
]
-filter_complex 部分
'-filter_complex', "[0:a]volume=0.1[a0];[1:a][a0]amix=inputs=2:duration=first:dropout_transition=3[out]", // 你可以在一个复杂的过滤器图中定义多个音频和视频过滤器,并指定它们之间的连接和操作。
// [0:a]volume=0.1[a0] 将第1个输入(背景音乐)的音频流音量降低为原音量的10%。[a0] 是降低音量后的音频流的标签。
// [1:a][a0]amix=inputs=2:duration=first:dropout_transition=3[out] 将第2个输入的音频流和降低音量后的背景音乐音频流混合在一起。
// 参数 inputs=2 表示有两个输入,分别是原视频的音频和降低音量后的背景音乐音频。
// duration=first 表示以第一个输入为主,如果第一个输入结束,后续输入的音频将不再混合。
// dropout_transition=3 表示混合时的过渡时间为3秒。
// [out] 是输出混合后的音频流的标签。
// -vf "drawtext=text='Your Text Here':x=(w-text_w-10):y=10:fontsize=24:fontcolor=white:enable='between(t,0,0)'"
// 这里的 -vf 参数表示视频过滤器,用于在视频流上应用滤镜效果。drawtext 是其中的一个滤镜,它用于在视频中绘制文本。
// text='Your\nText Here' 表示要绘制的文本内容是 'Your Text Here'。你可以将其中的 'Your Text Here' 替换为你想要添加的文本内容。 可以使用 \n 来表示换行
// x=(w-text_w-10) 表示文本的横坐标位置。这里的 (w-text_w-10) 表示在视频宽度的右侧,距离右边框 10 个像素的位置。这样就可以将文本放在视频的右上角。
// y=10 表示文本的纵坐标位置。这里的 10 表示距离视频顶部 10 个像素的位置。这样就可以将文本放在视频的上方。
// 例:x=(w-text_w)/2:y=(h-text_h)/8 : (w-text_w)/2 表示将文本水平居中放置,(h-text_h)/8 表示将文本垂直居中放置,且距离视频顶部 1/8 处。
// fontsize=24 表示文本的字体大小为 24 像素。
// fontcolor=white 表示文本的字体颜色为白色。
// :enable='between(t,0,0)' between(t,0,0) 的含义是在视频的时间范围从 0 到 0 秒之间应用滤镜。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END






暂无评论内容