yt-dlp / yt-dlp

A feature-rich command-line audio/video downloader
https://discord.gg/H5MNcFW63r
The Unlicense
89.82k stars 6.96k forks source link

If there is a missing fragment that does not report an error and does not report? #11540

Open DOSforever opened 6 hours ago

DOSforever commented 6 hours ago

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

Checklist

Please make sure the question is worded well enough to be understood

如果有缺失的片段不会报错,也不报告?

当由于网络不稳定等原因导致下载时断时续,最后结果虽然完成了,但如果中间有缺失的片段不会报错,也不报告哪个片段没有下载。

我使用 yt-dlp -N 8 -k -f id+id xxxxxxxxxxx --keep-fragments --proxy http://xxxxxxxx 下载时,由于代理服务器的不稳定,中间断开了,而 yt-dlp 一直在重试无法停下来,我不得不按 Ctrl-C 和 Ctrl-Break 强制停止,停止后我发觉应该是连续的片段中有一个片段号文件缺失,等代理服务器恢复正常后我继续执行之前完全相同的命令,等完全下载结束完毕后我发觉所缺失的片段仍然没有下载,yt-dlp 只是把已下载的 .part-Frag 文件合并成一个 .f.mp4 文件,并不检查片段有没有缺失,也不报告由片段缺失。 为了证实确实有这个片段应该下载,我重命名了之前所合并的 .f.mp4 文件,在原来同一个目录下执行相同的下载命令,当有遇到已经下载的片段时,yt-dlp 会跳过,当命令全部执行完毕后,原先所缺失的片段下载成功了,新合并后 .f.mp4 文件也确实比之前的大。

也就是说无论在下载过程中遇到什么什么意外情况,如网络或磁盘错误等因素,yt-dlp 不检查和报告有缺失片段,也不询问用户是否在缺失的情况下继续合并文件。 换句话说,如果我不使用 --keep-fragments 选项,在遇到错误后继续进行而完成,中间有缺失的片段我浑然不知。或者我必须每次都是用 --keep-fragments 来手动检查所有的片段都确实得到了下载。


If there is a missing fragments that does not report an error and does not report?

When the download is intermittent due to unstable network and other reasons, although the final result is completed, if there is a missing fragments in the middle, it will not report an error, and it will not report which fragments has not been downloaded.

I use yt-dlp -N 8 -k -f id+id xxxxxxxxxxx --keep-fragments --proxy http://xxxxxxxx when downloading, due to the instability of the proxy server, the middle is disconnected, and yt-dlp has been retrying and can't stop, I have to press Ctrl-C and Ctrl-Break to force stop, after stopping, I found that there should be a fragment file missing in the continuous fragments, After the proxy server is back to normal, I continue to execute the exact same command as before, and when the complete download is finished, I find that the missing fragment is still not downloaded, yt-dlp just merges the downloaded .part-Frag file into a single .f\<id>.mp4 file, does not check whether the fragment is missing, and does not report that the fragment is missing. In order to confirm that there is indeed this fragment that should be downloaded, I renamed the previously merged .f\<id>.mp4 file, execute the same download command in the same directory as before, when there is a fragments that has been downloaded, yt-dlp will skip it, when all the commands are executed, the original missing fragment is downloaded successfully, and the new merged .f\<id>.mp4 file size is also indeed larger than the previous one.

This means that no matter what unexpected circumstances are encountered during the download process, such as network or disk errors, yt-dlp does not check and report missing fragments, nor does it ask the user if they continue to merge files in the case of missing files. In other words, if I don't use the --keep-fragments option and finish after I encounter an error, I don't know that there are missing fragments in between. Or I have to manually check with --keep-fragments every time that all the fragments are indeed downloaded.

Provide verbose output that clearly demonstrates the problem

Complete Verbose Output

No response

bashonly commented 6 hours ago

use --abort-on-unavailable-fragments to prevent this

DOSforever commented 5 hours ago

use --abort-on-unavailable-fragments to prevent this

Thanks, I try it.