qwertyadrian / vk-music-downloader

Программа для скачивания музыки пользователей (и не только) ВКонтакте
GNU General Public License v3.0
29 stars 5 forks source link

Уменьшение битрейта скачанного трека #9

Open demions opened 1 year ago

demions commented 1 year ago

Привет.

Заметил, что текущий метод конвертации m3u8_to_mp3 пережимает скачиваемые треки внутри audioclip.write_audiofile.

Протестировал ручной вызов ffmpeg с параметрами -c:a copy. Результат получается значительно лучше, медиаинфо приложил ниже.

tmp_file = NamedTemporaryFile(delete=False, suffix=".mp3")
tmp_file.write(ts_content)
tmp_file.close()

import subprocess
FFMPEG_PATH = 'C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe'
subprocess.run([FFMPEG_PATH, "-y", "-i", tmp_file.name, "-c:a", "copy", name])

os.unlink(tmp_file.name)

Попробовал разными вариантами передать подобные аргументы в moviepy через ffmpeg_params или как-то по-другому починить moviepy, не разобрался и не хочется особо тратить на это время. В описании AudioFileClip написано, что он сначала переводит все форматы в wav, потом в финальный, может это как-то связано.

Предлагаю от moviepy совсем отказаться, вызывать ffmpeg вручную примерно как в коде выше. Тогда встает вопрос с установкой ffmpeg. Можно добавить конфиг, чтобы пользователь указывал к нему путь, но предлагаю стырить код автоустановки через imageio из moviepy.

Если нет замечаний к описанному выше, могу заняться, но вряд ли в ближайшее время.

Mediainfo:

Оригинал:

General Complete name : F:\Music\Discography\Alstroemeria Records[2013] REBIRTH DANCEHALL\09. TWOROCKS.mp3 Format : MPEG Audio File size : 10.4 MiB Duration : 5 min 30 s Overall bit rate mode : Variable Overall bit rate : 263 kb/s Album : REBIRTH DANCEHALL Album/Performer : Alstroemeria Records Part/Position : 1 Part/Total : 1 Track name : TWOROCKS Track name/Position : 9 Track name/Total : 13 Performer : 綾倉盟 Genre : Touhou Recorded date : 2013 Writing library : LAME3.99r Comment : Ripped by microlah @ Rizon #Comiket, EAC V1.0 beta 3, Secure Mode, Test & Copy, AccurateRip, FLAC -8 DISCID : ISCID

Audio Format : MPEG Audio Format version : Version 1 Format profile : Layer 3 Format settings : Joint stereo Duration : 5 min 30 s Bit rate mode : Variable Bit rate : 263 kb/s Minimum bit rate : 32.0 kb/s Channel(s) : 2 channels Sampling rate : 44.1 kHz Frame rate : 38.281 FPS (1152 SPF) Compression mode : Lossy Stream size : 10.4 MiB (100%) Writing library : LAME3.99r Encoding settings : -m j -V 0 -q 0 -lowpass 22.1 --vbr-new -b 32

Текущий код с moviepy:

General Complete name : D:\Downloads\tmp\vkmusic\test\綾倉盟 - TWOROCKS moviepy.mp3 Format : MPEG Audio File size : 5.04 MiB Duration : 5 min 30 s Overall bit rate mode : Constant Overall bit rate : 128 kb/s Track name : TWOROCKS Performer : 綾倉盟

Audio Format : MPEG Audio Format version : Version 1 Format profile : Layer 3 Format settings : Joint stereo / MS Stereo Duration : 5 min 30 s Bit rate mode : Constant Bit rate : 128 kb/s Channel(s) : 2 channels Sampling rate : 44.1 kHz Frame rate : 38.281 FPS (1152 SPF) Compression mode : Lossy Stream size : 5.04 MiB (100%)

Прямое копирование через ffmpeg:

General Complete name : D:\Downloads\tmp\vkmusic\test\綾倉盟 - TWOROCKS ffmpeg copy.mp3 Format : MPEG Audio File size : 10.4 MiB Duration : 5 min 30 s Overall bit rate mode : Variable Overall bit rate : 263 kb/s Track name : TWOROCKS Performer : 綾倉盟 Writing library : LAME3.99.5

Audio Format : MPEG Audio Format version : Version 1 Format profile : Layer 3 Format settings : Joint stereo Duration : 5 min 30 s Bit rate mode : Variable Bit rate : 263 kb/s Channel(s) : 2 channels Sampling rate : 44.1 kHz Frame rate : 38.281 FPS (1152 SPF) Compression mode : Lossy Stream size : 10.4 MiB (100%) Writing library : LAME3.99.5

qwertyadrian commented 1 year ago

Привет.

Если нет замечаний к описанному выше, могу заняться, но вряд ли в ближайшее время.

В целом нет, но думаю проще при вызове метода write_audiofile класса AudioFileClip указать битрейт. Таким образом можно получить аудиофайл с постоянным битрейтом 320 kb/s. Хотя я не знаю насколько по качеству это будет отличаться от ручного вызова ffmpeg.