【FFmpeg】做一个抖音/快手视频模板常用哪些功能

最近用ffmpeg做了一批视频模板供公司业务使用,结合shell脚本实现,常用的功能有如下几个:

  1. scale:缩放
  2. pad:填补
  3. drawtext:加文字
  4. ffprobe:获取视频一些属性

简单说几个可以实现的和未解决的:

1、scale之后出现尺寸与指定值不一致:需要设置setsar,前文有提到:​​​​​​https://blog.csdn.net/sayhelen/article/details/1242748142​​​​​​​2

 2、pad和scale一起使用时,需要注意顺序,pad默认会补黑边,怎么样让最终结果即实现缩放又实现补透明呢?

第一,要先设置scale,在设置pad

第二,pad可以设置补的颜色和透明度,即颜色可以设置为RRGGBBAA,把A设置为0(即透明度100%即可,设置什么颜色都不重要了)

如下代码,实现载入图片按合适尺寸,顺时针/逆时针转动旋转效果:

input="xxx.jpeg"
output="rotate.mp4"
background="xxx.mp4"

let T=2
let RT=${T}*2
ffmpeg -loop 1 -t "${T}s" -i ${input} -i ${background} \
-filter_complex "[0]scale=720:-1,setsar=1[vr];\
[vr]scale=w='iw-(hypot(iw,ih)-iw)/(${T}*25)*n':h=-1:eval=frame,\
pad='hypot(iw,ih)':ow:(iw-ow)/2:(ih-oh)/2:color=0x00000000,\
rotate=a=n*PI/6/(${T}*25):ow='hypot(iw,ih)':oh=ow:c=0x00000000,split[vzi][vzo];\
[vzo]reverse[vs];[vzi][vs]concat=n=2:a=0:v=1[v1];\
[1][v1]overlay=(W-w)/2:(H-h)/2:shortest=1" \
-r 25 -t ${RT} -y ${output}

3、drawtext设置字号、颜色、边框等常规样式及行间距等都可以,换行常见有2种解法:

1)用textfile在外部txt文件里换行

2)定义多个drawtext,各自计算y值

还有一种说加换行符,我一直没找到怎么录入这个符号能起作用。

未解决的问题是设置斜体效果,部分情况下可以实现加粗(不是通过字体,而是用textfile形式设置bold属性)

4、ffprobe可以打印视频属性,我常用它来获取视频时长和宽高信息,我自己写了一个getMediaInfo.sh脚本获取某个目录下全部视频文件的帧率、码率、时长和宽高值,全文如下:

#!/bin/sh
# 使用while循环读取$1文本
outfile="/Users/xxx/Desktop/"

function read_dir(){
    for file in `ls $1`
    do
        if [ -d $1"/"$file ] #注意此处之间⼀定要加上空格,否则会报错
        then
            read_dir $1"/"$file
        elif [ -n $file ]; then
            #判断是否读取到的数据是空行
            #提取fps, width, height等
            tmp_v=`echo $1"/"$file`
            fps=`ffprobe -v quiet -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 $tmp_v`
            vrate=`ffprobe -v quiet -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 $tmp_v`
            arate=`ffprobe -v quiet -select_streams a -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 $tmp_v`
            duration=`ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $tmp_v`
            size=`ffprobe -v quiet -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 $tmp_v`
            outcome="$file $fps $vrate $arate $duration $size"
            # outcome="$file $fps"fps" $vrate"kbps" $arate"kbps" $duration"s" $size"
            echo $outcome

        else
            echo "current file is null"
            # x=$x,"'"$tmp_v"'"
        fi
        echo $outcome >> ${outfile}/mediainfo.txt
    done
}

read_dir $outfile

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抖音自动剪辑视频需要使用抖音的API,并且需要一些编程经验。下面是一个简单的示例脚本,用于剪辑指定用户的视频: ```python import requests import json # 填写抖音开发者后台的应用信息 APP_ID = "填写你的APP_ID" APP_SECRET = "填写你的APP_SECRET" # 获取用户视频列表 def get_user_video_list(user_id): url = f"https://open.douyin.com/video/list/?user_id={user_id}&count=10" headers = {"Authorization": f"Bearer {get_access_token()}"} response = requests.get(url, headers=headers) data = json.loads(response.text) video_list = data.get("data").get("list") return video_list # 获取访问令牌 def get_access_token(): url = "https://open.douyin.com/oauth/access_token/" params = { "client_key": APP_ID, "client_secret": APP_SECRET, "grant_type": "client_credential" } response = requests.get(url, params=params) data = json.loads(response.text) access_token = data.get("access_token") return access_token # 剪辑视频 def clip_video(video_id, start_time, end_time): url = "https://open.douyin.com/video/create/" headers = {"Authorization": f"Bearer {get_access_token()}"} data = { "video_id": video_id, "start_time": start_time, "end_time": end_time } response = requests.post(url, headers=headers, data=data) data = json.loads(response.text) return data if __name__ == "__main__": # 剪辑第一条视频的前5秒 user_id = "填写用户ID" video_list = get_user_video_list(user_id) video_id = video_list[0].get("aweme_id") result = clip_video(video_id, 0, 5) print(result) ``` 上面的脚本使用了抖音的API获取指定用户的视频列表,然后剪辑了列表中的第一条视频的前5秒。可以根据需要修改脚本,以剪辑不同的视频段落,或者剪辑不同用户的视频。 ### 回答2: 抖音自动剪辑视频脚本可以使用Python语言编写,主要需要使用到OpenCV库和FFmpeg工具。 1. 导入所需库和模块: import cv2 import subprocess 2. 设置视频路径和剪辑参数: video_path = "输入视频路径" output_path = "输出视频路径" start_time = 10 #剪辑开始时间(单位:秒) end_time = 20 #剪辑结束时间(单位:秒) 3. 使用OpenCV读取视频文件: cap = cv2.VideoCapture(video_path) 4. 获取视频帧率和总帧数: fps = cap.get(cv2.CAP_PROP_FPS) total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) 5. 计算开始和结束帧数: start_frame = int(start_time * fps) end_frame = int(end_time * fps) 6. 设置输出视频的宽度和高度: width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 7. 使用FFmpeg剪辑视频: command = ["ffmpeg", "-i", video_path, "-ss", str(start_time), "-t", str(end_time-start_time), "-c:v", "libx264", "-c:a", "copy", "-vf", "scale={}:{}".format(width, height), output_path] subprocess.call(command) 8. 关闭视频文件和完成提示: cap.release() print("视频剪辑完成!") 这个脚本的功能是根据用户设定的开始时间和结束时间,将输入的抖音视频剪辑成指定长度的视频,并输出到指定的路径上。通过使用OpenCV读取视频文件,获取视频的帧率和总帧数,根据开始时间和结束时间计算需要剪辑的帧数,然后再使用FFmpeg工具进行视频剪辑的操作,最后关闭视频文件并给出完成提示。 ### 回答3: 抖音自动剪辑视频的脚本可以按照以下步骤进行设计: 1. 导入必要的库和模块。例如,使用Python的selenium库来模拟浏览器操作,使用OpenCV库来处理视频和图像。 2. 打开浏览器并访问抖音网站。使用selenium库打开浏览器并自动访问抖音网站。 3. 模拟用户登录。如果需要登录才能进行剪辑操作,可以使用selenium模拟用户的登录操作。 4. 搜索并选择要剪辑的视频。使用selenium在搜索框中输入关键词,然后选择一个合适的视频。 5. 下载视频。使用selenium定位到视频下载按钮,并点击下载按钮,将视频保存到本地。 6. 剪辑视频。使用OpenCV库加载下载的视频文件,然后根据需要进行剪辑和编辑。例如,可以裁剪视频的长度,添加特效、滤镜等。 7. 保存剪辑后的视频。将剪辑后的视频保存到指定位置。 8. 关闭浏览器。结束剪辑操作后,关闭浏览器。 需要注意的是,抖音网站可能会有一些反爬虫的机制,为了避免被封禁,可以在脚本中加入一些延时操作,模拟人的浏览行为,使得脚本更像是一个真实的用户在操作。另外,抖音的网页结构可能会有变化,所以需要定期更新和调整脚本中的元素定位和操作。 以上是一个简单的抖音自动剪辑视频的脚本设计思路,具体实现细节还需要根据实际情况来进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值