Ոնց SoundCloud-ից քաշած երգի 23 պատառները իրար միացրի
Երեկ պարզեցի, որ Լանայի չհրապարակված երգերից մեկը SoundCloud-ում extended տարբերակ ունի, որ չեմ լսել էսքան ժամանակ 🗿 Ինտերնետով mp3 ֆայլն էի ման գալիս, որպեսզի քաշեմ գցեմ VK, լսեմ, բայց մի 5 րոպե փնտրտուքից հետո հասկացա, որ դեռ ոչ մի քաշելու լինկ չեմ գտել. մենակ SoundCloud-ում էր։ Ու քանի որ հավես չունեի ևս մի 5 րոպե փնտրտելու, որոշեցի հենց SoundCloud-ից քաշեմ։
SoundCloud-ում իհարկե մի ամբողջական mp3 ֆայլի հարցում չէր գնում: Փոխարենը, մի playlist.m3u8
անունով ֆայլ գտա, որի մեջ սիրուն նստած էին ամբողջ երգը կազմող 23 հատ 9-վայրկյանանոց mp3 ֆայլերի հասցեները։ Որոշեցի ավտոմատացնեմ դրանք ի մի բերելու պրոցեսը։ curl
-ով կբերեմ բաղադրամաս ֆայլերը, իսկ ffmpeg
-ով իրար կկցմցեմ։ Ի վերջո, գրեցի էս փոքրիկ snippet-ը։
#!/usr/local/bin/coffee | |
fs = require('fs').promises | |
path = require 'path' | |
util = require 'util' | |
exec = util.promisify require('child_process').exec | |
tracksAsCurlArgs = null | |
tracksAsFFMpegArgs = null | |
exitCode = 0 | |
fs.mkdir(path.join __dirname, 'scl_tmp/') | |
.then => | |
fs.readFile path.join(__dirname, process.argv[2]) | |
.then (content) => | |
trackUrls = content.toString().replace('\n#EXT-X-ENDLIST', '').split(/\n#EXTINF(?:.*)\n/g).slice 1 | |
tracksAsCurlArgs = trackUrls.map((trackUrl, index) => "-o scl_tmp/part-#{index+1}.mp3 \"#{trackUrl}\"").join ' ' | |
tracksAsFFMpegArgs = [1..trackUrls.length].map((i) => "scl_tmp/part-#{i}.mp3").join '|' | |
console.log 'Fetching parts...' | |
exec "curl -s #{tracksAsCurlArgs}" | |
.then => | |
console.log 'All parts are fetched.' | |
console.log 'Concatenating parts...' | |
exec "ffmpeg -i \"concat:#{tracksAsFFMpegArgs}\" -acodec copy track-final.mp3" | |
.then => | |
console.log 'All done!' | |
.catch (err) => | |
console.error err | |
exitCode = 1 | |
.finally => | |
fs.rm path.join(__dirname, 'scl_tmp/'), recursive: yes | |
.catch => | |
# Silence, Sir! | |
.finally => | |
process.exit exitCode |
Սրանով քաշելուց հետո ընդամենը mp3 տվյալները kid3-ով լրացրի, գցեցի VK ու վերջ 🥳
Մեկնաբանություններ