Python 将音频添加到视频 opencv
Python add audio to video opencv
我使用 python cv2 模块将 jpg 帧加入到视频中,但我无法向其中添加音频。是否可以在没有 ffmpeg 的情况下将音频添加到 python 中的视频?
P.S。抱歉我的英语不好
使用ffpyplayer处理音频部分。
import cv2
import numpy as np
#ffpyplayer for playing audio
from ffpyplayer.player import MediaPlayer
video_path="../L1/images/Godwin.mp4"
def PlayVideo(video_path):
video=cv2.VideoCapture(video_path)
player = MediaPlayer(video_path)
while True:
grabbed, frame=video.read()
audio_frame, val = player.get_frame()
if not grabbed:
print("End of video")
break
if cv2.waitKey(28) & 0xFF == ord("q"):
break
cv2.imshow("Video", frame)
if val != 'eof' and audio_frame is not None:
#audio
img, t = audio_frame
video.release()
cv2.destroyAllWindows()
PlayVideo(video_path)
示例代码可以运行,但您需要根据视频的速度在 cv2.waitKey(28) 周围播放。
我是这样读取音频和视频帧的:
from moviepy.editor import *
from pafy import pafy
if __name__ == '__main__':
video = pafy.new('https://www.youtube.com/watch?v=K_IR90FthXQ')
stream = video.getbest(preftype='mp4')
video = VideoFileClip(stream.url)
audio = video.audio
for t, video_frame in video.iter_frames(with_times=True):
audio_frame = audio.get_frame(t)
print(audio_frame)
print(video_frame)
此代码将 YouTube 视频和 returns 原始帧下载为 numpy 数组。
您可以将文件作为参数传递给 VideoFileClip 而不是 URL.
您可以使用 pygame 音频。
您需要初始化 pygame.mixer 模块
并在循环中添加 pygame.mixer.music.play()
但是为此,您还需要选择音频文件。
不过,我找到了更好的主意!您可以使用 webbrowser 模块播放视频(因为它会在浏览器上播放,所以您可以听到声音!)
导入网络浏览器
webbrowser.open("video.mp4")
import pygame
pygame.mixer.init()
pygame.mixer.music.load(
'c:Your_file')
pygame.mixer.music.play()
while True:
pygame.time.Clock().tick()
#used to show that you can do other stuff while playing audio
print("hi")
我使用 python cv2 模块将 jpg 帧加入到视频中,但我无法向其中添加音频。是否可以在没有 ffmpeg 的情况下将音频添加到 python 中的视频? P.S。抱歉我的英语不好
使用ffpyplayer处理音频部分。
import cv2
import numpy as np
#ffpyplayer for playing audio
from ffpyplayer.player import MediaPlayer
video_path="../L1/images/Godwin.mp4"
def PlayVideo(video_path):
video=cv2.VideoCapture(video_path)
player = MediaPlayer(video_path)
while True:
grabbed, frame=video.read()
audio_frame, val = player.get_frame()
if not grabbed:
print("End of video")
break
if cv2.waitKey(28) & 0xFF == ord("q"):
break
cv2.imshow("Video", frame)
if val != 'eof' and audio_frame is not None:
#audio
img, t = audio_frame
video.release()
cv2.destroyAllWindows()
PlayVideo(video_path)
示例代码可以运行,但您需要根据视频的速度在 cv2.waitKey(28) 周围播放。
我是这样读取音频和视频帧的:
from moviepy.editor import *
from pafy import pafy
if __name__ == '__main__':
video = pafy.new('https://www.youtube.com/watch?v=K_IR90FthXQ')
stream = video.getbest(preftype='mp4')
video = VideoFileClip(stream.url)
audio = video.audio
for t, video_frame in video.iter_frames(with_times=True):
audio_frame = audio.get_frame(t)
print(audio_frame)
print(video_frame)
此代码将 YouTube 视频和 returns 原始帧下载为 numpy 数组。 您可以将文件作为参数传递给 VideoFileClip 而不是 URL.
您可以使用 pygame 音频。 您需要初始化 pygame.mixer 模块 并在循环中添加 pygame.mixer.music.play() 但是为此,您还需要选择音频文件。
不过,我找到了更好的主意!您可以使用 webbrowser 模块播放视频(因为它会在浏览器上播放,所以您可以听到声音!)
导入网络浏览器 webbrowser.open("video.mp4")
import pygame
pygame.mixer.init()
pygame.mixer.music.load(
'c:Your_file')
pygame.mixer.music.play()
while True:
pygame.time.Clock().tick()
#used to show that you can do other stuff while playing audio
print("hi")