吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 424|回复: 5
上一主题 下一主题
收起左侧

[Python 原创] MP3专辑封面下载器

[复制链接]
跳转到指定楼层
楼主
top777 发表于 2025-4-1 14:16 回帖奖励
我开车喜欢听歌,从APP上下载的加密歌曲经过unlock后丢失了封面,所以用AI写了个小程序,trae生成第一版完整源码,cursor接手进行了优化改善,完美。
[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
import sys
import os
import requests
import urllib.parse
import time
import random
import re
import datetime
from mutagen.id3 import ID3, APIC
from mutagen.mp3 import MP3
 
# 为打包后的程序保留控制台
if getattr(sys, 'frozen', False):
    import ctypes
    ctypes.windll.kernel32.AttachConsole(-1)
 
def show_usage_info():
    """显示程序使用说明"""
    print("=" * 80)
    print("MP3专辑封面下载器 - 使用说明")
    print("=" * 80)
    print("功能: 自动从QQ音乐、网易云音乐、酷狗音乐和酷我音乐下载MP3专辑封面并嵌入")
    print("      成功添加封面后可自动将文件重命名为 YYYYMMDD.原文件名.mp3 格式")
    print("      如文件已有封面,则只执行重命名操作(除非使用--no-rename选项)")
    print("\n可用命令行参数:")
    print("  path            - MP3文件或目录路径(默认为当前目录)")
    print("  --delay 秒数    - 设置每首歌曲处理间隔时间(秒),默认0.5秒")
    print("  --no-rename     - 不重命名文件,仅添加封面")
    print("  --force-download - 即使已有封面也强制重新下载")
    print("  --verbose       - 显示详细的处理信息")
    print("\n使用示例:")
    print("  python mp3_cover_downloader.py D:\\音乐文件夹")
    print("  python mp3_cover_downloader.py 单个文件.mp3 --delay 1")
    print("  python mp3_cover_downloader.py --no-rename")
    print("  python mp3_cover_downloader.py --force-download --verbose")
    print("=" * 80)
    print()
 
def get_cover_from_kugou(song_name, artist):
    """从酷狗音乐获取专辑封面"""
    try:
        # 搜索歌曲 - 使用更可靠的API
        keyword = urllib.parse.quote(f"{song_name} {artist}")
        search_url = f"https://songsearch.kugou.com/song_search_v2?keyword={keyword}&page=1&pagesize=1"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
            'Referer': 'https://www.kugou.com/'
        }
        response = requests.get(search_url, headers=headers, timeout=10)
        response.raise_for_status()
         
        # 检查响应内容是否为JSON
        try:
            data = response.json()
        except ValueError:
            print(f"酷狗音乐API返回了无效的JSON数据")
            return None
             
        if data.get('status') == 1 and data.get('data') and data['data'].get('lists') and len(data['data']['lists']) > 0:
            # 获取第一个匹配结果的hash和album_id
            song_info = data['data']['lists'][0]
            file_hash = song_info.get('FileHash')
            album_id = song_info.get('AlbumID')
             
            # 尝试从歌曲API直接获取专辑封面
            if file_hash:
                song_url = f"https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={file_hash}&platid=4&mid=00000000000000000000000000000000"
                song_headers = {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
                    'Referer': f'https://www.kugou.com/song/#hash={file_hash}'
                }
                song_response = requests.get(song_url, headers=song_headers, timeout=10)
                try:
                    song_data = song_response.json()
                    if song_data.get('status') == 1 and song_data.get('data'):
                        img_url = song_data['data'].get('img')
                        if img_url and img_url.startswith('http'):
                            img_response = requests.get(img_url, timeout=10)
                            if img_response.status_code == 200:
                                return img_response.content
                except (ValueError, KeyError) as e:
                    print(f"酷狗音乐歌曲API解析错误: {str(e)}")
    except Exception as e:
        print(f"酷狗音乐API错误: {str(e)}")
    return None
 
def get_cover_from_qq(song_name, artist):
    """从QQ音乐获取专辑封面"""
    try:
        # 搜索歌曲
        keyword = urllib.parse.quote(f"{song_name} {artist}")
        search_url = f"https://c.y.qq.com/soso/fcgi-bin/client_search_cp?w={keyword}&format=json&p=1&n=1"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
            'Referer': 'https://y.qq.com/',
            'Accept': 'application/json'
        }
        response = requests.get(search_url, headers=headers, timeout=10)
        response.raise_for_status()
         
        try:
            data = response.json()
        except ValueError:
            print(f"QQ音乐API返回了无效的JSON数据")
            return None
             
        if data.get('code') == 0 and data.get('data') and data['data'].get('song') and data['data']['song'].get('list') and len(data['data']['song']['list']) > 0:
            song = data['data']['song']['list'][0]
            # 获取专辑mid
            album_mid = song.get('albummid')
             
            if album_mid:
                # 构造专辑封面URL
                img_url = f"https://y.gtimg.cn/music/photo_new/T002R800x800M000{album_mid}.jpg"
                img_response = requests.get(img_url, headers=headers, timeout=10)
                if img_response.status_code == 200 and len(img_response.content) > 10000# 确保不是默认图片
                    return img_response.content
                 
                # 备用小图URL
                img_url_small = f"https://y.gtimg.cn/music/photo_new/T002R300x300M000{album_mid}.jpg"
                img_response = requests.get(img_url_small, headers=headers, timeout=10)
                if img_response.status_code == 200 and len(img_response.content) > 5000:
                    return img_response.content
    except Exception as e:
        print(f"QQ音乐API错误: {str(e)}")
    return None
 
def get_cover_from_kuwo(song_name, artist):
    """从酷我音乐获取专辑封面"""
    try:
        # 生成csrf token
        csrf_token = ''.join(random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(10))
         
        # 更新搜索API
        keyword = urllib.parse.quote(f"{song_name} {artist}")
        search_url = f"http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={keyword}&pn=1&rn=1"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
            'Referer': f'http://www.kuwo.cn/search/list?key={keyword}',
            'csrf': csrf_token,
            'Cookie': f'kw_token={csrf_token}'
        }
         
        # 先访问搜索页面获取cookie
        session = requests.Session()
        session.get(f'http://www.kuwo.cn/search/list?key={keyword}', headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        })
         
        # 添加延迟,防止被检测为爬虫
        time.sleep(1)
         
        response = session.get(search_url, headers=headers, timeout=10)
        response.raise_for_status()
         
        # 检查响应内容是否为JSON
        try:
            data = response.json()
        except ValueError:
            print(f"酷我音乐搜索API返回了无效的JSON数据")
            return None
             
        if data.get('code') == 200 and data.get('data') and data['data'].get('list') and len(data['data']['list']) > 0:
            # 获取第一个匹配结果的rid
            rid = data['data']['list'][0]['rid']
            # 获取专辑封面
            album_url = f"http://www.kuwo.cn/api/www/music/musicInfo?mid={rid}&httpsStatus=1"
            album_response = session.get(album_url, headers=headers, timeout=10)
            try:
                album_data = album_response.json()
                if album_data.get('code') == 200 and album_data.get('data'):
                    img_url = album_data['data'].get('pic')
                    if img_url and img_url.startswith('http'):
                        img_response = requests.get(img_url, timeout=10)
                        if img_response.status_code == 200:
                            return img_response.content
            except ValueError:
                print(f"酷我音乐专辑API返回了无效的JSON数据")
    except Exception as e:
        print(f"酷我音乐API错误: {str(e)}")
    return None
 
def get_cover_from_netease(song_name, artist):
    """从网易云音乐获取专辑封面"""
    try:
        # 优化关键词,去除可能的噪音
        clean_song = re.sub(r'\(.*?\)|\[.*?\]', '', song_name).strip()
        clean_artist = re.sub(r'\(.*?\)|\[.*?\]', '', artist).strip()
         
        # 搜索歌曲
        keyword = urllib.parse.quote(f"{clean_song} {clean_artist}")
        search_url = f"https://music.163.com/api/search/pc?s={keyword}&type=1&limit=3"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
            'Referer': 'https://music.163.com/',
            'Accept': 'application/json'
        }
        response = requests.get(search_url, headers=headers, timeout=10)
        response.raise_for_status()
         
        # 检查响应内容是否为JSON
        try:
            data = response.json()
        except ValueError:
            print(f"网易云音乐API返回了无效的JSON数据")
            return None
         
        if data.get('code') == 200 and data.get('result') and data['result'].get('songs') and len(data['result']['songs']) > 0:
            # 尝试找到最佳匹配
            best_match = None
            for song in data['result']['songs'][:3]:  # 检查前3个结果
                song_name_api = song.get('name', '').lower()
                artists = [artist.get('name', '').lower() for artist in song.get('artists', [])]
                 
                if clean_song.lower() in song_name_api or song_name_api in clean_song.lower():
                    # 歌曲名匹配,检查艺术家
                    if any(clean_artist.lower() in a or a in clean_artist.lower() for a in artists):
                        best_match = song
                        break
             
            # 如果没有找到最佳匹配,使用第一个结果
            if not best_match and data['result']['songs']:
                best_match = data['result']['songs'][0]
             
            if best_match:
                album_id = best_match.get('album', {}).get('id')
                pic_url = best_match.get('album', {}).get('picUrl')
                 
                # 尝试直接从搜索结果获取图片URL
                if pic_url and pic_url.startswith('http'):
                    img_response = requests.get(pic_url, timeout=10)
                    if img_response.status_code == 200:
                        return img_response.content
                 
                # 获取专辑详情
                if album_id:
                    album_url = f"https://music.163.com/api/album/{album_id}"
                    album_response = requests.get(album_url, headers=headers, timeout=10)
                    album_data = album_response.json()
                     
                    if album_data.get('code') == 200 and album_data.get('album'):
                        pic_url = album_data['album'].get('picUrl')
                        if pic_url and pic_url.startswith('http'):
                            img_response = requests.get(pic_url, timeout=10)
                            if img_response.status_code == 200:
                                return img_response.content
    except Exception as e:
        print(f"网易云音乐API错误: {str(e)}")
    return None
 
def download_cover(song_name, artist):
    # 尝试从不同平台获取封面
    print(f"正在为 {song_name} - {artist} 搜索封面...")
     
    # 先尝试QQ音乐
    cover_data = get_cover_from_qq(song_name, artist)
    if cover_data:
        print(f"从QQ音乐找到 {song_name} 的封面")
        return cover_data
     
    # 再尝试网易云音乐
    cover_data = get_cover_from_netease(song_name, artist)
    if cover_data:
        print(f"从网易云音乐找到 {song_name} 的封面")
        return cover_data
     
    # 再尝试酷狗音乐
    cover_data = get_cover_from_kugou(song_name, artist)
    if cover_data:
        print(f"从酷狗音乐找到 {song_name} 的封面")
        return cover_data
     
    # 最后尝试酷我音乐
    cover_data = get_cover_from_kuwo(song_name, artist)
    if cover_data:
        print(f"从酷我音乐找到 {song_name} 的封面")
        return cover_data
     
    print(f"无法找到 {song_name} - {artist} 的专辑封面")
    return None
 
def has_cover_art(audio):
    """检查MP3文件是否已有专辑封面"""
    try:
        # 检查是否有APIC帧(专辑图片)
        for key in audio.keys():
            if key.startswith('APIC'):
                # 检查图片数据大小是否大于1KB
                if len(audio[key].data) > 1000:
                    return True
        return False
    except Exception as e:
        print(f"检查封面时出错: {str(e)}")
        return False
 
def rename_file_with_date_prefix(file_path):
    """
    重命名文件,在原文件名前增加当前年月日(YYYYMMDD)和小数点分隔符
     
    Args:
        file_path: 文件的完整路径
         
    Returns:
        str: 重命名后的文件路径,如果未重命名则返回原路径
    """
    try:
        # 获取当前日期,格式为YYYYMMDD
        current_date = datetime.datetime.now().strftime("%Y%m%d")
         
        # 获取文件目录和文件名
        file_dir = os.path.dirname(file_path)
        file_name = os.path.basename(file_path)
         
        # 检查文件名是否已经包含日期前缀
        date_pattern = r"^\d{8}\.|^\d{8}_\d+\."
        if re.match(date_pattern, file_name):
            print(f"{file_name}: 文件名已包含日期前缀,无需重命名")
            return file_path
         
        # 创建新文件名: YYYYMMDD.原文件名
        new_file_name = f"{current_date}.{file_name}"
        new_file_path = os.path.join(file_dir, new_file_name)
         
        # 如果新文件已存在,添加数字后缀
        suffix = 1
        while os.path.exists(new_file_path):
            new_file_name = f"{current_date}_{suffix}.{file_name}"
            new_file_path = os.path.join(file_dir, new_file_name)
            suffix += 1
         
        # 重命名文件
        os.rename(file_path, new_file_path)
        print(f"文件已重命名: {file_name} -> {new_file_name}")
        return new_file_path
    except Exception as e:
        print(f"重命名文件失败: {str(e)}")
        return file_path
 
def extract_info_from_filename(filename):
    """从文件名中提取艺术家和歌曲名信息"""
    # 去除.mp3扩展名
    basename = filename.replace('.mp3', '')
     
    # 检查是否有日期前缀,如果有则去除
    date_match = re.match(r'^\d{8}\.(.+)$|^\d{8}_\d+\.(.+)$', basename)
    if date_match:
        basename = date_match.group(1) if date_match.group(1) else date_match.group(2)
     
    # 按 "艺术家 - 歌曲名" 格式分割
    parts = basename.split(' - ')
     
    if len(parts) >= 2:
        artist = parts[0].strip()
        song_name = parts[1].strip()
    else:
        # 无法分割,可能没有按照格式命名
        artist = "Unknown"
        song_name = basename
     
    return artist, song_name
 
def process_mp3_file(file_path):
    try:
        print(f"开始处理: {os.path.basename(file_path)}")
         
        # 检查文件是否存在ID3标签,如果不存在则创建
        try:
            audio = ID3(file_path)
        except:
            print(f"{os.path.basename(file_path)}: 未找到ID3标签,创建新标签")
            # 创建新的ID3标签
            audio = ID3()
            audio.save(file_path)
            audio = ID3(file_path)
         
        # 读取MP3文件
        mp3_audio = MP3(file_path, ID3=ID3)
         
        # 获取歌曲信息
        song_name = ""
        artist = ""
         
        # 尝试从ID3标签获取信息
        if 'TIT2' in audio:
            song_name = str(audio['TIT2'])
            print(f"获取到歌曲名: {song_name}")
         
        if 'TPE1' in audio:
            artist = str(audio['TPE1'])
            print(f"获取到艺术家: {artist}")
         
        # 如果ID3标签中没有足够信息,尝试从文件名获取
        if not song_name or not artist:
            filename = os.path.basename(file_path)
            filename_artist, filename_song = extract_info_from_filename(filename)
             
            if not artist:
                artist = filename_artist
                print(f"ID3标签中无艺术家,从文件名解析: {artist}")
             
            if not song_name:
                song_name = filename_song
                print(f"ID3标签中无歌曲名,从文件名解析: {song_name}")
         
        # 检查是否已有专辑封面
        if has_cover_art(audio):
            print(f"{os.path.basename(file_path)}: 已有专辑封面,跳过下载")
            # 如果有封面但需要重命名,则只执行重命名
            new_path = rename_file_with_date_prefix(file_path)
            return True
         
        # 下载封面
        print(f"开始下载专辑封面...")
        cover_data = download_cover(song_name, artist)
        if not cover_data:
            print(f"{os.path.basename(file_path)}: 无法找到专辑封面(QQ音乐、网易云、酷狗和酷我音乐均无结果)")
            return False
             
        # 写入封面
        print(f"写入专辑封面到文件...")
        audio.add(APIC(
            encoding=3,
            mime='image/jpeg',
            type=3,
            desc=u'Cover',
            data=cover_data
        ))
        audio.save()
        print(f"{os.path.basename(file_path)}: 成功添加专辑封面")
         
        # 重命名文件,添加当前日期前缀(YYYYMMDD.原文件名)
        new_path = rename_file_with_date_prefix(file_path)
         
        return True
         
    except Exception as e:
        print(f"{os.path.basename(file_path)}: 处理失败 - {str(e)}")
        return False
 
def batch_process_directory(directory, delay=0.5):
    success_count = 0
    failure_count = 0
     
    # 首先获取所有MP3文件的列表
    mp3_files = []
    for filename in os.listdir(directory):
        if filename.lower().endswith('.mp3'):
            mp3_files.append(os.path.join(directory, filename))
     
    total_files = len(mp3_files)
    print(f"发现 {total_files} 个MP3文件需要处理")
     
    # 依次处理每个文件
    for index, file_path in enumerate(mp3_files):
        print(f"\n[{index+1}/{total_files}] 处理文件: {os.path.basename(file_path)}")
        if process_mp3_file(file_path):
            success_count += 1
        else:
            failure_count += 1
         
        # 添加延迟,避免频繁请求API
        if index < total_files - 1:
            time.sleep(delay)
     
    print(f"\n处理完成: 成功 {success_count} 个, 失败 {failure_count} 个")
 
if __name__ == "__main__":
    import argparse
     
    # 显示欢迎信息和版本号
    print("\nMP3专辑封面下载器 v1.0.0\n")
     
    # 显示使用说明
    show_usage_info()
     
    # 支持文件拖放
    if len(sys.argv) > 1 and os.path.exists(sys.argv[1]) and '--' not in sys.argv[1]:
        # 如果第一个参数是有效路径且不是选项,视为拖放
        drop_path = sys.argv[1]
        sys.argv = [sys.argv[0]] + ['--'] + sys.argv[1:]  # 添加分隔符,防止路径被当作选项
     
    parser = argparse.ArgumentParser(description='MP3专辑封面下载器')
    parser.add_argument('path', nargs='?', default='.', help='MP3文件或目录路径(默认为当前目录)')
    parser.add_argument('--delay', type=float, default=0.5, help='每首歌曲处理间隔时间(秒),默认0.5秒')
    parser.add_argument('--no-rename', action='store_true', help='不重命名文件,仅添加封面')
    parser.add_argument('--force-download', action='store_true', help='即使已有封面也强制重新下载')
    parser.add_argument('--verbose', action='store_true', help='显示详细的处理信息')
    args = parser.parse_args()
     
    # 设置详细日志模式
    if not args.verbose:
        # 非详细模式下,覆盖print函数以过滤掉一些详细输出
        original_print = print
        def filtered_print(*args, **kwargs):
            # 过滤掉一些详细信息日志
            if args and isinstance(args[0], str):
                text = args[0]
                if any(x in text for x in ["获取到歌曲名", "获取到艺术家", "ID3标签中无", "开始处理", "开始下载", "写入专辑封面"]):
                    return
            original_print(*args, **kwargs)
        print = filtered_print
     
    # 如果不需要重命名文件,修改函数行为
    if args.no_rename:
        # 创建一个空函数替换原有的重命名函数
        def rename_file_with_date_prefix(file_path):
            return file_path
        print("已禁用文件重命名功能")
     
    # 如果强制下载,修改检查函数
    if args.force_download:
        def has_cover_art(audio):
            return False
        print("已启用强制下载模式,将重新下载所有MP3的封面")
     
    if os.path.isfile(args.path):
        process_mp3_file(args.path)
    elif os.path.isdir(args.path):
        print(f"开始批量处理目录: {args.path}")
        print(f"将搜索QQ音乐、网易云音乐、酷狗音乐和酷我音乐获取专辑封面")
        print(f"处理间隔设置为 {args.delay} 秒")
        batch_process_directory(args.path, args.delay)
    else:
        print("错误: 路径不存在")
     
    # 如果是打包后的程序,在结束时暂停
    if getattr(sys, 'frozen', False):
        print("\n处理完成,按任意键退出...")
        try:
            input()
        except:
            pass

免费评分

参与人数 2吾爱币 +6 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
pyjiujiu + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
CHIANTII 发表于 2025-4-1 18:45
dysunb 发表于 2025-4-1 15:37
下载这个封面有啥用?

解决了强迫症看不到封面的困境
沙发
dysunb 发表于 2025-4-1 15:37
3#
djc82 发表于 2025-4-1 15:51
我还专门找了个Mp3tag来删除内勘在MP3里的封面
5#
lan771 发表于 2025-4-2 09:47
docker 容器 music tag 就挺好用的 不用这么麻烦。
6#
 楼主| top777 发表于 2025-4-3 09:59 |楼主
dysunb 发表于 2025-4-1 15:37
下载这个封面有啥用?

我的大屏播放mp3时要显示封面,没有的话看着不爽。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-7 20:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表