要分离阿里云 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 视频中分离音频和视频,你可以根据实际需求选择合适的方法。
网友回复


