Wget

wget沒有正確下載流媒體mp3

  • February 7, 2019

我正在嘗試使用 wget 下載流媒體 mp3。這是我的基本命令:

wget http://sj128.hnux.com/sj128.mp3 -c --timeout=1 --waitretry=0 --tries=0 -O "file.mp3"

我一直在一個腳本中執行此操作(它可以執行 1 小時),但我一直令人氣憤地發現我的文件最終會被截斷且不完整。例如,我希望文件大約是 30MB,而它只會是 13MB。

直到我直接從 CLI 執行此命令並看到最終我總是遇到“讀取超時”時,我才明白髮生了什麼。這不應該是表演的終結者。-c 和無限重試應該處理這個 FINE。

但相反,在“讀取超時”和新的重試之後,即使下載繼續,我的文件也會停止增長。

為什麼下載繼續但文件沒有按預期繼續增長?我什至創建了一個精心製作的腳本,該腳本以完全不同的文件名啟動了一個全新的 wget,以避免“文件”類型的衝突,即使所有輸出顯示一個完全不同的文件名和一個全新的程序,它仍然沒有寫新文件!

在這種情況下,為什麼似乎開始下載而我的新文件甚至沒有出現!?

這是一個實時流。“恢復”的整個概念並不適用,因為既沒有開始也沒有任何固定的位置可以恢復。您只需獲取目前流式傳輸的任何數據。

wget不知道這一點。網路故障後,恢復嘗試如下所示:

  1. wget知道文件有多大。如果伺服器支持恢復,wget會要求它從源文件中間恢復;但是伺服器端沒有這樣的文件,伺服器不支持恢復,這種方法失敗了。
  2. 嘗試恢復失敗,因此wget認為它從一開始就收到相同的數據。它會丟棄數據,直到丟棄量達到舊文件大小。然後它開始將新數據附加到文件中。這是您的文件開始增長的時刻。

實際上,當連接出現問題時,您不僅會錯過流的某些片段;您還會錯過本來可以保存的數據,只是因為wget假設它第二次收到相同的數據。

要克服這個問題,請啟動(並在需要時繼續重新啟動)以下操作:

wget http://sj128.hnux.com/sj128.mp3 -O - >> "file.mp3"

(如果您願意,還有其他選項)。收到的任何內容wget都將附加到文件中。如果您錯過了流的某些片段,則生成的文件顯然會儲存“切碎”的內容。在我的測試中,VLC 在播放此類文件時沒有任何技術問題。

注意:您可以隨時將文件截斷為零大小: > file.mp3。即使wget正在執行,這也會起作用,因為>>總是尋找給定文件的末尾(請參閱this)。


以完全不同的文件名啟動了一個全新wget的文件以避免“文件”類型的衝突和

$$ … $$它仍然沒有寫入新文件!

無法重現。我wget確實寫了一個新文件。

引用自:https://unix.stackexchange.com/questions/499236