先安装 ffmpeg,具体从官网可以查到,https://ffmpeg.org,按流程走。
转换代码如下,可以任意选择格式导出
import subprocess
import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpeg 命令ffmpeg_cmd = ['ffmpeg', # FFmpeg 执行文件'-i', input_audio_path, # 输入音频 M4S 文件路径'-i', input_video_path, # 输入视频 M4S 文件路径'-c', 'copy', # 使用 copy 编码方式,保持原始编码output_mp4_path # 输出 MP4 文件路径]# 执行 FFmpeg 命令subprocess.run(ffmpeg_cmd)if __name__ == "__main__":# 首发# 输入的音频和视频 M4S 文件路径input_audio_m4s_path = "/Users/xxx/Movies/bilibili/948126882/948126882_nb3-1-30280.m4s"input_video_m4s_path = "/Users/xxx/Movies/bilibili/948126882/948126882-1-30112.m4s"## 输出的合并后的 MP4 文件路径output_merged_mp4_path = "/Users/xxx/Movies/bilibili/948126882/output_merged.mp4"# 确保输出文件夹存在os.makedirs(os.path.dirname(output_merged_mp4_path), exist_ok=True)# 调用函数进行合并merge_audio_video(input_audio_m4s_path, input_video_m4s_path, output_merged_mp4_path)print("合并完成!")
注意,b站导出的m4s文件有时候会出现报错, Invalid data found when processing input
https://www.bilibili.com/read/cv14802750/ 可以参考这篇文章。
mac多说一句,直接用sublime text读取m4s文件,打开是数字编码,删除前九对30,删到00,保存就可以转了。
mac如果直接用文本格式读取,即使手动删除前9个0还是不行。