目錄
添加文字報錯處理
中文不顯示處理
代碼實例
給視頻添加滾動文字(一)
給視頻添加滾動文字(二)
添加文字報錯處理
報錯內(nèi)容:OSError: MoviePy Error: creation of None failed because of the following error:
[WinError 2] 系統(tǒng)找不到指定的文件。.
.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect.
報錯原因:moviepy處理視頻使用的是 ffmpeg,生成文字使用的是 ImageMagick。Windows系統(tǒng)在執(zhí)行 editor.TextClip() 的時候,會報出如上錯誤,原因是由于電腦上缺少ImageMagick造成的。
處理方法:需要去官網(wǎng)下載對應(yīng)操作系統(tǒng)的ImageMagick。下載地址:http://www.imagemagick.org/script/download.php,由于是外網(wǎng),下載速度比較慢。下載完成并安裝到指定位置,然后修改site-packages\moviepy\config_defaults.py,在文件的尾部有如下內(nèi)容:
import os
FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = os.getenv('IMAGEMAGICK_BINARY', 'auto-detect')
# 把 `IMAGEMAGICK_BINARY = ` 后面的內(nèi)容
# 換成 ImageMagick 安裝路徑下 magick.exe 的絕對路徑,如下:
import os
FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = r"C:\Program Files\ImageMagick-7.1.0-Q16\magick.exe"
中文不顯示處理
moviepy對中文和多語言環(huán)境的支持做得并不好,包括中文文件名以及用于顯示文字的TextClip就是典型的中文支持方面存在問題的。對于編解碼的問題,可以通過修改解碼語句中的編碼類型為’asn’或‘cp936’等方式解決,對于文字顯示的處理,稍微麻煩。解決辦法:找到對應(yīng)中文字庫,將其字庫文件拷貝到代碼所在目錄,將TextClip的參數(shù)font不用字體名,而是用字體文件名。字體庫位置:C:\Windows\Fonts,鼠標(biāo)右擊字體文件,找到屬性中安全下的對象名稱,將對象名稱復(fù)制下來作為font的值。文章來源:http://www.zghlxwxcb.cn/news/detail-486297.html
代碼實例
from moviepy.editor import VideoFileClip
from moviepy import editor
clip = VideoFileClip('video.mp4')
text = '''
紅箋小字。
說盡平生意。
鴻雁在云魚在水。
惆悵此情難寄。
斜陽獨(dú)倚西樓。
遙山恰對簾鉤。
人面不知何處,
綠波依舊東流。
'''
text_clip = editor.TextClip(text, font=r'./font/STKAITI.TTF', fontsize=30, color='blue', bg_color='white', transparent=True)
"""
set_position:設(shè)置文字顯示位置【屏幕左上角為(0, 0),右下角為(屏幕寬度, 屏幕高度)】
1、set_position((800, 500)): 顯示在800, 500的位置上
2、set_position(("center", "center")): 顯示在屏幕的正中央
3、set_position((0.4, 0.6), True): 顯示在距離左邊百分之40、距離上邊百分之60的位置上
set_duration(10): 持續(xù)10秒
set_opacity(0.6): 設(shè)置透明度為0.6
set_start(5):設(shè)置開始顯示的時間點(diǎn)
set_end(10):設(shè)置結(jié)束的時間點(diǎn)
"""
text_clip = text_clip.set_position(("center", "center")).set_duration(20).set_opacity(0.8)
video_clip = editor.CompositeVideoClip([clip, text_clip]) # 把文本剪貼板貼在視頻上
video_clip.write_videofile("demo1.mp4") # 保存視頻
給視頻添加滾動文字(一)
from moviepy.editor import VideoFileClip, vfx
from moviepy import editor
demo_video = VideoFileClip('video.mp4')
text = '''
紅箋小字。
說盡平生意。
鴻雁在云魚在水。
惆悵此情難寄。
斜陽獨(dú)倚西樓。
遙山恰對簾鉤。
人面不知何處,
綠波依舊東流。
'''
text_clip = editor.TextClip(text * 4, font=r'./font/STKAITI.TTF', fontsize=20, color="red").set_position(
('center', 0)).set_duration(20).set_opacity(0.8).set_start(5).set_end(25) # 可以直接使用鏈?zhǔn)讲僮?
w, h = demo_video.size
x_speed = x_start = y_start = 0
y_speed = 20
text_clip = text_clip.fx(vfx.scroll, w, h, x_speed, y_speed, x_start, y_start)
video_clip = editor.CompositeVideoClip([demo_video, text_clip])
video_clip.write_videofile('demo_video01.mp4')
給視頻添加滾動文字(二)
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# 同畫面中合併視頻,視頻顯示位置設(shè)置或屏幕中文本字幕顯示位置set_pos('center')、set_pos((45,150)),見http://doc.moviepy.com.cn/index.html#中的剪輯定位
## 1、添加文字
clip = VideoFileClip('video.mp4')
text = '其形也,翩若驚鴻,婉若游龍。\n榮曜秋菊,華茂春松。\n髣髴兮若輕云之蔽月,飄飖兮若流風(fēng)之回雪。\n遠(yuǎn)而望之,皎若太陽升朝霞;迫而察之,灼若芙蕖出淥波。\n秾纖得衷,修短合度。肩若削成,腰如約素。\n延頸秀項,皓質(zhì)呈露。芳澤無加,鉛華弗御。\n云髻峨峨,修眉聯(lián)娟。丹唇外朗,皓齒內(nèi)鮮,明眸善睞,靨輔承權(quán)。\n瑰姿艷逸,儀靜體閑。柔情綽態(tài),媚于語言。奇服曠世,骨像應(yīng)圖。\n披羅衣之璀粲兮,珥瑤碧之華琚。戴金翠之首飾,綴明珠以耀軀。\n踐遠(yuǎn)游之文履,曳霧綃之輕裾。微幽蘭之芳藹兮,步踟躕于山隅。'
txt_clip = TextClip(txt=text, fontsize=20, color='red', font=r'./font/STKAITI.TTF')
txt_clip = txt_clip.set_pos(lambda t: ('center', -100 + t * 20)).set_duration(25) # 設(shè)置一個隨時間變化自動移動的動態(tài)字幕
video = CompositeVideoClip([clip, txt_clip]) # 將文本剪輯覆蓋在第一個視頻剪輯上
video.write_videofile('demo2023.mp4')
補(bǔ)充(視頻屬性判斷)文章來源地址http://www.zghlxwxcb.cn/news/detail-486297.html
clip = VideoFileClip('video.mp4') # 是否作為遮罩使用 print(clip.ismask) # 幀的構(gòu)建方法,通過構(gòu)造方法傳入或set_make_frame方法設(shè)置,幀的構(gòu)建方法用于根據(jù)時間構(gòu)建幀,該方法是get_frame獲取幀時調(diào)用的方法。幀的構(gòu)建可以從已有剪輯中獲取或變換,也可以代碼自己填充 print(clip.make_frame) # 當(dāng)一個視頻幀有遮罩時,使用該屬性記錄遮罩的剪輯。如果為None,則視頻剪輯完全不透明??梢酝ㄟ^add_mask、set_opacity等方法來構(gòu)建剪輯的遮罩,也可以通過set_mask來將已有的剪輯設(shè)置為視頻剪輯的遮罩 print(clip.mask) # aspect_ratio屬性為剪輯的縱橫比,實際上就是剪輯的寬/高。注意該屬性為浮點(diǎn)數(shù),只讀,通過屬性名訪問 print(clip.aspect_ratio)
到了這里,關(guān)于python+moviepy音視頻處理(二):視頻添加文字(字幕)、視頻添加漢字不顯示問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!