想咨询下关于视频剪辑合成的API接口有哪些比较好用的?比如,让配音和视频以及文字字幕自动合成一个新视频然后导出本地这样的功能
推荐使用FFMPEG:视频剪辑,视频音频合并、添加字幕,这些功能都可以满足,并且🈶大量的资料介绍
http://t.csdn.cn/S5NzL
http://t.csdn.cn/FKY5L
ffmpeg xvid, x264,
推荐ffmpeg
http://www.ffmpeg.org/about.html
FFMPEG是音视频制作的首选
可以参考我这篇http://t.csdn.cn/EbY2l
给封装了些ffmpeg视频剪辑的基本功能函数,配置上ffmpeg就能指定调用,其余的功能可以自行查找ffmpeg函数用法类比封装调用
# coding=utf-8
import ffmpeg
import getpass
import subprocess
import matplotlib.pyplot as plt
import cv2
import numpy as np
import os
#ffmpeg相关的音视频操作指令函数
#程序列表:
'''
comband_av 音频视频合并
comband_aa 音频合并
pick_v 视频静音
accelerate 视频倍速
cut_v 视频剪切
au_fade_out 音频淡入淡出
cut_a 剪切音频
comband_ad 音频延时
comb_aa 音频拼接
part_silent_v 音频某一段静音
part_silent_au 音频某一段静音
awav_mp3 wav转mp3
logo_add 视频添加logo
screen_rec 录屏功能,还未完成!
ch_vv 转mp4
comband_vv 合并视频
cyber 非功能函数
process_cyber 添加cyberpunk滤镜
narrow_v 视频缩放
procv_pics (视频转图片)视频抽帧,提取图片
procpics_v 图片转视频
oldfilm_process 旧照片滤镜
slice 画面裁剪
SE_colorful 色彩变幻滤镜
SE_shinning 闪烁滤镜
SE_fadein 褪色滤镜
SE_black 黑白滤镜
SE_sharp 锐化滤镜
SE_Helo 光晕滤镜
SE_blur 渐晕滤镜
SE_shake 抖动滤镜
SE_relief
SE_noise 噪声滤镜
SE_fliplr 左右翻转
SE_flipud 上下翻转
SE_mirror 镜像
text 视频添加文本
text_file 视频批量添加文本
text_new 视频批量添加新字体文字
text_newfile 视频批量添加新字体文字
superposition 视频画面中添加视频
GIF_v 视频转gif
avi_mp4 avi转mp4
v_compress
au_GIFMP4_out gif转mp4
au_MP4GIF_out mp4转gif
'''
def comband_av(AUDIO, VIDEO): #音频视频合并
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -i {AUDIO} -i {VIDEO} comband_va.mp4 -y"
subprocess.call(cmd, shell=True)
def comband_aa(AUDIO1, AUDIO2): #音频合并
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -i {AUDIO1} -i {AUDIO2} -filter_complex amix=inputs=2:duration=first:dropout_transition=3 out.wav"
subprocess.call(cmd, shell=True)
# inputs=2:两个输入
# duration=first:输出长度为第一个输入的长度
# dropout_transition=3:声音淡出时间为3秒
def pick_v(VIDEO): #视频静音
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -i {VIDEO} -vcodec copy -an Silent_film.mp4 -y"
subprocess.call(cmd, shell=True)
def accelerate(VIDEO,num): #视频倍速
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -i {VIDEO} -filter_complex [0:v]setpts={1/num}*PTS[v];[0:a]atempo={num}[a] -map [v] -map [a] out_ac.mp4 -y"
# -filter_complex 复杂滤镜,[0:v]表示第一个(文件索引号是0)文件的视频作为输入。setpts=0.5*PTS表示每帧视频的pts时间戳都乘0.5 ,也就是差少一半。[v]表示输出的别名。音频同理就不详述了。
# map 可用于处理复杂输出,如可以将指定的多路流输出到一个输出文件,也可以指定输出到多个文件。"[v]" 复杂滤镜输出的别名作为输出文件的一路流。上面 map的用法是将复杂滤镜输出的视频和音频输出到指定文件中。
subprocess.call(cmd, shell=True)
def cut_v(video, ts, te): #视频剪切
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/' # 默认图片库为桌面命名为pics的文件夹
os.chdir(str_txt)
cmd = f"ffmpeg -i {video} -ss {ts} -codec copy -t {te} output1.mp4 -y"
subprocess.call(cmd, shell=True)
def logo_add(video,logo,position): #添加logo
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
if position=="left_up":
cmd = f"ffmpeg -i {video} -i {logo} -filter_complex overlay output.mp4 -y" #注意文件名,对比视频转图片,类似
elif position=="left_down":
cmd = f"ffmpeg -i {video} -i {logo} -filter_complex overlay=0:H-h output.mp4 -y"
elif position=="right_down":
cmd = f"ffmpeg -i {video} -i {logo} -filter_complex overlay=W-w:H-houtput.mp4 -y"
else:
cmd = f"ffmpeg -i {video} -i {logo} -filter_complex overlay=W-w output.mp4 -y"
subprocess.call(cmd, shell=True)
def screen_rec(): #录屏,未完成!
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
#cmd1=f"ffmpeg -list_devices true -f dshow -i dummy"
cmd = f"ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1024x768 -show_region 1 -i desktop Screen_Record.mp4 -y"
#cmd = f"ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1920*1080 -show_region 1 -i desktop output.mkv -y"
subprocess.call(cmd, shell=True)
def ch_vv(VIDEO): #
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -i {VIDEO} -vcodec copy -an Vtrailer.mp4 -y"
subprocess.call(cmd, shell=True)
def comband_vv(file): #合并视频
os.getcwd()
user_name = getpass.getuser()
str_txt = 'C:/Users/' + user_name + '/Desktop/'
os.chdir(str_txt)
cmd = f"ffmpeg -f concat -i {file} -c copy comband_vv.mp4 -y"
subprocess.call(cmd, shell=True)
def cyber(image):
# 反转色相
image_hls = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)
image_hls = np.asarray(image_hls, np.float32)
hue = image_hls[:, :, 0]
hue[hue < 90] = 180 - hue[hue < 90]
image_hls[:, :, 0] = hue
image_hls = np.asarray(image_hls, np.uint8)
image = cv2.cvtColor(image_hls, cv2.COLOR_HLS2BGR)
image_lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
image_lab = np.asarray(image_lab, np.float32)
# 提高像素亮度,让亮的地方更亮
light_gamma_high = np.power(image_lab[:, :, 0], 0.8)
light_gamma_high = np.asarray(light_gamma_high / np.ma...