Mass开放平台发布视频生成模型CogVideoX,开放API调用

大模型智能语音交互机器学习

最近真是每天都有大新闻,接二连三的大模型开源,文生视频上线。今天智谱发布了CogVideoX,主打特色,国内最早可以通过API即可完成文/图生视频的模型之一 。一般生成视频需要的时间还挺久的,并且api比较适合接入到自己搭的应用中,所以仔细测试了下CogVideoX是咋玩的。第二部分给大家分享一些视频生成的写prompt经验,最后提供一个搭建demo的代码,可以快速搭建一个本地demo试玩~

一、怎么用?

用法也非常简单,跟调用llm一致,需要注意需要将api_key 配置成自己的key,api key在智谱的mass开放平台申请,地址为:https://bigmodel.cn/ 。注册即送几百万token,还不错~ 申请完token,安装官方包即可调用 pip install zhipuai


        
          
from zhipuai import ZhipuAI  
client = ZhipuAI(api_key='')   # api\_key 配置成你自己的key  
response = client.videos.generations( model="cogvideo",prompt="一个高清的指头上,一只可爱的迷你熊猫在指头上行走,像蚂蚁一样小,微缩小熊猫")  
print(response)  
  
# VideoObject(id='154817189478976948862809944839246995', model='cogvideo', video\_result=None, task\_status='PROCESSING', request\_id='8862809944839246992')  

      

图片生成视频只需要在参数中同时传入image_url,例如:


        
          
from zhipuai import ZhipuAI  
client = ZhipuAI(api_key='')    
response = client.videos.generations( model="cogvideo",prompt="一架飞机(在空中旋转)",  
                                    image_url='https://img2.baidu.com/it/u=377943181,2345396925&fm=253&fmt=auto&app=120&f=JPEG?w=750&h=500')  
print(response)  

      

调用接口之后返回的是一个VideoObject对象 VideoObject(id='154817189478976948862809944839246995', model='cogvideo', video_result=None, task_status='PROCESSING', request_id='8862809944839246992')。有一个属性,task_status,有3个状态,PROCESSING(处理中),SUCCESS(成功),FAIL(失败)。目前测试了很多,基本没有遇到过失败的。

根据返回的id,可以间歇性的去查询视频有没有生成完成。


        
          
response = client.videos.retrieve_videos_result(id="154817189478976948862814652123731589")  
print(response)  

      

如果是完成了,返回的对象video_result中会带有视频地址了VideoObject(id=None, model='cogvideo', video_result=[VideoResult(url='https://sfile.chatglm.cn/testpath/video/6abb6a0b-aea1-5360-80ea-5732d9752db1_0.mp4')], task_status='SUCCESS', request_id='8862814136727669502'),并且task_status的状态会变成'success'。

二、怎么问?

API整体用起来是比较简单的,但是prompt怎么写呢?

一般提示词技巧中,会让这样写:提⽰词(Prompt)=(镜头语⾔+光影)+主体(主体描述)+主体运动+场景(场景描述)+(氛围)

一眼懵逼,但是其实很简单,每个名词单独举例解释一下:

  1. (镜头语言+光影):主要描述摄影或视频拍摄时使用的镜头技巧和光影效果。

例如:“拉镜头+明亮的自然光”。也就是告诉模型需要展现出摄像机从近景逐渐拉远到远景,同时场景中的光线是自然且明亮的。

  1. 主体(主体描述):这里指的是场景中的主要角色或物体,以及对其的具体描述。

例如:“一位年轻女孩(穿着粉色连衣裙,头戴花环)”。

  1. 主体运动:描述主体在场景中的动作或运动状态。

例如:“快乐地奔跑在田野上”。主要描绘了主体的动态行为。

  1. 场景(场景描述):描述了故事或拍摄发生的环境和背景。

例如:“一片开满野花的草地(阳光透过树叶洒落,微风吹拂着花草)”。

  1. (氛围):描述了整个场景或画面的情感和气氛。

例如:“一种宁静与和谐的氛围”。这表达了场景中平和愉快的感觉。

按照基本公式我们可以写一个例子出来了,比如说

(特写镜头+明亮清晰的光线)+一个高清的人类指头(细节清晰可见)+一只迷你熊猫在指头上缓慢行走+人类手指的局部特写(指纹和皮肤纹理清晰,小熊猫如蚂蚁般大小在其上行走)+(一种新奇而有趣的氛围) 让模型可以生成一个在手指头上行走的小熊猫的特写镜头,让cogvideo生成视频如下:

又比如可以简单的修改,我们把主题改成玫瑰花,体现一个在雨中摇曳的玫瑰,完整提示词为(推镜头+雨后的清新空气与微光)+一朵沾满雨滴的玫瑰(花瓣更加鲜艳,绿叶更加翠绿)+在微风中轻轻摇曳+雨后的花园(四周是湿润的土壤和翠绿的植物)+(一种清新与生机盎然的氛围),让api生成新的视频如下:

图生视频的prompt写法会容易很多,因为图片的主体,背景都是固定的,只需要描述主体或者背景的变化,万能公式变成了 提⽰词(Prompt)=主体+运动,背景+运动 。这里测试发现,单独调试主体,或者背景的效果,比同时调整2者会更好一些,并且动物、植物、建筑、动漫人物,都生成的不错。

例如,我们输入一个飞机的图片,prompt为一架飞机(在空中缓缓下降,靠近山脊),这就是描述主体的运动,我们可以得到如下的生成结果:

三、搭建一个本地可视化Demo

picture.image

使用gradio搭建,仅需填充api_key为自己的key,即可运行。内置了一些examples,基本都是按照第二节的公式编写,比较无脑,但是生成的视频基本不会有太大的问题~

python代码如下:


        
          
import gradio as gr  
import time  
from zhipuai import ZhipuAI  
import requests  
  
client = ZhipuAI(api_key='') # api\_key 配置成你自己的key  
  
  
def cogvideo\_inference(prompt):  
    print(prompt)  
    response = client.videos.generations(model="cogvideo", prompt=prompt)  
    task_id = response.id  
    response = client.videos.retrieve_videos_result(id=task_id)  
    print(response)  
    task_status = response.task_status  
    get_cnt = 0  
    result_response = response  
    while task_status == 'PROCESSING' and get_cnt <= 40:  
        result_response = client.videos.retrieve_videos_result(id=task_id)  
        print(result_response)  
        task_status = result_response.task_status  
        if task_status == 'SUCCESS':  
            break  
        time.sleep(30)  
        get_cnt += 1  
  
    if result_response.video_result is not None:  
        url = result_response.video_result[0].url  
        file_name = url.split('/')[-1]  
        res = requests.get(url, stream=True)  
        with open(file_name, 'wb') as f1:  
            for chunk in res.iter_content(chunk_size=102400):  
                f1.write(chunk)  
        return file_name  
    else:  
        return None  
  
  
def main():  
    with gr.Blocks() as demo:  
        with gr.Row():  
            with gr.Column():  
                gr.HTML(  
                    """  
                    <h1 style='text-align: center'>  
                   CogVideoX 文生视频Demo  
                    </h1>  
                    """  
                )  
                gr.HTML(  
                    """  
                    <h3 style='text-align: center'>  
  
                    智谱AI token注册申请!  
                    <a href='https://bigmodel.cn/' target='\_blank'>智谱开放平台</a>  
                    </h3>  
                    """  
                )  
  
        with gr.Row():  
            with gr.Column():  
                prompt_text = gr.Textbox(  
                    show_label=False,  
                    placeholder="Enter prompt text here",  
                    lines=4)  
                submit_button = gr.Button("Run Inference")  
  
            with gr.Column():  
                output_video = gr.Video()  
  
        submit_button.click(  
            fn=cogvideo_inference,  
            inputs=[prompt_text],  
            outputs=output_video  
        )  
        gr.Examples(  
            examples=[  
                [" (推镜头+黄昏的柔和光线)+一个孤独的旅人(身着风衣,手持行李箱)+缓缓走向远方的火车站+一个空旷的火车站台(落日的余晖洒满整个站台,铁轨延伸到视线的尽头)+(一种离别与期待的交织氛围)"],  
                ["(特写镜头+明亮清晰的光线)+一个高清的人类指头(细节清晰可见)+一只迷你斑马在指头上缓慢行走+人类手指的局部特写(指纹和皮肤纹理清晰,小斑马如蚂蚁般大小在其上行走)+(一种新奇而有趣的氛围)"],  
                ["(拉镜头+晨光熹微)+一位晨跑的跑者(身着运动装备,精神饱满)+在公园小径上稳步前行+清晨的公园(鸟语花香,晨光透过树叶洒落)+(一种活力与健康并存的氛围)"],  
                ["(旋转镜头+黄昏的暖色调光线)+一对恋人(相依相偎在海边)+静静地欣赏着落日余晖+海边的沙滩(海浪轻拍岸边,夕阳渐渐下沉)+(一种浪漫与宁静交融的氛围)"],  
                ["(特写镜头+明亮的室内光线)+一杯冒着热气的咖啡(旁边摆放着一本翻开的书)+咖啡杯中热气升腾,散发出诱人香气+安静的咖啡馆角落(窗外是繁忙的街道,窗内是静谧的阅读空间)+(一种悠闲与专注并存的氛围)"],  
                ["(移镜头+蓝天白云下的自然光线)+一群孩子在草地上玩耍(欢笑声此起彼伏)+追逐嬉戏,快乐无比+开阔的绿草地(远处有小山和树林作为背景)+(一种欢乐与自由的氛围)"],  
                ["(推镜头+雨后的清新空气与微光)+一朵沾满雨滴的玫瑰(花瓣更加鲜艳,绿叶更加翠绿)+在微风中轻轻摇曳+雨后的花园(四周是湿润的土壤和翠绿的植物)+(一种清新与生机盎然的氛围)"],  
            ],  
            fn=cogvideo_inference,  
            inputs=[prompt_text],  
            outputs=[output_video],  
            cache_examples=False,  
        )  
  
    demo.launch(debug=True)  
  
  
if __name__ == "\_\_main\_\_":  
    main()  
  

      
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
DevOps 在字节移动研发中的探索和实践
在日益复杂的APP工程架构下,如何保证APP能高效开发,保障团队效能和工程质量?本次将结合字节内部应用的事件案例,介绍DevOps团队对移动研发效能建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论