ffmpeg实现多图片与音频合成视频并额外添加bgm

本文详细介绍了如何使用ffmpeg工具将多张图片和音频合成视频,并添加背景音乐,包括统一图片分辨率、调整视频时长、合成多个视频、以及为视频添加背景音乐的过程和技术参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

本文用ffmpeg实现了将多张图片和音频合成视频并额外添加bgm,大致分为如下步骤:

  1. 统一图片分辨率
  2. 读取每个音频时长
  3. 单张图片与单个音频合成视频
  4. 多个视频合成一个视频
  5. 为视频添加bgm

统一图片分辨率

ffmpeg -i a.png -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" -y a_fixed.png
各参数介绍
  • -i 输入文件
  • -vf 滤镜
  • scale:将图片等比例缩放为1080(宽)*1920(高) 并且用黑边填充
  • -y 指定输出地址,如果输出地址存在则强制覆盖原文件而不询问
scale参数的几种用法
  1. scale=-1:1920 将视频的高度固定为1920像素,宽度等比例缩放
  2. scale=1080:-1 将视频的宽度固定为1080像素,高度等比例缩放
  3. scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2 将视频等比例缩放为宽1280,高720像素并填充黑边

读取音视频时长(秒)

ffmpeg -i 1.mp3 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//

注意:上述指令的输出结果为浮点型

执行ffmpeg -i 1.mp3后的结果

在这里插入图片描述

参数说明
  • cut -d ’ ’ -f 4 按照’ '分割并取第四个元素,索引从1开始
  • 将字符串,替换为空

图片与音频合成视频

单张图片和音频合成一个视频,视频时长为音频时长加音频结束后的静音时长

加入静音时长的目的是为了在将两个视频合并时,画面切换时不显得突兀,如果不需要静音时长,只需要将视频时长设置为音频时长即可。

ffmpeg -i 1.png -i 1.mp3 -af apad -vf "[0:v]scale=1080x1920,zoompan=z='min(zoom+0.0015,1.5)':d=112.5:s=1080x1920:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',setpts=PTS-STARTPTS" -pix_fmt yuv420p -c:v libx264 -t 4.5 -y 1.mp4
参数说明
  • -af apad 当音频时长小于视频时长时,在音频结束后添加静音
  • scale=1080x1920: 将图片缩放到指定的尺寸(宽度和高度)
  • zoompan: 创建缩放和平移效果
    • z=‘min(zoom+0.0015,1.5)’ 每帧聚焦0.0015倍,最大聚焦1.5倍
  • d=112.5 每张图片的持续时间。 视频每秒25帧,因此图片持续时间m秒即为25*m
  • s=1080x1920 输出视频的尺寸
  • x=‘iw/2-(iw/zoom/2)’:y='ih/2-(ih/zoom/2) 聚焦到中心点(对角线中心)
  • 这个过滤器用来调整时间戳,使得输出的视频从0开始
  • -pix_fmt yuv420p: 设置输出视频的像素格式为yuv420p,这是大多数视频播放器都支持的格式。
  • -c:v libx264: 设置视频编码器为libx264,这是一个广泛使用的H.264编码器。
  • -t : 输出视频的时长(秒)

多个视频合成一个长视频

首先我们需要将要合成的视频放在同一个文件夹下,并在此文件夹中创建一个concat.txt文件。

concat.txt文件内容为我们要合成长视频的每个短视频如:
file 1.mp4
file 2.mp4

合成命令
ffmpeg -f concat -safe 0 -i concat.txt -c copy -y final.mp4
参数说明

-safe 0 是否检查文件路径的安全性。如果设置为0,ffmpeg 将不检查文件路径的安全性。这在处理包含特殊字符或非本地文件路径的文件时可能很有用。在默认情况下,-safe 的值为1,这意味着 ffmpeg 会检查文件路径的安全性。

为视频添加bgm

ffmpeg -i final.mp4 -stream_loop -1 -i bgm.mp3 -filter_complex "[1:a]volume=0.5[1a];[0:a][1a]amix=inputs=2:duration=first:dropout_transition=2" -vcodec copy -y final_bgm.mp4
参数解读
  • -stream_loop -1 循环,当number为-1时表示无限循环
  • -filter_complex 复杂的音频混合滤镜,已有音频流的视频添加bgm必须使用此滤镜
  • [1:a]volume=%f[1a]:调整背景音乐的音量。[1:a] 指的是第二个输入文件(即 bgm.mp3)的音频流,volume=%f 是一个音频滤镜,用于调整音量,%f 是音量的具体值,[1a] 是处理后的音频流的标签。
  • [0:a][1a]amix=inputs=2 将第一个音频与第二个处理后的音频混合
  • duration=first 视频时长为第一个输入的时长
  • dropout_transition 是 amix 滤镜在 ffmpeg 中的一个选项。这个选项用于控制当一个或多个输入流结束时,剩余的输入流的过渡时间。单位是秒。例如,假设你有两个音频流 A 和 B。A 比 B 短,所以在混合过程中,A 会先结束。如果 dropout_transition 设置为 2 秒,那么当 A 结束后,B 的音量会在接下来的 2 秒内平滑过渡到其原始音量。
    -vcodec copy:指定视频编解码器为 copy,直接复制输入视频的数据,而不进行重新编码。这可以避免数据的损失,并且处理速度更快
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值