Soulseek.NET으로 구축된 Soulseek용 자동 다운로더입니다. CSV 파일과 Spotify 및 YouTube URL을 허용합니다.
재생 목록 및 앨범 다운로드를 지원합니다. 사용자가 구성한 파일 조건과 경험적 방법에 따라 최상의 파일을 선택합니다.
사용 예를 참조하세요.
Usage: sldl <input> [OPTIONS]
<input> A url, search string, or path to a local CSV file.
Run --help "input" to view the accepted inputs.
Can also be passed with -i, --input <input>
--user <username> Soulseek username
--pass <password> Soulseek password
-p, --path <path> Download directory
--input-type <type> [csv|youtube|spotify|bandcamp|string|list]
--name-format <format> Name format for downloaded tracks. See --help name-format
-n, --number <maxtracks> Download the first n tracks of a playlist
-o, --offset <offset> Skip a specified number of tracks
-r, --reverse Download tracks in reverse order
-c, --config <path> Set config file location. Set to 'none' to ignore config
--profile <names> Configuration profile(s) to use. See --help ""config"".
--concurrent-downloads <num> Max concurrent downloads (default: 2)
--write-playlist Create an m3u playlist file in the output directory
--playlist-path <path> Override default path for m3u playlist file
--no-skip-existing Do not skip downloaded tracks
--no-write-index Do not create a file indexing all downloaded tracks
--index-path <path> Override default path for sldl index
--skip-check-cond Check file conditions when skipping existing files
--skip-check-pref-cond Check preferred conditions when skipping existing files
--skip-music-dir <path> Also skip downloading tracks found in a music library by
comparing filenames. Not 100% reliable.
--skip-not-found Skip searching for tracks that weren't found on Soulseek
during the last run.
--listen-port <port> Port for incoming connections (default: 49998)
--on-complete <command> Run a command whenever a file is downloaded.
Available placeholders: {path} (local save path), {title},
{artist},{album},{uri},{length},{failure-reason},{state}.
Prepend a state number to only run in specific cases:
1:, 2:, 3:, 4: for the Downloaded, Failed, Exists, and
NotFoundLastTime states respectively.
E.g: '1:<cmd>' will only run the command if the file is
downloaded successfully. Prepend 's:' to use the system
shell to execute the command.
--print <option> Print tracks or search results instead of downloading:
'tracks': Print all tracks to be downloaded
'tracks-full': Print extended information about all tracks
'results': Print search results satisfying file conditions
'results-full': Print search results including full paths.
--no-progress Disable progress bars/percentages, only simple printing
--debug Print extra debug info
--fast-search Begin downloading as soon as a file satisfying the preferred
conditions is found. Only for normal download mode.
--remove-ft Remove 'feat.' and everything after before searching
--no-remove-special-chars Do not remove special characters before searching
--remove-brackets Remove square brackets and their contents before searching
--regex <regex> Remove a regexp from all track titles and artist names.
Optionally specify a replacement regex after a semicolon.
Add 'T:', 'A:' or 'L:' at the start to only apply this to
the track title, artist, or album respectively.
--artist-maybe-wrong Performs an additional search without the artist name.
Useful for sources like SoundCloud where the "artist"
could just be an uploader. Note that when downloading a
YouTube playlist via url, this option is set automatically
on a per-track basis, so it is best kept off in that case.
-d, --desperate Tries harder to find the desired track by searching for the
artist/album/title only, then filtering. (slower search)
--fails-to-downrank <num> Number of fails to downrank a user's shares (default: 1)
--fails-to-ignore <num> Number of fails to ban/ignore a user's shares (default: 2)
--yt-dlp Use yt-dlp to download tracks that weren't found on
Soulseek. yt-dlp must be available from the command line.
--yt-dlp-argument <str> The command line arguments when running yt-dlp. Default:
"{id}" -f bestaudio/best -cix -o "{savepath}.%(ext)s"
Available vars are: {id}, {savedir}, {savepath} (w/o ext).
Note that -x causes yt-dlp to download webms in case ffmpeg
is unavailable.
--search-timeout <ms> Max search time in ms (default: 6000)
--max-stale-time <ms> Max download time without progress in ms (default: 50000)
--searches-per-time <num> Max searches per time interval. Higher values may cause
30-minute bans, see --help "search". (default: 34)
--searches-renew-time <sec> Controls how often available searches are replenished.
See --help "search". (default: 220)
--spotify-id <id> Spotify client ID
--spotify-secret <secret> Spotify client secret
--spotify-token <token> Spotify access token
--spotify-refresh <token> Spotify refresh token
--remove-from-source Remove downloaded tracks from source playlist
--youtube-key <key> Youtube data API key
--get-deleted Attempt to retrieve titles of deleted videos from wayback
machine. Requires yt-dlp.
--deleted-only Only retrieve & download deleted music.
--artist-col Artist column name
--title-col Track title column name
--album-col Album column name
--length-col Track length column name
--album-track-count-col Album track count column name (sets --album-track-count)
--yt-desc-col Youtube description column (improves --yt-parse)
--yt-id-col Youtube video id column (improves --yt-parse)
--time-format <format> Time format in Length column of the csv file (e.g h:m:s.ms
for durations like 1:04:35.123). Default: s
--yt-parse Enable if the CSV contains YouTube video titles and channel
names; attempt to parse them into title and artist names.
--remove-from-source Remove downloaded tracks from source CSV file
--format <formats> Accepted file format(s), comma-separated, without periods
--length-tol <sec> Length tolerance in seconds
--min-bitrate <rate> Minimum file bitrate
--max-bitrate <rate> Maximum file bitrate
--min-samplerate <rate> Minimum file sample rate
--max-samplerate <rate> Maximum file sample rate
--min-bitdepth <depth> Minimum bit depth
--max-bitdepth <depth> Maximum bit depth
--strict-title File name must contain title
--strict-artist File path must contain artist name
--strict-album File path must contain album name
--banned-users <list> Comma-separated list of users to ignore
--pref-format <formats> Preferred file format(s), comma-separated (default: mp3)
--pref-length-tol <sec> Preferred length tolerance in seconds (default: 3)
--pref-min-bitrate <rate> Preferred minimum bitrate (default: 200)
--pref-max-bitrate <rate> Preferred maximum bitrate (default: 2500)
--pref-min-samplerate <rate> Preferred minimum sample rate
--pref-max-samplerate <rate> Preferred maximum sample rate (default: 48000)
--pref-min-bitdepth <depth> Preferred minimum bit depth
--pref-max-bitdepth <depth> Preferred maximum bit depth
--pref-banned-users <list> Comma-separated list of users to downrank
--strict-conditions Skip files with missing properties instead of accepting by
default; if --min-bitrate is set, ignores any files with
unknown bitrate.
-a, --album Album download mode: Download a folder
-t, --interactive Interactive mode, allows to select the folder and images
--album-track-count <num> Specify the exact number of tracks in the album. Add a + or
- for inequalities, e.g '5+' for five or more tracks.
--album-art <option> Retrieve additional images after downloading the album:
'default': No additional images
'largest': Download from the folder with the largest image
'most': Download from the folder containing the most images
--album-art-only Only download album art for the provided album
--no-browse-folder Do not automatically browse user shares to get all files in
in the folder
--failed-album-path Path to move all album files to when one of the items from
the directory fails to download. Set to 'delete' to delete
the files instead. Set to 'disable' keep it where it is.
Default: {configured output dir}/failed
-g, --aggregate Aggregate download mode: Find and download all distinct
songs associated with the provided artist, album, or title.
--aggregate-length-tol <tol> Max length tolerance in seconds to consider two tracks or
albums equal. (Default: 3)
--min-shares-aggregate <num> Minimum number of shares of a track or album for it to be
downloaded in aggregate mode. (Default: 2)
--relax-filtering Slightly relax file filtering in aggregate mode to include
more results
2단어 및 --3단어 플래그의 약어도 허용됩니다(예: --twf). 옵션에 'max'라는 단어가 포함되어 있으면 m은 대문자여야 합니다. 'bitrate', 'sameplerate' 및 'bitlength'는 모두 두 개의 개별 단어로 처리되어야 합니다(예: --max-bitrate의 경우 --Mbr).
플래그를 false로 설정하여 명시적으로 비활성화할 수 있습니다(예: '--interactive false').
입력 유형은 일반적으로 자동으로 결정됩니다. 특정 입력 유형을 강제로 적용하려면 --input-type [spotify|youtube|csv|string|bandcamp|list]를 설정하세요. 다음 입력 유형을 사용할 수 있습니다.
로컬 CSV 파일 경로: 다운로드할 노래의 트랙 정보가 포함된 csv 파일을 사용합니다. 열 이름은 아티스트, 제목, 앨범, 길이여야 하지만 일반적으로 대체 이름도 검색됩니다. 제목 또는 앨범 열만 필요하지만 추가 정보를 추가하면 검색 결과 순위가 향상될 수 있습니다. 제목 열 텍스트가 없는 모든 행은 앨범 다운로드로 처리됩니다.
재생목록 URL: YouTube 재생목록에서 노래를 다운로드합니다. 재생목록을 검색하는 기본 방법이 항상 모든 동영상을 반환하는 것은 아니며, 특히 사용할 수 없는 동영상은 반환하지 않습니다. 모든 비디오 타이틀을 얻으려면 --youtube-key로 키를 제공하여 공식 API를 사용할 수 있습니다. https://console.cloud.google.com에서 다운로드하세요. 새 프로젝트를 만들고 "Api 활성화"를 클릭한 다음 "youtube data"를 검색한 다음 프롬프트를 따릅니다.
재생목록/앨범 URL 또는 'spotify-likes': Spotify 재생목록, 앨범 또는 좋아하는 노래를 다운로드하세요. 비공개 재생목록이나 좋아하는 음악을 다운로드하려면 자격 증명이 필요합니다.
리디렉션 URL http://localhost:48721/callback을 사용하여 https://developer.spotify.com/dashboard/applications에서 Spotify 애플리케이션을 생성합니다. 생성된 애플리케이션 대시보드에서 애플리케이션 ID와 비밀번호를 얻습니다.
Spotify 앱 로그인 흐름을 트리거하기 위해 획득한 자격 증명과 승인된 작업으로 sldl을 시작합니다.
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 -n 1 --print-tracks
sldl은 자동으로 브라우저를 열려고 시도하지만 출력할 로그인 흐름 URL을 기록하는 것으로 대체됩니다. 로그인 흐름이 완료된 후 sldl은 토큰과 새로 고침 토큰을 출력하고 현재 명령 실행을 완료합니다.
sldl을 사용할 때마다 로그인 흐름이 필요한 것을 건너뛰려면 토큰과 새로 고침 토큰을 sldl에 제공할 수 있습니다(힌트: 명령을 덜 장황하게 만들려면 이 정보를 구성 파일에 저장하세요):
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 --spotify-refresh 123456 --spotify-token 123456 -n 1 --pt
Spotify-Token 액세스는 1시간 동안만 유효합니다. Spotify-refresh를 사용하면 sldl이 실행될 때마다 액세스를 갱신할 수 있습니다(spotify-token을 포함하지 않고도 사용할 수 있음).
밴드캠프 URL: 단일 트랙, 앨범 또는 아티스트의 전체 음반을 다운로드하세요. 아티스트 이름, 앨범 이름을 추출하고 --album-track-count="n+"를 설정합니다. 여기서 n은 밴드캠프 페이지에 표시되는 트랙 수입니다.
검색할 트랙, 앨범 또는 아티스트의 이름: 일반적인 검색 문자열(예: soulseek 검색 창에 입력하는 내용)이거나 'title=노래 이름, 아티스트=와 같이 쉼표로 구분된 속성 목록일 수 있습니다. 아티스트 이름, 길이=215'.
다음 속성이 허용됩니다.
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
입력 및 해석 예시:
Input String | Artist | Title | Album | Length
---------------------------------------------------------------------------------
'Foo Bar' (without any hyphens) | | Foo Bar | |
'Foo - Bar' | Foo | Bar | |
'Foo - Bar' (with --album enabled) | Foo | | Bar |
'Artist - Title, length=42' | Artist | Title | | 42
'artist=AR, title=T, album=AL' | AR | T | AL |
각 줄의 형식은 다음과 같은 텍스트 파일의 경로입니다.
"some input" "conditions" "preferred conditions"
예:
"artist=Artist, album=Album" "format=mp3; br > 128" "br >= 320"
여기서 "일부 입력"은 위의 입력 유형 중 하나입니다. 필드에 공백이 없으면 따옴표를 생략할 수 있습니다. 조건 필드는 구성된 조건 위에 추가되며 생략할 수도 있습니다. 목록 입력은 --input-type=list를 사용하여 수동으로 활성화해야 합니다.
또한 앨범 다운로드에 대한 약칭인 a:"Artist - Album"
허용합니다. a:
는 따옴표 밖에 표시되어야 합니다.
기본값입니다. 모든 입력 항목에 대해 단일 파일을 다운로드합니다.
sldl은 앨범을 검색하고 오디오가 아닌 파일을 포함한 전체 폴더를 다운로드합니다. 입력이 Spotify 또는 밴드캠프 앨범에 대한 링크일 때, 입력 문자열 또는 csv 행에 트랙 제목이 없을 때, 또는 -a/--album이 활성화될 때 활성화됩니다.
-g/--aggregate를 사용하면 sldl은 입력에 대한 일반적인 검색을 수행한 다음 결과를 고유한 노래로 그룹화하고 가장 많은 사용자가 공유하는 노래부터 시작하여 각 종류 중 하나를 다운로드하려고 시도합니다.
--min-shares-aggregate는 기본적으로 2입니다. 즉, 한 명의 사용자만 공유한 노래는 무시됩니다.
--album 및 --aggregate가 모두 활성화되면 활성화됩니다. sldl은 공유를 그룹화하고 가장 많은 사용자가 공유한 앨범부터 시작하여 각 앨범 중 하나를 다운로드합니다. --interactive와 함께 사용하는 것이 좋습니다.
--min-shares-aggregate는 기본적으로 2입니다. 즉, 한 명의 사용자만 공유하는 앨범은 무시됩니다.
검색어는 다음과 같이 결정됩니다.
짧은 시간 내에 너무 많은 검색이 수행되면 서버는 30분 동안 귀하를 차단합니다. 이 프로그램에는 --searches-per-time 및 --searches-renew-time을 사용하여 조정할 수 있는 검색 제한기가 있습니다(제한에 도달하면 다운로드 상태가 "대기 중"이 됩니다). 기본적으로 220초마다 최대 34개의 검색을 허용하도록 구성되어 있습니다. 기본값은 실험을 통해 결정되었으므로 정확하지 않을 수 있습니다.
다음 옵션을 사용하면 속도가 빨라지지만 검색 결과 품질이 저하되거나 불안정해질 수 있습니다.
필수 조건을 만족하지 않는 파일은 다운로드되지 않습니다. 사전 조건을 만족하는 파일이 선호됩니다. --pref-format "flac,wav"를 설정하면 가능한 경우 무손실 파일을 다운로드하고, 다른 것이 없으면 손실이 있는 파일만 다운로드하게 됩니다.
기본 필수 조건은 없습니다. 기본 선호 조건은 다음과 같습니다.
pref-format = mp3
pref-length-tol = 3
pref-min-bitrate = 200
pref-max-bitrate = 2500
pref-max-samplerate = 48000
pref-strict-title = true
pref-strict-album = true
pref-accept-no-length = false
따라서 sldl은 비트 전송률이 200~2500kbps이고 길이가 제공된 길이와 3초 이내 차이가 나는 mp3 파일을 선호합니다. 또한 경로에 제공된 제목과 앨범(대소문자 무시, 경계 문자로 구분)이 포함되고 길이가 null이 아닌 파일을 선호합니다. 마지막 세 가지 선호 조건을 변경하는 것은 권장되지 않습니다.
기본 조건의 하위 집합을 충족하는 파일은 어떤 조건도 충족하지 않는 파일보다 여전히 선호되지만 일부 조건은 다른 조건보다 우선합니다. 예를 들어, 엄격한 제목(활성화된 경우)만 충족하는 파일은 형식 조건만 충족하는 파일보다 항상 선호됩니다. --print "results-full"을 사용하여 실행하면 정렬 논리가 표시됩니다.
조건은 --cond 및 --pref를 사용하여 세미콜론으로 구분된 문자열로 제공될 수도 있습니다(예: --cond "br >= 320; format = mp3,ogg; sr < 96000").
--strict-title, --strict-artist 및 --strict-album 옵션은 파일 이름에 제목/아티스트/앨범이 포함되지 않은 모든 파일을 필터링합니다(대소문자 무시, 경계 문자로 제한).
잘못된 다운로드를 방지하는 또 다른 방법은 --length-tol을 3 이하로 설정하여 입력과 3초 이상 다른 노래를 무시하도록 하는 것입니다. 그러나 4가지 옵션은 모두 기본적으로 이미 '선호' 조건으로 활성화되어 있습니다. 즉, 해당 파일은 어쨌든 최후의 수단으로만 다운로드됩니다. 따라서 허위 다운로드를 최대한 최소화해야 하는 경우나 이름이 한두 글자로 구성된 트랙이나 앨범과 같은 특수한 경우에만 활성화하는 것이 좋습니다.
피어가 사용하는 클라이언트에 따라 일부 정보를 사용하지 못할 수도 있습니다. 예를 들어 표준 Soulseek 클라이언트는 파일 비트 전송률을 공유하지 않습니다. 예를 들어 --min-bitrate가 설정된 경우 sldl은 알 수 없는 비트 전송률을 가진 파일을 계속 허용합니다. --strict-condition을 활성화하면 확인된 속성 중 하나 이상이 null(알 수 없음)인 모든 파일을 거부하도록 구성할 수 있습니다.
결과적으로 --min-bitrate도 설정되면 사용자가 기본 클라이언트와 공유하는 모든 파일은 무시됩니다. 또한 기본 선호 조건은 비트 전송률 및 샘플링 속도 확인으로 인해 이 옵션의 순위에 이미 영향을 미칩니다.
{}로 묶인 변수는 해당 파일 태그 값으로 대체됩니다. 이름 형식은 {tag1|tag2}와 같은 조건식은 물론 하위 디렉터리도 지원합니다. tag1이 null인 경우 tag2를 사용하세요. 괄호로 묶인 문자열 리터럴은 null 검사에서 무시됩니다.
artist First artist (from the file tags)
sartist Source artist (as on CSV/Spotify/YouTube/etc)
artists Artists, joined with '&'
albumartist First album artist
albumartists Album artists, joined with '&'
title Track title
stitle Source track title
album Album name
salbum Source album name
year Track year or date
track Track number
disc Disc number
filename Soulseek filename without extension
foldername Soulseek folder name
extractor Name of the extractor used (CSV/Spotify/YouTube/etc)
default-folder Default sldl folder name (usually the playlist name)
sldl은 다음 위치에서 sldl.conf라는 파일을 찾습니다.
~/AppData/Roaming/sldl/sldl.conf
~/.config/sldl/sldl.conf
실행 파일 디렉터리에도 있습니다.
예시 구성 파일:
username = your-username
password = your-password
pref-format = flac
fast-search = true
해시태그(#)로 시작하는 줄은 무시됩니다. 경로의 물결표는 사용자 디렉터리로 확장됩니다.
지원되는 프로필은 다음과 같습니다.
[lossless]
pref-format = flac,wav
위 프로필을 활성화하려면 --profile "lossless"를 실행하세요. 사용 가능한 모든 프로필을 나열하려면 --profile "help"를 실행하세요.
프로필은 몇 가지 간단한 조건에 따라 자동으로 활성화될 수 있습니다.
[no-stale]
profile-cond = interactive && download-mode == "album"
max-stale-time = 999999
# album downloads will never be automatically cancelled in interactive mode
[youtube]
profile-cond = input-type == "youtube"
path = ~/downloads/sldl-youtube
# download to another location for youtube
profile-cond에서 사용할 수 있는 연산자는 &&, ||, ==, !=, !{bool}입니다.
다음 변수를 사용할 수 있습니다.
input-type ("youtube"|"csv"|"string"|"bandcamp"|"spotify")
download-mode ("normal"|"aggregate"|"album"|"album-aggregate")
interactive (bool)
csv 파일에서 트랙을 다운로드합니다.
sldl test.csv
Spotify 좋아요 다운로드:
sldl spotify-likes
대화형 앨범 다운로드:
sldl "Some Album" -a -t
무손실을 선호하는 특정 노래를 이름으로 다운로드하세요.
sldl "MC MENTAL @ HIS BEST, length=242" --pref-format "flac,wav"
Spotify 재생목록에 있는 모든 노래의 앨범을 다운로드하세요.
sldl https://spotify/playlist/id -a
삭제된 동영상 이름을 검색한 다음 yt-dlp로 대체하여 YouTube 재생목록에서 다운로드합니다.
sldl https://www.youtube.com/playlist/id --get-deleted --yt-dlp
라이브러리에 없는 아티스트의 모든 노래를 인쇄합니다.
sldl "artist=MC MENTAL" --aggregate --skip-music-dir "path/to/music" --print results-full
Soulseek에서 찾은 아티스트의 모든 앨범을 다운로드하세요.
sldl "artist=MC MENTAL" -a -g -t
wishlist.txt
라는 파일을 만들고 입력 유형: 목록에 설명된 대로 일부 항목을 추가합니다.
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 " " format=flac "
sldl.conf
에 프로필을 추가하세요.
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
이렇게 하면 이미 다운로드된 위시리스트 항목을 건너뛰기 위해 sldl이 실행될 때마다 검색되는 글로벌 인덱스 파일 wishlist-index.sldl
생성됩니다. 선호하는 조건을 만족하는 버전이 다운로드될 때까지 검색을 계속하려면 skip-check-pref-cond = true
도 추가하세요(이렇게 하려면 다운로드 후 파일이 동일한 위치에 남아 있어야 합니다).
마지막으로 다음 옵션을 사용하여 주기적으로 sldl을 실행하도록 cron 작업(또는 Windows의 예약된 작업)을 설정합니다.
sldl --profile wishlist
chmod +x publish.sh && sh publish.sh
실행합니다. Intel Mac의 경우 x64의 주석 처리를 제거하고 게시.sh의 arm64 섹션에 주석을 추가합니다.--no-progress
사용하세요. sldl
실행하기 위한 Docker 컨테이너는 이 저장소에서 구축할 수 있습니다. 이미지는 Linux x86/ARM을 지원합니다.
컨테이너를 빌드하고 시작하려면 다음 안내를 따르세요.
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
sldl
사용을 시작하려면 컨테이너에 exec
.
docker compose exec sldl sh
sldl --help
Compose 스택은 파일 관리에 사용할 수 있는 docker-compose.yml
이 있는 위치를 기준으로 두 개의 디렉터리를 마운트합니다.
/config
(호스트의 ./config
) - sldl.conf
구성을 이 디렉터리에 넣은 다음 sldl -c /config ...
사용하여 컨테이너에서 구성을 사용합니다./data
(호스트의 ./data
) - 다운로드 디렉터리로 사용 IE sldl -p /data ...
Linux 호스트 에서 Docker를 실행하는 경우 docker 파일 권한 문제를 방지하려면 호스트의 구성 및 데이터 디렉터리를 소유한 사용자의 user:group
권한을 지정해야 합니다. 이는 환경 변수 PUID 및 PGID를 사용하여 지정할 수 있습니다.
현재 사용자의 UID 및 GID를 얻으려면 터미널에서 다음 명령을 실행하십시오.
id -u
-- UID를 인쇄합니다.id -g
-- GID를 인쇄합니다. 이를 docker-compose.yml
의 해당 변수( PUID
PGID
)로 바꿉니다.
컨테이너에 내장된 cron을 사용하여 일정에 따라 하나 이상의 sldl
명령을 실행할 수 있습니다.
일정을 만들려면 호스트 ./config/crontabs/abc
에 새 파일을 만들고 표준 crontab 구문과 함께 사용하세요.
cron 파일을 변경한 후에는 컨테이너를 다시 시작해야 합니다.
예 => 매주 일요일 오전 1시에 sldl
실행하고 지정된 Spotify 재생 목록에서 누락된 트랙을 검색합니다.
# min hour day month weekday command
0 1 * * 0 sldl https://open.spotify.com/playlist/6sf1WR5grXGJ6dET -c /config -p /data --skip-existing --m3u-path /data/index.sldl"
crontab.guru는 스케줄링 표현식에 도움이 되는 데 사용될 수 있습니다.