Shabinder / SpotiFlyer

Kotlin Multiplatform Music Downloader, Supports Spotify / Gaana / Youtube Music / Jio Saavn / SoundCloud.
https://app.spotiflyer.in/
GNU General Public License v3.0
10.5k stars 784 forks source link

[BUG] : <No FFmpeg found at path> #746

Closed Harishwarrior closed 3 years ago

Harishwarrior commented 3 years ago

Describe the bug:

Media Links Used: [<!--- - (https://open.spotify.com/track/7rglLriMNBPAyuJOMGwi39?si=c21e6e5f5b454741) --->]

Screenshots: image

StackTrace:

com.github.kokorin.jaffree.JaffreeException: Failed to start process.
    at com.github.kokorin.jaffree.process.ProcessHandler.execute(ProcessHandler.java:148)
    at com.github.kokorin.jaffree.ffmpeg.FFmpeg.execute(FFmpeg.java:400)
    at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invokeSuspend(DesktopMediaConverter.kt:34)
    at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invoke(DesktopMediaConverter.kt)
    at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invoke(DesktopMediaConverter.kt)
    at com.shabinder.common.core_components.parallel_executor.ParallelExecutor$Operation.execute(ParallelExecutor.kt:172)
    at com.shabinder.common.core_components.parallel_executor.ParallelExecutor$launchProcessor$1.invokeSuspend(ParallelExecutor.kt:114)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.selects.SelectBuilderImpl.resumeWith(Select.kt:304)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Caused by: java.io.IOException: Cannot run program "ffmpeg": CreateProcess error=2, The system cannot find the file specified
    at java.base/java.lang.ProcessBuilder.start(Unknown Source)
    at java.base/java.lang.ProcessBuilder.start(Unknown Source)
    at com.github.kokorin.jaffree.process.ProcessHandler.execute(ProcessHandler.java:141)
    ... 14 more
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.base/java.lang.ProcessImpl.create(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(Unknown Source)
    at java.base/java.lang.ProcessImpl.start(Unknown Source)
    ... 17 more

Device Info (please complete the following information):

Harishwarrior commented 3 years ago

Update fixed the issue by following this guide : https://www.wikihow.com/Install-FFmpeg-on-Windows

true-Grand commented 2 years ago

I got ffmpeg from homebrew. Please fix, or add the option to specify our ffmpeg path.

itsidleboy commented 2 years ago

downloading and adding FFmpeg is a pain.

zae-420 commented 2 years ago

downloading and adding FFmpeg is a pain.

its honestly not THAT bad tho and it makes getting music sm easier but to anyone who hasnt figured it out you have to put the 3 .exe files from the ffmpeg download into pc/windows/system 32 and it will work right id suggest following the wikihow to set the ffmpeg up though https://www.wikihow.com/Install-FFmpeg-on-Windows

OniCodes619 commented 2 years ago

Update fixed the issue by following this guide : https://www.wikihow.com/Install-FFmpeg-on-Windows

I have completed and saved the steps in the wiki ive checked multiple times to make sure the file was saved and applied but i still get the error and majority of the songs in my playlist did not download because of this error i assume

Serge1167 commented 1 year ago

DownloadLinkFetchFailed(errorTrace=Find Link for Goin' Crazy

Fetching From Saavn Failed:DownloadLinkFetchFailed(errorTrace=No SAAVN Match Found for Goin' Crazy) at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$DefaultImpls.findBestSongDownloadURL(JioSaavnRequests.kt:44) at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$findBestSongDownloadURL$1.invokeSuspend(JioSaavnRequests.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Yt1sMp3 Failed for I-ZW7oTQ8eo:java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(Unknown Source) at java.base/sun.nio.ch.SocketChannelImpl.read(Unknown Source) at org.apache.http.nio.reactor.ssl.SSLIOSession.receiveEncryptedData(SSLIOSession.java:478) at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:540) at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:120) at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) at java.base/java.lang.Thread.run(Unknown Source)

Extracting Manually...

YT Manual Extraction Failed!io.ktor.client.features.ClientRequestException: Client request(https://rr1---sn-p5qddn7z.googlevideo.com/videoplayback?expire=1679434553&ei=2c4ZZL-vIZCRhgaPoLOIDg&ip=172.93.81.131&id=o-AKPve8mfCe6zl4w5XS_rShIj54FAhHGloHYYufqIQtOH&itag=140&source=youtube&requiressl=yes&mh=Xn&mm=31%2C29&mn=sn-p5qddn7z%2Csn-p5qlsnrr&ms=au%2Crdu&mv=m&mvi=1&pl=24&gcr=ca&initcwndbps=1085000&vprv=1&mime=audio%2Fmp4&ns=i8BoScPuIv4HivigZk1o0qQL&gir=yes&clen=3200045&dur=197.559&lmt=1675715574265966&mt=1679412548&fvip=3&keepalive=yes&fexp=24007246&c=WEB&txp=2318224&n=QUaNkdeXDo21Kd&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAKtC8OtlFe6JmRpv7eutIExuyVDM_2IdoJ4TE_hnCVILAiEAjYaBjb76Aad0wAKkGNxnqOFl3cdaXRN--NogszdApAM%3D&sig=AOq0QJ8wRQIhAPUBVFLTpwSokVVOREP37Rz60cQe07_owlGrAXOVOo4zAiALba-6C7A8PAjW2bVZ23plINgicSmnELlhP_ZJw9CgZw%3D%3D) invalid: 403 Forbidden. Text: "" at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:47) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(DefaultResponseValidation.kt) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(DefaultResponseValidation.kt) at io.ktor.client.features.HttpCallValidator.validateResponse(HttpCallValidator.kt:54) at io.ktor.client.features.HttpCallValidator.access$validateResponse(HttpCallValidator.kt:33) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invokeSuspend(HttpCallValidator.kt:133) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(HttpCallValidator.kt) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(HttpCallValidator.kt) at io.ktor.client.features.HttpSend$Feature$install$1.invokeSuspend(HttpSend.kt:96) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Fetching From YT Failed:io.ktor.client.features.ClientRequestException: Client request(https://rr1---sn-p5qddn7z.googlevideo.com/videoplayback?expire=1679434553&ei=2c4ZZL-vIZCRhgaPoLOIDg&ip=172.93.81.131&id=o-AKPve8mfCe6zl4w5XS_rShIj54FAhHGloHYYufqIQtOH&itag=140&source=youtube&requiressl=yes&mh=Xn&mm=31%2C29&mn=sn-p5qddn7z%2Csn-p5qlsnrr&ms=au%2Crdu&mv=m&mvi=1&pl=24&gcr=ca&initcwndbps=1085000&vprv=1&mime=audio%2Fmp4&ns=i8BoScPuIv4HivigZk1o0qQL&gir=yes&clen=3200045&dur=197.559&lmt=1675715574265966&mt=1679412548&fvip=3&keepalive=yes&fexp=24007246&c=WEB&txp=2318224&n=QUaNkdeXDo21Kd&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAKtC8OtlFe6JmRpv7eutIExuyVDM_2IdoJ4TE_hnCVILAiEAjYaBjb76Aad0wAKkGNxnqOFl3cdaXRN--NogszdApAM%3D&sig=AOq0QJ8wRQIhAPUBVFLTpwSokVVOREP37Rz60cQe07_owlGrAXOVOo4zAiALba-6C7A8PAjW2bVZ23plINgicSmnELlhP_ZJw9CgZw%3D%3D) invalid: 403 Forbidden. Text: "" at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:47) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(DefaultResponseValidation.kt) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(DefaultResponseValidation.kt) at io.ktor.client.features.HttpCallValidator.validateResponse(HttpCallValidator.kt:54) at io.ktor.client.features.HttpCallValidator.access$validateResponse(HttpCallValidator.kt:33) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invokeSuspend(HttpCallValidator.kt:133) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(HttpCallValidator.kt) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(HttpCallValidator.kt) at io.ktor.client.features.HttpSend$Feature$install$1.invokeSuspend(HttpSend.kt:96) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

) at com.shabinder.common.providers.FetchPlatformQueryResult.findBestDownloadLink(FetchPlatformQueryResult.kt:204) at com.shabinder.common.providers.FetchPlatformQueryResult$findBestDownloadLink$1.invokeSuspend(FetchPlatformQueryResult.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:194) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:89) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:194) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:89) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:194) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:89) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

artur6593 commented 1 year ago

winget install ffmpeg