python中視頻音頻的剪輯與處理實現(xiàn)
更新時間:2024年06月21日 09:51:22 作者:nencbskk
Python中輕松實現(xiàn)各種視頻處理操作,包括剪輯、合并、添加音頻、文本、特效等多種功能,主要介紹了python中視頻音頻的剪輯與處理實現(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)
# 遍歷文件夾內的所有圖片文件
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))
# 關閉圖片文件
image.close()
folder_path = "標定1"
result_path = "標定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)建結果文件夾
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)) # 設置幀采樣間隔為1秒
while cap.isOpened():
# 讀取視頻幀
ret, frame = cap.read()
if not ret:
break
frame_count += 1
# 每秒保存一幀
if frame_count % frame_interval == 0:
saved_count += 1
# 保存幀到結果文件夾
# 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單位是秒數,比如你想截取視頻第一分鐘的片段,那么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):
"""視頻轉音頻"""
# 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):
"""視頻轉gif"""
clip = VideoFileClip(file).subclip(start, end)
clip.write_gif(save_name, fps=5) # 生成之后的文件小,fps決定了文件大小
if __name__ == "__main__":
pass
圖片:轉為視頻
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])) # 對圖片進行排序
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 設置視頻的編碼格式
im = Image.open(imgPath + images[0]) # 獲取圖片信息
videoWriter = cv2.VideoWriter(videoPath, fourcc, fps, im.size, isColor=True) # 創(chuàng)建一個videoWriter對象,用于將圖片保存為視頻的一部分
for im_name in images:
print("已經載入圖片" + 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)
圖片:批量轉灰度圖
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")到此這篇關于python中視頻音頻的剪輯與處理實現(xiàn)的文章就介紹到這了,更多相關python 視頻音頻剪輯處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Python實現(xiàn)經典植物大戰(zhàn)僵尸游戲
這篇文章主要介紹了如何利用Python實現(xiàn)植物大戰(zhàn)僵尸游戲,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下2022-05-05
python?opencv圖像的高通濾波和低通濾波的示例代碼
這篇文章主要介紹了python?opencv圖像的高通濾波和低通濾波,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
Python中文分詞庫jieba,pkusegwg性能準確度比較
這篇文章主要介紹了Python中文分詞庫jieba,pkusegwg性能準確度比較,需要的朋友可以參考下2020-02-02

