Python脚本:合并mp4和m4a文件

Published on 2025-05-23 11:28 in 分类: 随笔 with 狂盗一枝梅
分类: 随笔

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

一、视频下载

Bilibili-Evolved脚本生效以后,就可以下载B站视频了:

image-20250523095031800

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

image-20250523095136484

点击后浏览器会直接下载

image-20250523103047671

二、音视频合并

音视频合并需要使用到工具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()

脚本很简单,它做了如下事情:

  1. 从命令行接受m4a文件路径参数
  2. 根据文件名推导出mp4文件名称
  3. 合并m4a和mp4文件,合并后的文件以文件名_.mp4命名。
  4. 删除两个源文件。

现在我们将脚本保存为script.py文件,将其复制到和源文件的同级目录,执行命令python script.py "【无损音质】一生所爱 - 卢冠廷.m4a"

动画40_resize

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

动画41_resize

这就要使用到修改注册表相关的功能了。

2、右键m4a文件执行python脚本合并文件

首先,将python脚本保存到D:\system_script\m4a,防止误删除python脚本导致脚本不可用。

接下来修改注册表,实现对着m4a文件右键后显示“合并同名的MP4文件”菜单,点击后执行script脚本。

Windows+R组合键,输入regedit,进入注册表管理页,打开路径:计算机\HKEY_CLASSES_ROOT\SystemFileAssociations\.m4a

image-20250523111859820

如果.m4a目录下没有shell,则新建项shell。

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

image-20250523112244352

完成上面的步骤之后,对着m4a文件右键就能看到“合并同名的MP4文件”选项了,图标是python程序的样子。

接下来配置真正执行命令的动作。

在MergeMp4File下新增项command,修改默认值为

D:\ProgramFiles\anaconda3\python.exe D:\system_script\m4a\script.py "%1"

做完这一步后的注册表:

image-20250523112554663

三、运行效果

动画41_resize

这样合并两个文件就方便多了。



END.


#python
复制 复制成功