要分离阿里云 OSS 上上传的 MP4 视频中的音频与视频,你可以借助阿里云媒体处理服务(MPS)来完成,也可以先将视频从 OSS 下载到本地,然后使用本地的视频处理工具进行分离。以下分别介绍这两种方法:
方法一:使用阿里云媒体处理服务(MPS)步骤开通服务:在阿里云控制台开通媒体处理服务(MPS)。安装 SDK:安装阿里云 Python SDK 及其相关依赖。pip install aliyun-python-sdk-core-v3 aliyun-python-sdk-mts编写代码:通过调用 MPS 的接口来分离视频和音频。示例代码
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkmts.request.v20140618.SubmitMediaProcessJobRequest import SubmitMediaProcessJobRequest import json # 配置阿里云账号信息 access_key_id = 'your_access_key_id' access_key_secret = 'your_access_key_secret' region_id = 'your_region_id' # 例如:cn-hangzhou # 创建 AcsClient 实例 client = AcsClient(access_key_id, access_key_secret, region_id) def separate_audio_video(oss_bucket, oss_object, output_bucket): # 构建请求 request = SubmitMediaProcessJobRequest() request.set_accept_format('json') # 输入视频信息 input_info = { "Bucket": oss_bucket, "Location": "oss-" + region_id, "Object": oss_object } # 输出视频配置 output_video = { "OutputObject": oss_object.replace('.mp4', '_video.mp4'), "Container": { "Format": "mp4" }, "Video": { "Codec": "H.264", "Profile": "High", "Bitrate": "1000", "Width": "1280", "Height": "720", "Fps": "25" }, "Audio": { "Codec": "none" # 不保留音频 } } # 输出音频配置 output_audio = { "OutputObject": oss_object.replace('.mp4', '_audio.mp3'), "Container": { "Format": "mp3" }, "Video": { "Codec": "none" # 不保留视频 }, "Audio": { "Codec": "AAC", "Bitrate": "128", "Channels": "2", "Samplerate": "44100" } } # 输出信息列表 output_list = [output_video, output_audio] # 设置请求参数 request.set_Input(json.dumps(input_info)) request.set_OutputBucket(output_bucket) request.set_OutputLocation("oss-" + region_id) request.set_Outputs(json.dumps(output_list)) try: # 发起请求 response = client.do_action_with_exception(request) print(f"响应结果: {response.decode('utf-8')}") except (ClientException, ServerException) as e: print(f"请求出错: {e}") # 使用示例 oss_bucket = 'your_oss_bucket' oss_object = 'your_video.mp4' output_bucket = 'your_output_bucket' separate_audio_video(oss_bucket, oss_object, output_bucket)代码解释配置信息:你需要将 access_key_id、access_key_secret、region_id、oss_bucket、oss_object 和 output_bucket 替换为你自己的实际信息。构建请求:使用 SubmitMediaProcessJobRequest 构建一个媒体处理任务请求。设置输入输出:设置输入视频的 OSS 信息,以及输出视频和音频的配置信息。发起请求:调用 client.do_action_with_exception 发起请求并处理响应。方法二:下载到本地处理步骤安装依赖:安装 oss2 库用于从 OSS 下载文件,安装 moviepy 库用于分离音频和视频。
pip install oss2 moviepy编写代码:从 OSS 下载视频到本地,然后使用 moviepy 进行分离。示例代码
import oss2 from moviepy.editor import VideoFileClip # 配置阿里云 OSS 信息 auth = oss2.Auth('your_access_key_id', 'your_access_key_secret') bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your_oss_bucket') # 下载视频到本地 oss_object = 'your_video.mp4' local_file = 'local_video.mp4' bucket.get_object_to_file(oss_object, local_file) # 分离音频和视频 video = VideoFileClip(local_file) audio = video.audio audio.write_audiofile('extracted_audio.mp3') video_without_audio = video.without_audio() video_without_audio.write_videofile('extracted_video.mp4', codec='libx264') # 关闭视频剪辑对象 video.close() audio.close()代码解释配置 OSS 信息:使用 oss2.Auth 和 oss2.Bucket 配置 OSS 认证信息和存储桶。下载视频:使用 bucket.get_object_to_file 方法将视频从 OSS 下载到本地。分离音频和视频:使用 moviepy 的 VideoFileClip 加载视频,提取音频并保存为 MP3 文件,保存无音频的视频为 MP4 文件。关闭对象:使用 close 方法关闭视频和音频剪辑对象,释放资源。
以上两种方法都可以实现从阿里云 OSS 上的 MP4 视频中分离音频和视频,你可以根据实际需求选择合适的方法。
网友回复