主要是由於視頻的色彩空間引起的
import cv2
from moviepy.editor import VideoFileClip, AudioFileClip
import time
# 輸入視頻文件路徑
input_video_path = '/Users/a3530/Downloads/b62398c3af39755f6e7e5da6bec2bdce480p.mp4'
def get_new_video(input_video_path):
input_video_name = input_video_path.split("/")[-1]
input_audio_path = input_video_name.replace("mp4","mp3")
# 輸出視頻文件路徑
output_video_path = f'tmp_{input_video_name}'
res_video_path = f'new_{input_video_name}'
# 打開輸入視頻文件
video_clip = VideoFileClip(input_video_path)
# 提取視頻的音頻部分
audio_clip = video_clip.audio
# 保存音頻文件
audio_clip.write_audiofile(input_audio_path, codec='mp3')
print("提取音頻結束")
# 打開輸入視頻文件
cap = cv2.VideoCapture(input_video_path)
# 獲取輸入視頻的參數
frame_width = int(cap.get(3)) # 獲取幀寬度
frame_height = int(cap.get(4)) # 獲取幀高度
fps = int(cap.get(5)) # 獲取幀率
# 設置輸出視頻編碼器爲H.264
fourcc = cv2.VideoWriter_fourcc(*'H264')
# 創建輸出視頻文件
out = cv2.VideoWriter(output_video_path, fourcc, fps, (frame_width, frame_height))
# 逐幀讀取、轉換、寫入
while True:
ret, frame = cap.read() # 讀取一幀
if not ret:
break # 如果沒有更多幀可讀,退出循環
# 在這裏進行顏色空間轉換,確保將顏色描述轉換爲HD (1-1-1)的RGB空間
# 這裏的示例是複製幀,你可以根據需要進行顏色空間轉換
# 寫入幀到輸出視頻文件
out.write(frame)
# 釋放視頻對象
cap.release()
out.release()
print("修改視頻色彩空間結束")
# 打開輸入視頻文件
video_clip = VideoFileClip(output_video_path)
# 打開輸入音頻文件
audio_clip = AudioFileClip(input_audio_path)
video_with_audio_clip = video_clip.set_audio(audio_clip)
video_with_audio_clip.write_videofile(res_video_path, codec='libx264')
print("視頻添加音頻完成")
return res_video_path
if __name__ == '__main__':
print(get_new_video(input_video_path))