如何在 Pytube 中合并音频和视频?

How to combine audio and video in Pytube?

我正在尝试编写代码以在 Python 3.6 上使用 Pytube 下载 YouTube 视频。但对于大多数视频,渐进式下载(同一文件中的音频和视频)格式只能达到 360p。所以想把音视频文件分开下载,然后合并。我能够下载音频和视频文件。如何将两个文件合并在一起?

基本上我在 Pytube 中找不到任何合并音频和视频的方法,但您可以使用 ffmpeg 进行混合。

首先你必须安装ffmpeg

  1. ffmpeg installation guide for Windows

  2. for Ubuntu just sudo apt install ffmpeg

添加依赖项 ffmpeg-python ffmpeg

的 python 包装器
  1. pip install ffmpeg-python

现在我们准备好使用此代码片段

import ffmpeg

video_stream = ffmpeg.input('Of Monsters and Men - Wild Roses.mp4')
audio_stream = ffmpeg.input('Of Monsters and Men - Wild Roses_audio.mp4')
ffmpeg.output(audio_stream, video_stream, 'out.mp4').run()

更多,ffmpeg-python API References

使用ffmpeg合并音频和视频

一旦您下载了视频和音频文件(分别为“videoplayback.mp4”和“videoplayback.m4a”),您可以按照以下方法将它们合并为一个文件:

如果是 MP4 格式(所有,1440p 60fps 和 2160p 60fps 除外):

ffmpeg -i videoplayback.mp4 -i videoplayback.m4a -c:v copy -c:a copy output.mp4

如果是 WebM 格式(1440p 60fps 和 2160p 60fps):

ffmpeg -i videoplayback.webm -i videoplayback.m4a -c:v copy -c:a copy output.mkv

等到 ffmpeg 完成将音频和视频合并到一个名为“output.mp4”的文件中。

如何将下载的音频文件转换为mp3?

您需要在命令提示符中执行以下命令window:

ffmpeg -i INPUT_FILE -ab BITRATE -vn OUTPUT_FILE

示例:

ffmpeg -i videoplayback.m4a -ab 128000 -vn music.mp3

示例:2(无比特率)

ffmpeg -i videoplayback.m4a -vn music.mp3

如果您一直收到没有音频的视频,那是因为来自 pytube 的自适应流。解决方法是同时下载视频和音频...然后将它们与 ffpmeg 合并。

例如,像这样同时获取音频和视频(音频部分改编自here

from pytube import YouTube
import os

youtube = YouTube('https://youtu.be/ksu-zTG9HHg')
video = youtube.streams.filter(res="1080p").first().download()
os.rename(video,"video_1080.mp4")
audio = youtube.streams.filter(only_audio=True)
audio[0].download()

然后是 ffmpeg 部分(改编自 here and ) you can set it up on Windows following this procedure 和 运行 类似

ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a aac output.mp4