1. 程式人生 > 實用技巧 >Python 帶你高效創作短視訊,視訊創作秀到飛起!!!

Python 帶你高效創作短視訊,視訊創作秀到飛起!!!

近兩年,抖音、快手將短視訊推到風口浪尖上,要生產出高質量的視訊,離不開視訊剪輯這一環節;在全民剪片浪潮中,大眾使用最多的剪輯軟體如:Pr、FCPX、剪印、Vue 等。

視訊剪輯過程中,Python 一些比較實用的技能,幫助我們更快地進行短視訊的創作。

1、提取背景音樂和修改音量

先從抖音上下載視訊檔案,然後利用 moviepy 依賴庫提取到背景音樂。


  1. defget_audio_from_video(video_path):

  2. """

  3. 從視訊中提取音訊

  4. :paramvideo:

  5. :return:

  6. """

  7. file_path='./source/'+gene_random()+'.wav'

  8. video=VideoFileClip(video_path)

  9. audio=video.audio

  10. audio.write_audiofile(file_path)

  11. returnfile_path

一個短視訊中,可能包含多個背景音樂,需要對背景音樂的音量進行調整。


  1. defhandle_bgm(bgm_path,coefficient):

  2. music=AudioFileClip(bgm_path)

  3. #音量調整為原來音量的倍數

  4. out_music=music.fx(afx.volumex,coefficient).fx(afx.audio_fadein,0.5).fx(

  5. afx.audio_fadeout,1)

  6. #儲存背景音樂

  7. out_music.write_audiofile('./source/output.wav')

2、變聲

變聲也是短視訊創作中比較實用的一個技能,有三種方式可以實現。

  • 使用 AU 做變調處理

  • 修改呼叫百度雲 API

  • 使用 librosa 依賴庫。


  1. importlibrosa

  2. source="./source/source.wav"

  3. #載入背景音樂

  4. y,sr=librosa.load(source)

  5. #修改

  6. librosa.effects.pitch_shift(y,sr,n_steps=6)

  7. y=shrinkstep(10,y,sr)

  8. #生成新的背景音樂檔案

  9. outputpath="./source/result.wav"

  10. librosa.output.write_wav(outputpath,y,sr)

3、視訊轉場

視訊間加入轉場使視訊播放更加流暢,Python 通過下面 7 個步驟實現視訊轉場。

  • 分離 2 段視訊的視訊 Clip、音訊 Clip

  • 統一視訊的解析度

  • 分別對視訊的開頭和結尾加入轉場效果,比如淡入淡出效果

  • 合併 2 段視訊

  • 合併 2 段音訊

  • 設定音訊檔案

  • 儲存視訊檔案


  1. deftransitions_animation(path_video1,path_video2):

  2. """

  3. 兩段視訊中轉場動畫(以淡入淡出為例)

  4. 注意:保證視訊拍攝幀率一致

  5. :paramvideo1:

  6. :paramvideo2:

  7. :return:

  8. """

  9. #獲取視訊時長

  10. clip_video1=VideoFileClip(path_video1)

  11. duration_video1=clip_video1.duration

  12. #獲取視訊音訊

  13. path_audio1=get_audio_from_video(path_video1)

  14. path_audio2=get_audio_from_video(path_video2)

  15. audio_video1=AudioFileClip(path_audio1)

  16. audio_video2=AudioFileClip(path_audio2)

  17. clip_video2=VideoFileClip(path_video2)

  18. duration_video2=clip_video2.duration

  19. print(f'兩段視訊的時長分別為:{duration_video1},{duration_video2}')

  20. #統一視訊解析度

  21. w,h,fps=clip_video1.w,clip_video1.h,clip_video1.fps

  22. clip_video2_new=clip_video2.resize((w,h))

  23. #轉場時長,預設2s

  24. transitions_time=2

  25. #第一段視訊執行淡出效果

  26. subVideo1_part1=clip_video1.subclip(0,duration_video1-2)

  27. subVideo1_part2=clip_video1.subclip(duration_video1-2).fadeout(2,(1,1,1))

  28. #第二段視訊執行淡入效果

  29. subVideo2_part1=clip_video2_new.subclip(0,3).fadein(3,(1,1,1))

  30. subVideo2_part2=clip_video2_new.subclip(3)

  31. #合併4段視訊

  32. result_video=concatenate_videoclips([subVideo1_part1,subVideo1_part2,subVideo2_part1,subVideo2_part2])

  33. #合併音訊

  34. result_audio=concatenate_audioclips([audio_video1,audio_video2])

  35. #視訊設定音訊檔案

  36. final_clip=result_video.set_audio(result_audio)

  37. # pass 寫入視訊檔案

4、坡度變速

為了使短視訊更加酷炫,很多後期高手都會對視訊進行了坡度變速操作,使得原本枯燥無味的視訊變得生動很多。

常用的方式是:先慢速播放,然後恢復正常速度,中間加過渡音效。


  1. defchange_video_speed(video_path,speed,start,end):

  2. """

  3. 改變視訊的速度

  4. [MoviePyclip相關的重要api](https://juejin.im/post/5d1c4318f265da1ba9159912)

  5. :paramvideo_path:視訊路徑

  6. :paramspeed:速度

  7. :paramstart:開始時間

  8. :paramend:結束時間

  9. :return:

  10. """

  11. video=VideoFileClip(video_path)

  12. #速度變換

  13. part1=video.fl_time(lambdat:speed*t,apply_to=['mask','video','audio']).set_start(start).set_end(

  14. end/speed)

  15. #餘下時長恢復速度

  16. part2=video.subclip(end)

  17. #合成視訊

  18. result_video=concatenate_videoclips([part1,part2])

  19. result_path='./source/result.mp4'

  20. result_video.write_videofile(result_path)

5、鬼畜視訊

鬼畜視訊來源於 B 站,在抖音上很多搞笑類視訊剪輯都會使用到鬼畜處理,包含:畫面幀重複、畫面座標軸對映等。

使用 Python 實現鬼畜視訊也很簡單。


  1. defghost_video(video_path,repeat_time,location):

  2. """

  3. 生成鬼畜視訊

  4. :paramvideo_path:視訊路徑

  5. :paramrepeat_time:重複次數

  6. :paramlocation:處理位置

  7. :return:

  8. """

  9. video=VideoFileClip(video_path)

  10. #視訊前部分

  11. part1=video.subclip(0,location)

  12. #視訊目標部分,進行重複操作

  13. target=video.subclip(location,location+1)

  14. #視訊後部分

  15. part2=video.subclip(location+repeat_time)

  16. targets=[]

  17. #分別加入3個部分

  18. targets.append(part1)

  19. for_inrange(repeat_time):

  20. targets.append(target)

  21. targets.append(part2)

  22. #合成、生成視訊

  23. pass

6、字幕水印

利用 ImageClip 和 TextClip 可以很方便的加入圖片水印和視訊字幕。


  1. #加入圖片水印

  2. #包含:水印的時長、位置、透明度等

  3. logo=(ImageClip("./source/logo.png")

  4. .set_duration(video.duration)

  5. .resize(height=50)

  6. .margin(right=8,top=8,opacity=1)

  7. .set_pos(("right","top")))

  8. final=CompositeVideoClip([video,logo])

  9. #加入文字字幕

  10. clip=VideoFileClip(video_path)

  11. #字幕,文字內容、位置、展示時長

  12. texpClip=TextClip(subtitle,fontsize=30,color='white').set_pos('bottom').set_duration(duration)

  13. video=CompositeVideoClip([clip,texpClip.set_start(start)])

7、轉碼

需要說明的是,如果使用 AE 製作動畫視訊,最後的視訊檔案會非常大,使用 ffmpeg 依賴庫可以快速進行轉碼和壓縮檔案。

結合 alias 使用,可以更加方便地進行視訊剪輯。


  1. #快速轉碼壓縮

  2. aliaszh='ffmpeg-isource.mov-qscale0output.mp4'


本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯絡我們以作處理

想要獲取更多Python學習資料可以加QQ:2955637827私聊或加Q群630390733大家一起來學習討論吧!