简介

[!NOTE]

百度百科:ffmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。——摘自

使用ffmpeg合并音视频适用于原视频帧率、码率很高的情况,此时使用视频编辑软件合并音视频再导出会使视频画质下降,而且导出时间较长。使用ffmpeg合并很快且不影响视频画质。

此方法必须保证被合并的视频不能包含音频,否则不能正确合成

安装ffmpeg

这里介绍的是WIndows10 专业版22H2+ffmpeg-master-latest-win64-gpl-shared Auto-Build (2024-03-30 12:47) 的安装方式,不同版本的Windows和ffmpeg安装方式可能不同。Linux系统安装教程很多,此处不再赘述。

下载

打开ffmpeg的官网 https://ffmpeg.org/ ,点击Download跳转到下载页

image-20250620171433624

选择Windows并点击Windows builds by BtbN 跳转到Github

image-20250620171513581

在GitHub页面点击ffmpeg-master-latest-win64-gpl-shared.zip 开始下载。

image-20250620171541935

安装

将下载的压缩包解压到文件夹中,此处以D:\ffmpeg为例。

image-20250620171606308

打开设置→系统→关于→高级系统设置

image-20250620171630857

在弹出的页面里依次点击环境变量→系统变量/Path→新建,在新建项中填入D:\ffmpeg\bin (此处为上文中放置ffmpeg文件的位置),然后依次点击确认以保存修改。

image-20250620171652942

按下Win键+R并输入cmd,调出命令行窗口

image-20250620171744179

输入 ffmpeg -version,如果显示如下界面表示安装成功。

显示如下内容则为安装失败。请重启cmd或检查上述步骤是否全部正确进行。image-20250620171805838

使用脚本合并音视频

准备

将需要合并的音视频文件放入同一个文件夹中,并重命名为1.mp4和2.mp4(1为视频,2为音频)

image-20250620171828303

在文件夹中新建txt文件,并输入以下内容

@echo off
ffmpeg -i 1.mp4 -i 2.mp4 -vcodec copy -acodec copy output.mp4
pause & exit

将文件重命名为.bat格式。若看不到文件扩展名可以在文件夹选项中显示文件扩展名

image-20250620171906765

开始处理

双击运行.bat文件,将弹出命令行窗口并自动合并音视频文件。待处理完成后将生成名为output.mp4的文件

image-20250620172001672

测试

上文示例

在上面的例子中,使用PotPlayer查看视频文件的属性如下:

[滤镜使用列表]
(1) Built-in MP4 Source
(2) Built-in Video Codec/Transform
(3) Enhanced Video Renderer(Custom Present)

[视频信息]
视频编码: AVC1 - 内置 FFmpeg 解码器(h264, Thread Frame)
输入格式: AVC1(24 bits)
输入尺寸: 2560 × 1440(1.78:1)
输出格式: NV12(12 bits)
输出尺寸: 2560 × 1440(1.78:1)
帧率: 120
BitRate: 未知

image-20250620172049605

该文件为h264编码,且本身并不包含音频。

使用PotPlayer查看音频文件的属性如下:

[滤镜使用列表]
(1) Built-in Async Reader
(2) Built-in MP3 Parser
(3) Built-in Audio Codec/Transform
(4) DirectSound Audio Renderer

[音频信息]
音频编码: MPEG Audio Layer 3(0x55) - 内置 FFmpeg 解码器(mp3float)
采样率: 44100 -> 44100 Hz
位率: 0 -> 16 位
声道数: 2 -> 2 声道
Bitrate: 128 kbps

image-20250620172109954

该文件为MP3编码、mp3格式,修改后缀名为mp4格式。

示例的音视频文件时长均为03:05,共4.76GB。合并后的时常为03:05,4.76GB。

其他测试

  • 将上文output.mp4使用剪映分别导出为包含原音频的1.mp4和修改音频的2.mp4,使用脚本合并,得到的output与完全1相同,合并失败。

  • 将包含原音频的1.mp4与纯音频的2.mp4合并,得到的output与1完全相同,合并失败。

  • 将不包含音频的1.mp4与时长不同的纯音频2.mp4合并,得到的output视频与1相同,音频与2相同,时长与两者之中较长的相同。当音频更长时,将合并后的视频进度条拉到超出视频时长的部分时视频会卡住。

  • 将不包含音频的1.mp与时长不同包含视频和音频的2.mp4合并,得到的output为1的视频+2的音频,时长与两者之中较长的相同。

观察合并失败后的视频尺寸,可以确定音频没有被合并,而不是被合并到其他轨道。