python中視頻音頻的剪輯與處理實(shí)現(xiàn)
視頻:尺寸裁剪
import cv2 def extract_video_roi(src_video_path, dst_video_path, roi_start, roi_end): cap = cv2.VideoCapture(src_video_path) if not cap.isOpened(): print(f"無法打開視頻文件:{src_video_path}") return width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = cap.get(cv2.CAP_PROP_FPS) fourcc = cv2.VideoWriter_fourcc(*"mp4v") out = cv2.VideoWriter(dst_video_path, fourcc, fps, (roi_end[0] - roi_start[0], roi_end[1] - roi_start[1])) while cap.isOpened(): ret, frame = cap.read() if not ret: break roi_frame = frame[roi_start[1]:roi_end[1], roi_start[0]:roi_end[0]] out.write(roi_frame) cap.release() out.release() # 示例用法 src_video_path = "test.mp4" dst_video_path = "test3.mp4" roi_start = (978, 178) roi_end = (1684, 969) extract_video_roi(src_video_path, dst_video_path, roi_start, roi_end)
圖片:尺寸裁剪
def crop_images(folder_path, result_path, a, b, c, d): # 檢查輸入路徑是否存在,如果不存在則創(chuàng)建 if not os.path.exists(result_path): os.makedirs(result_path) # 遍歷文件夾內(nèi)的所有圖片文件 for filename in os.listdir(folder_path): if filename.endswith(".jpg") or filename.endswith(".png"): # 打開圖片文件 image = Image.open(os.path.join(folder_path, filename)) # 裁剪圖片 cropped_image = image.crop((a, b, c, d)) # 保存裁剪后的圖片 cropped_image.save(os.path.join(result_path, filename)) # 關(guān)閉圖片文件 image.close() folder_path = "標(biāo)定1" result_path = "標(biāo)定2" a, b, c, d = 84, 193, 1638, 934 crop_images(folder_path,result_path, a, b, c, d)
視頻:每秒提取一張圖片
import cv2 import os def extract_frames(video_path, result_folder): # 創(chuàng)建結(jié)果文件夾 os.makedirs(result_folder, exist_ok=True) # 打開視頻文件 cap = cv2.VideoCapture(video_path) frame_count = 0 saved_count = 0 # fps = cap.get(cv2.CAP_PROP_FPS) # 獲取視頻的幀率 frame_interval = int(cap.get(cv2.CAP_PROP_FPS)) # 設(shè)置幀采樣間隔為1秒 while cap.isOpened(): # 讀取視頻幀 ret, frame = cap.read() if not ret: break frame_count += 1 # 每秒保存一幀 if frame_count % frame_interval == 0: saved_count += 1 # 保存幀到結(jié)果文件夾 # frame_path = os.path.join(result_folder, f"{saved_count}.jpg") frame_path = os.path.join(result_folder, '%s.jpg' % saved_count) print(frame_path) cv2.imwrite(frame_path, frame) # 釋放視頻文件 cap.release() # 文件夾路徑不能有中文?。。。。?! video_path, result_folder = 'test3.mp4', 'new_folder' extract_frames(video_path, result_folder)
視頻音頻:倍速,合并,裁剪
注意,下面的start和end單位是秒數(shù),比如你想截取視頻第一分鐘的片段,那么start=0,end=60。
from moviepy.editor import * def video_clip(file_name, save_name, start, end): """視頻剪輯""" clip = VideoFileClip(file_name).subclip(start, end) clip.write_videofile(save_name) def audio_clip(file_name, save_name, start, end): """音頻剪輯""" audio = AudioFileClip(file_name).subclip(start, end) audio.write_audiofile(save_name) def video2audio(file_name, save_name): """視頻轉(zhuǎn)音頻""" # video = CompositeVideoClip([VideoFileClip(file_name).subclip(50, 60)]) # video.write_videofile(save_name) my_audio_clip = AudioFileClip(file_name) my_audio_clip.write_audiofile(save_name) def video_contact(files, save_name): """視頻合并""" files = [VideoFileClip(i) for i in files] final_clip = concatenate_videoclips(files) final_clip.write_videofile(save_name) def audio_contact(files, save_name): """音頻合并""" files = [AudioFileClip(i) for i in files] final_clip = concatenate_audioclips(files) final_clip.write_audiofile(save_name) def change_speed(file, save_name, speed): """改變速度""" clip = VideoFileClip(file) video_1 = clip.speedx(speed) video_1.write_videofile(save_name) def get_gif(file, save_name, start, end): """視頻轉(zhuǎn)gif""" clip = VideoFileClip(file).subclip(start, end) clip.write_gif(save_name, fps=5) # 生成之后的文件小,fps決定了文件大小 if __name__ == "__main__": pass
圖片:轉(zhuǎn)為視頻
import cv2 import os from PIL import Image def PicToVideo(imgPath, videoPath, fps): images = os.listdir(imgPath) # 獲取所有圖片名稱 images.sort(key=lambda x: int(x[:-4])) # 對(duì)圖片進(jìn)行排序 fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 設(shè)置視頻的編碼格式 im = Image.open(imgPath + images[0]) # 獲取圖片信息 videoWriter = cv2.VideoWriter(videoPath, fourcc, fps, im.size, isColor=True) # 創(chuàng)建一個(gè)videoWriter對(duì)象,用于將圖片保存為視頻的一部分 for im_name in images: print("已經(jīng)載入圖片" + im_name) frame = cv2.imread(imgPath + im_name) videoWriter.write(frame) videoWriter.release() # 釋放 print("視頻制作完畢") if __name__ == "__main__": # imgPath:圖片的保存文件夾 # videoPath:視頻路徑 # fps:幀率 # 注意:圖片大小要一致 imgPath = "data/" videoPath = "result.mp4" fps = 1 PicToVideo(imgPath, videoPath, fps)
圖片:批量轉(zhuǎn)灰度圖
import cv2 import os def to_gray(input_path, output_path): images = os.listdir(input_path) if not os.path.exists(output_path): os.makedirs(output_path) for image in images: print(image) input_image = os.path.join(input_path, image) output_image = os.path.join(output_path, image) image = cv2.imread(input_image, cv2.IMREAD_GRAYSCALE) cv2.imwrite(output_image, image) if __name__ == '__main__': input_path = "right" # 要處理的圖片所在的文件夾 output_path = "right2" # 處理完的圖片放在這里 to_gray(input_path, output_path)
圖片:改變圖片尺寸
if __name__ == "__main__": path = "no.png" save = "no2.png" pic = Image.open(path) pic.thumbnail((50, 50)) pic.save(save, "png")
到此這篇關(guān)于python中視頻音頻的剪輯與處理實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 視頻音頻剪輯處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于YUV 數(shù)據(jù)格式詳解及python實(shí)現(xiàn)方式
今天小編就為大家分享一篇基于YUV 數(shù)據(jù)格式詳解及python實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python正則表達(dá)式re.match()匹配多個(gè)字符方法的實(shí)現(xiàn)
這篇文章主要介紹了python正則表達(dá)式re.match()匹配多個(gè)字符方法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python中JSON轉(zhuǎn)換的全面指南與最佳實(shí)踐
JSON是現(xiàn)代應(yīng)用程序中最流行的數(shù)據(jù)交換格式之一,Python通過內(nèi)置的json模塊提供了強(qiáng)大的JSON處理能力,本文將深入探討Python中的JSON轉(zhuǎn)換,包括基本用法、高級(jí)特性以及最佳實(shí)踐,需要的朋友可以參考下2025-03-03python對(duì)數(shù)組進(jìn)行反轉(zhuǎn)的方法
這篇文章主要介紹了python對(duì)數(shù)組進(jìn)行反轉(zhuǎn)的方法,涉及Python中reverse方法的使用技巧,需要的朋友可以參考下2015-05-05python單元測(cè)試框架unittest基本用法案例
unittest庫unittest庫是python的內(nèi)置庫,用來對(duì)程序進(jìn)行測(cè)試,下面這篇文章主要給大家介紹了關(guān)于python中單元測(cè)試框架unittest基本用法的相關(guān)資料,需要的朋友可以參考下2022-09-09Python調(diào)用pyttsx3實(shí)現(xiàn)離線文字轉(zhuǎn)語音的方式
pyttsx3是 Python 中的文本到語音的離線轉(zhuǎn)換庫,本文給大家介紹Python調(diào)用pyttsx3實(shí)現(xiàn)離線文字轉(zhuǎn)語音的方式,感興趣的朋友一起看看吧2024-03-03python實(shí)現(xiàn)爬蟲統(tǒng)計(jì)學(xué)校BBS男女比例(一)
這篇文章主要介紹了python實(shí)現(xiàn)爬蟲統(tǒng)計(jì)學(xué)校BBS男女比例,,需要的朋友可以參考下2015-12-12