Python 帶你高效創作短視訊,視訊創作秀到飛起!!!
近兩年,抖音、快手將短視訊推到風口浪尖上,要生產出高質量的視訊,離不開視訊剪輯這一環節;在全民剪片浪潮中,大眾使用最多的剪輯軟體如:Pr、FCPX、剪印、Vue 等。
視訊剪輯過程中,Python 一些比較實用的技能,幫助我們更快地進行短視訊的創作。
1、提取背景音樂和修改音量
先從抖音上下載視訊檔案,然後利用 moviepy 依賴庫提取到背景音樂。
-
defget_audio_from_video(video_path):
-
"""
-
從視訊中提取音訊
-
:paramvideo:
-
:return:
-
"""
-
file_path='./source/'+gene_random()+'.wav'
-
video=VideoFileClip(video_path)
-
audio=video.audio
-
audio.write_audiofile(file_path)
-
returnfile_path
一個短視訊中,可能包含多個背景音樂,需要對背景音樂的音量進行調整。
-
defhandle_bgm(bgm_path,coefficient):
-
music=AudioFileClip(bgm_path)
-
#音量調整為原來音量的倍數
-
out_music=music.fx(afx.volumex,coefficient).fx(afx.audio_fadein,0.5).fx(
-
afx.audio_fadeout,1)
-
#儲存背景音樂
-
out_music.write_audiofile('./source/output.wav')
2、變聲
變聲也是短視訊創作中比較實用的一個技能,有三種方式可以實現。
-
使用 AU 做變調處理
-
修改呼叫百度雲 API
-
使用 librosa 依賴庫。
-
importlibrosa
-
source="./source/source.wav"
-
#載入背景音樂
-
y,sr=librosa.load(source)
-
#修改
-
librosa.effects.pitch_shift(y,sr,n_steps=6)
-
y=shrinkstep(10,y,sr)
-
#生成新的背景音樂檔案
-
outputpath="./source/result.wav"
-
librosa.output.write_wav(outputpath,y,sr)
3、視訊轉場
視訊間加入轉場使視訊播放更加流暢,Python 通過下面 7 個步驟實現視訊轉場。
-
分離 2 段視訊的視訊 Clip、音訊 Clip
-
統一視訊的解析度
-
分別對視訊的開頭和結尾加入轉場效果,比如淡入淡出效果
-
合併 2 段視訊
-
合併 2 段音訊
-
設定音訊檔案
-
儲存視訊檔案
-
deftransitions_animation(path_video1,path_video2):
-
"""
-
兩段視訊中轉場動畫(以淡入淡出為例)
-
注意:保證視訊拍攝幀率一致
-
:paramvideo1:
-
:paramvideo2:
-
:return:
-
"""
-
#獲取視訊時長
-
clip_video1=VideoFileClip(path_video1)
-
duration_video1=clip_video1.duration
-
#獲取視訊音訊
-
path_audio1=get_audio_from_video(path_video1)
-
path_audio2=get_audio_from_video(path_video2)
-
audio_video1=AudioFileClip(path_audio1)
-
audio_video2=AudioFileClip(path_audio2)
-
clip_video2=VideoFileClip(path_video2)
-
duration_video2=clip_video2.duration
-
print(f'兩段視訊的時長分別為:{duration_video1},{duration_video2}')
-
#統一視訊解析度
-
w,h,fps=clip_video1.w,clip_video1.h,clip_video1.fps
-
clip_video2_new=clip_video2.resize((w,h))
-
#轉場時長,預設2s
-
transitions_time=2
-
#第一段視訊執行淡出效果
-
subVideo1_part1=clip_video1.subclip(0,duration_video1-2)
-
subVideo1_part2=clip_video1.subclip(duration_video1-2).fadeout(2,(1,1,1))
-
#第二段視訊執行淡入效果
-
subVideo2_part1=clip_video2_new.subclip(0,3).fadein(3,(1,1,1))
-
subVideo2_part2=clip_video2_new.subclip(3)
-
#合併4段視訊
-
result_video=concatenate_videoclips([subVideo1_part1,subVideo1_part2,subVideo2_part1,subVideo2_part2])
-
#合併音訊
-
result_audio=concatenate_audioclips([audio_video1,audio_video2])
-
#視訊設定音訊檔案
-
final_clip=result_video.set_audio(result_audio)
-
# pass 寫入視訊檔案
4、坡度變速
為了使短視訊更加酷炫,很多後期高手都會對視訊進行了坡度變速操作,使得原本枯燥無味的視訊變得生動很多。
常用的方式是:先慢速播放,然後恢復正常速度,中間加過渡音效。
-
defchange_video_speed(video_path,speed,start,end):
-
"""
-
改變視訊的速度
-
[MoviePyclip相關的重要api](https://juejin.im/post/5d1c4318f265da1ba9159912)
-
:paramvideo_path:視訊路徑
-
:paramspeed:速度
-
:paramstart:開始時間
-
:paramend:結束時間
-
:return:
-
"""
-
video=VideoFileClip(video_path)
-
#速度變換
-
part1=video.fl_time(lambdat:speed*t,apply_to=['mask','video','audio']).set_start(start).set_end(
-
end/speed)
-
#餘下時長恢復速度
-
part2=video.subclip(end)
-
#合成視訊
-
result_video=concatenate_videoclips([part1,part2])
-
result_path='./source/result.mp4'
-
result_video.write_videofile(result_path)
5、鬼畜視訊
鬼畜視訊來源於 B 站,在抖音上很多搞笑類視訊剪輯都會使用到鬼畜處理,包含:畫面幀重複、畫面座標軸對映等。
使用 Python 實現鬼畜視訊也很簡單。
-
defghost_video(video_path,repeat_time,location):
-
"""
-
生成鬼畜視訊
-
:paramvideo_path:視訊路徑
-
:paramrepeat_time:重複次數
-
:paramlocation:處理位置
-
:return:
-
"""
-
video=VideoFileClip(video_path)
-
#視訊前部分
-
part1=video.subclip(0,location)
-
#視訊目標部分,進行重複操作
-
target=video.subclip(location,location+1)
-
#視訊後部分
-
part2=video.subclip(location+repeat_time)
-
targets=[]
-
#分別加入3個部分
-
targets.append(part1)
-
for_inrange(repeat_time):
-
targets.append(target)
-
targets.append(part2)
-
#合成、生成視訊
-
pass
6、字幕水印
利用 ImageClip 和 TextClip 可以很方便的加入圖片水印和視訊字幕。
-
#加入圖片水印
-
#包含:水印的時長、位置、透明度等
-
logo=(ImageClip("./source/logo.png")
-
.set_duration(video.duration)
-
.resize(height=50)
-
.margin(right=8,top=8,opacity=1)
-
.set_pos(("right","top")))
-
final=CompositeVideoClip([video,logo])
-
#加入文字字幕
-
clip=VideoFileClip(video_path)
-
#字幕,文字內容、位置、展示時長
-
texpClip=TextClip(subtitle,fontsize=30,color='white').set_pos('bottom').set_duration(duration)
-
video=CompositeVideoClip([clip,texpClip.set_start(start)])
7、轉碼
需要說明的是,如果使用 AE 製作動畫視訊,最後的視訊檔案會非常大,使用 ffmpeg 依賴庫可以快速進行轉碼和壓縮檔案。
結合 alias 使用,可以更加方便地進行視訊剪輯。
-
#快速轉碼壓縮
-
aliaszh='ffmpeg-isource.mov-qscale0output.mp4'
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯絡我們以作處理
想要獲取更多Python學習資料可以加QQ:2955637827私聊或加Q群630390733大家一起來學習討論吧!