How to Recover Scratched DVDs and CDs with GDDRescue (Linux)
Initial Considerations#
Yes โ there is a way to attempt a total or partial recovery of a scratched DVD, but it is important to have realistic expectations since a scratched DVD never "goes back to normal" 100%. What can be done is to read as much of it as possible by ignoring errors and saving what can be found.
Here I will show you the best method on Linux, explaining what can and cannot be recovered.
GDDRescue#
GDDRescue is the most widely used tool for damaged media. This is an interesting tool because it attempts to read the file by ignoring bad or scratched sectors, trying to re-read them multiple times while saving everything it manages to unearth along the way; finally, it generates an ISO with all the content it was able to find.
Instalation#
The installation is quite simple; open the terminal and type:
> sudo apt install gddrescue
Enter your password and let it install.
Before inserting the DVD into the drive, clean it from the center outwards using a microfiber cloth, water, and a drop of neutral detergent, then dry it well.
This alone sometimes completely fixes DVDs that wouldn't read.
โ ๏ธ Never wipe in circles and NEVER USE:
- โ Aggressive polishers
- โ Toothpaste (a myth โ it can make it worse)
Also DOES NOT work:
- โ Windows "magic programs"
- โ Reinstalling the player
- โ Changing drivers
A scratch is a physical problem.
Starting the Reading Process#
After cleaning and inserting the disc into the drive, run the following code:
> sudo ddrescue -n /dev/sr0 save_name.iso dvd.log
With this, ddrescue will perform the first check of the disc, going through it and trying to recover its files, while also marking damaged points in the log in case you want to perform a second pass.
Tip: You can choose the folder to save in by running cd folder_name before running the code above.
The Final Verification#
After the first pass, are you not satisfied with the percentage of the disc recovered? No problem, you can run the following code to make 3 more attempts (Just to leave no doubt):
> sudo ddrescue -r3 /dev/sr0 save_name.iso dvd.log
Quick Explanation:#
- -n โ copies quickly, ignores errors
- -r3 โ attempts to re-read bad sectors 3 times
- dvd.log โ allows you to continue later
The dvd.log is a very important file in this process, as it saves both good and problematic sectors. This tells the application, in future attempts, which parts it needs to search for missing data and which it doesn't, saving a lot of processing time - Under no circumstances should you delete this file during the process, as this will force it to start over from the beginning.
โฑ๏ธ The process can take quite a while depending on the scratches and the condition of the disc. If you are using a laptop, prefer doing this at times when you don't need to move it, as you should not disturb the drive during the process, and keep the device charging.
๐ฅ Testing the Recovered ISO#
Open it with VLC media player or mpv. Even with failures, the movie usually plays; there might be small stutters, broken pixels, and skipped parts (the ones that not even a miracle could save because they were so scratched), but normally you can watch it without issues.
๐ฅ EXTRA#
Attempting to skip menus (partial recovery)#
In some cases, the files are recovered without major issues, but the menus might be corrupted, preventing playback. In these cases, mount the ISO directly:
> sudo mount -o loop save_name.iso /mnt
List the files:
> ls /mnt/VIDEO_TS/
And play the largest one:
> vlc /mnt/VIDEO_TS/VTS_01_1.VOB
If the file is protected, use sudo and the codes shown.
You can also do the same through the graphical interface: just click the ISO, press enter, and access the VIDEO_TS folder. All the video files and the menu will be there; then just click "open with" and choose your player.
Converting the ISO to mp4#
Mount the ISO as shown previously and list the files; you will get something like:
VIDEO_TS.BUP VIDEO_TS.VOB VTS_01_0.IFO VTS_02_0.BUP VTS_02_1.VOB VIDEO_TS.IFO VTS_01_0.BUP VTS_01_1.VOB VTS_02_0.IFO
Take all the .VOB files (except for VIDEO_TS.VOB - that is usually the menu), and use them in the following way:
> ffmpeg -i "concat:/mnt/VIDEO_TS/VTS_01_1.VOB|/mnt/VIDEO_TS/VTS_02_1.VOB" \
-c:v libx264 -preset slow -crf 20 \
-c:a aac -b:a 192k \
-movflags +faststart \
save_name.mp4
What this does:
- concat: โ joins the two VOBs in order
- libx264 + crf 20 โ great quality
- aac 192k โ clean audio
- faststart โ MP4 optimized for streaming
I really hope this article was useful to you!!#
If it was, leave a comment below and share it with someone else who might find it useful too!