最好的mp3,最轻的wav? python pytube压缩转换webm opus mp3 spek音频频谱

问题描述 投票:0回答:1

嗨,我正在学习 python,我发现 pytube 可以在 youtube 上下载音乐。

我的目标是拥有最好的音质。在 youtube 上,您可以拥有的最好速度似乎是 160 kbps。所以我这个:

from pytube import YouTube

url = input("Entre l'URL de la vidéo : ")

def on_download_progress(stream, chunk, bytes_remaining):
    bytes_downloaded = stream.filesize - bytes_remaining
    percent = bytes_downloaded * 100 / stream.filesize
    print(f"Progression du téléchargement {int(percent)}%")

youtube_video = YouTube(url)
youtube_video.register_on_progress_callback(on_download_progress)

print("TITRE: " + youtube_video.title)

print("STREAMS")
streams = youtube_video.streams.filter(progressive=False, type="audio").order_by('abr').desc()
audio_stream = streams[0]

print("Téléchargement audio...")
audio_stream.download()
print("OK")

所以我得到一个大小为 3,76 Mo

的 webm 文件

-第一个问题: 当我看房时,我得到了这个:property 总借记为 126 kbps,而不是像 itag 中的 abr 那样的 160。它是一个不同的单位吗?我做错了什么吗?

所以我做音乐,我有一个工具来检查真实的音频频谱。它是一个小 exe 调用 spek(它是一头猪) 所以我把我的网放在 spek 中,我得到了这个spek

所以我有一个 320 kbps 的结果,它真的很好,所以它很酷,即使我不知道为什么。

但是扩展名 webm 很糟糕,我们无法使用我可以在播放器中阅读它,但如果我想放入音乐剧,我需要转换它。所以我这样做了:

从 pytube 导入 YouTube 导入 ffmpeg 导入操作系统

url = input("Entre l'URL de la vidéo : ")

def on_download_progress(stream, chunk, bytes_remaining):
    bytes_downloaded = stream.filesize - bytes_remaining
    percent = bytes_downloaded * 100 / stream.filesize
    print(f"Progression du téléchargement {int(percent)}%")

youtube_video = YouTube(url)
youtube_video.register_on_progress_callback(on_download_progress)

print("TITRE: " + youtube_video.title)

print("STREAMS")
streams = youtube_video.streams.filter(progressive=False, type="audio").order_by('abr').desc()
audio_stream = streams[0]

print("Téléchargement audio...")
audio_stream.download()
print("OK")

filename_without_ext, _ = os.path.splitext(audio_stream.default_filename)
output_filename = filename_without_ext + ".wav"
streamt = ffmpeg.input(audio_stream.default_filename)
audio = streamt.audio
streamt = ffmpeg.output(audio, output_filename)
ffmpeg.run(streamt)

os.remove(audio_stream.default_filename)

所以当我检查 spek 时,我得到了一个相同质量的 wav 文件。但重量确实更大,尺寸为 45,9 Mo

第二个问题:是否有可能获得与第一个文件相同的大小?它具有相同的质量,不能更重。 (我环顾四周,似乎不可能 WAV 格式更大,仅此而已……也许不是?)

所以我决定将其转换为 mp3。 mp3 可以达到 320 kbps。所以我在技术上可能获得相同质量的范围内,所以我做到了:

from pytube import YouTube
import ffmpeg
import os

url = input("Entre l'URL de la vidéo : ")

def on_download_progress(stream, chunk, bytes_remaining):
    bytes_downloaded = stream.filesize - bytes_remaining
    percent = bytes_downloaded * 100 / stream.filesize
    print(f"Progression du téléchargement {int(percent)}%")

youtube_video = YouTube(url)
youtube_video.register_on_progress_callback(on_download_progress)

print("TITRE: " + youtube_video.title)

print("STREAMS")
streams = youtube_video.streams.filter(progressive=False, type="audio").order_by('abr').desc()
audio_stream = streams[0]

print("Téléchargement audio...")
audio_stream.download()
print("OK")

filename_without_ext, _ = os.path.splitext(audio_stream.default_filename)
output_filename = filename_without_ext + ".mp3"

input_stream = ffmpeg.input(audio_stream.default_filename)
output_stream = ffmpeg.output(input_stream, output_filename)
ffmpeg.run(output_stream)

os.remove(audio_stream.default_filename)

所以我得到一个 mp3 文件。但是当我看 spek 时,我的掉率很高drop

第三:如何获得与webm文件相同的码率?

我决定尝试https://convertio.co/fr/webm-mp3/

我猜它的工作原理非常好,mp3 的音频质量与我的 webm 相同。还有mp3文件重量7莫(比我的重)。因此,将 webm 转换为相同质量的 mp3 在技术上是可能的。但如何在 python 中做到这一点? ffmpeg 只是吃了我的文件的质量....

如何将webm文件转换成同等质量的mp3?并掌握wav和mp3文件的压缩?所有这些都在 python 中

compression mp3 webm pytube spek
1个回答
0
投票

接下来,我也想知道这个问题的解决方案。

编辑:经过数小时的研究和尝试不同的东西,我终于找到了一种在合并音频和视频文件的同时保持音频文件质量的方法。

我正在使用 write_videofile 来实现这一点,只需给它额外的参数,如 audio_fps、audio_bitrate ……就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.