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")