这个需求产生于B站视频下载下来之后是分开的两个文件:没有声音的mp4视频文件和m4a音频文件。如何下载B站视频,可以参考 Bilibili-Evolved 的使用教程。
一、视频下载
Bilibili-Evolved脚本生效以后,就可以下载B站视频了:

默认下载格式是音画分离的,点击开始会看到两个下载按钮

点击后浏览器会直接下载

二、音视频合并
音视频合并需要使用到工具ffmpeg
,使用该命令行工具只需要一行命令就可以合并音视频文件:
ffmpeg -i "file1" -i "file2" -vcodec copy -acodec copy "target_file"
命令很简单,但是每次合并都要拼写这个命令还是很麻烦的,所以这里写了个python脚本来实现
1、python脚本实现音视频合并
import os
import argparse
from pathlib import Path
parser = argparse.ArgumentParser(
prog='merge_mp4_m4a',
description='合并mp4和m4a文件脚本',
epilog='Copyright(r), 2025'
)
parser.add_argument('input', help='m4a文件路径')
# 解析参数
args = parser.parse_args()
def do_merge_file(mp4_file: Path, m4a_file: Path, target_file: Path):
command = f"""
ffmpeg -i "{mp4_file.absolute()}" -i "{m4a_file.absolute()}" -vcodec copy -acodec copy "{target_file.absolute()}"
"""
os.system(command)
def do_merge_mp4_m4a_files():
input_m4a_path = args.input
file = Path(input_m4a_path)
name = file.name.split(".")[0]
mp4_file = file.parent.joinpath(Path(name + ".mp4"))
m4a_file = Path(input_m4a_path)
target_file = file.parent.joinpath(Path(name + "_.mp4"))
do_merge_file(mp4_file, m4a_file, target_file)
m4a_file.unlink()
mp4_file.unlink()
print(f"output file ={target_file.absolute()}")
if __name__ == '__main__':
do_merge_mp4_m4a_files()
脚本很简单,它做了如下事情:
- 从命令行接受m4a文件路径参数
- 根据文件名推导出mp4文件名称
- 合并m4a和mp4文件,合并后的文件以
文件名_.mp4
命名。 - 删除两个源文件。
现在我们将脚本保存为script.py文件,将其复制到和源文件的同级目录,执行命令python script.py "【无损音质】一生所爱 - 卢冠廷.m4a"

OK,现在已经实现了音视频合并,但是使用起来感觉还不是很方便,将该功能加到右键菜单怎么样?只需要对着m4a文件右键,执行命令即可实现对两个文件的合并:

这就要使用到修改注册表相关的功能了。
2、右键m4a文件执行python脚本合并文件
首先,将python脚本保存到D:\system_script\m4a
,防止误删除python脚本导致脚本不可用。
接下来修改注册表,实现对着m4a文件右键后显示“合并同名的MP4文件”菜单,点击后执行script脚本。
Windows+R
组合键,输入regedit
,进入注册表管理页,打开路径:计算机\HKEY_CLASSES_ROOT\SystemFileAssociations\.m4a

如果.m4a目录下没有shell,则新建项shell。
在shell文件夹下新建项:MergeMp4File,选中后右侧修改默认值为“合并同名的MP4文件”,然后新建字符串值icon,值为python的路径,我的是D:\ProgramFiles\anaconda3\python.exe
,完成这一步骤后的注册表:

完成上面的步骤之后,对着m4a文件右键就能看到“合并同名的MP4文件”选项了,图标是python程序的样子。
接下来配置真正执行命令的动作。
在MergeMp4File下新增项command
,修改默认值为
D:\ProgramFiles\anaconda3\python.exe D:\system_script\m4a\script.py "%1"
做完这一步后的注册表:

三、运行效果

这样合并两个文件就方便多了。
END.
注意:本文归作者所有,未经作者允许,不得转载