8

我使用 python cv2 模块将 jpg 帧加入到视频中,但我无法向其中添加音频。是否可以在没有 ffmpeg 的情况下在 python 中向视频添加音频?PS对不起我的英语不好

4

3 回答 3

5

使用 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)。

于 2018-04-11T10:36:44.043 回答
1

这就是我阅读音频和视频帧的方式:

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 视频并将原始帧作为 numpy 数组返回。您可以将文件作为参数而不是 URL 传递给 VideoFileClip。

于 2019-12-28T09:43:55.553 回答
1

您可以将 pygame 用于音频。您需要初始化 pygame.mixer 模块并在循环中添加 pygame.mixer.music.play() 但为此,您还需要选择音频文件。

但是,我找到了更好的主意!您可以使用 webbrowser 模块播放视频(因为它会在浏览器上播放,所以您可以听到声音!)

导入 webbrowser webbrowser.open("video.mp4")

于 2020-05-24T09:07:40.660 回答