+
77
-

回答

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

网友回复

我知道答案,我要回答