This is an encoder script for EAC "Test & copy image" mode.
It splits the WAV image to WAV singletracks according to the EAC CUE and encodes them to FLACs.
Its goal is to produce perfect FLAC files by verifying checksums in all steps and being totally paranoid.
For guaranteeing this, it does the following checks and aborts if any of them fails:
- It checks the EAC LOG to make sure that AccurateRip reported a flawless rip.
- It computes the AccurateRip checksums of the splitfiles which it has created and compares them with the ones from the EAC LOG.
- It re-joins the singletrack files to an image and compares the checksum with the checksum of the original image from EAC to make sure that it would be possible to burn an identical CD again.
- It encodes the singletracks to FLAC with very carefully chosen settings. The full manpage of FLAC was read by me when chosing the settings.
- It runs flac --test on each singletrack which makes FLAC test the integrity of the file.
- It decodes each singletrack to WAV again and compares the checksums with the checksums of the original WAV splitfiles.
Additional features are:
- The script has 4 stages of output: Split singletracks, rejoined image from singletracks, encoded FLAC from singletracks, decoded FLAC to singletracks again. There are 4 config variables which can be used to make the script deliberately cause damage to any of the 4 stages. This can be used for making very sure that the checksum validation actually detects corruption.
Website: https://github.com/leo-bogert/perfect-flac-encode
Sample output:
perfect-flac-encode.sh Version BETA2 running ...
BETA VERSION - NOT for productive use!
Album: Paul Weller - Wild Wood
Checking EAC LOG for whether AccurateRip reports a perfect rip...
AccurateRip reports a perfect rip.
Splitting WAV image to singletrack WAVs...
shntool [split]: warning: discarding initial zero-valued split point
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/01 - Sunflower.wav] (4:06.62) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/02 - Can you heal us (holy man).wav] (3:41.68) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/03 - Wild wood.wav] (3:22.30) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/04 - Instrumental one (Part 1).wav] (1:37.05) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/05 - All the pictures on the wall.wav] (3:56.47) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/06 - Has my fire really gone out.wav] (3:51.38) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/07 - Country.wav] (3:38.60) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/08 - Instrumental two.wav] (0:49.52) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/09 - 5th season.wav] (4:54.00) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/10 - The weaver.wav] (3:43.08) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/11 - Instrumental one (Part 2).wav] (0:33.42) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/12 - Foot of the mountain.wav] (3:37.60) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/13 - Shadow of the sun.wav] (7:36.43) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/14 - Holy man (Reprise).wav] (1:50.72) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/15 - Moon on your pyjamas.wav] (4:02.00) : .......... OK
Splitting [Paul Weller - Wild Wood.wav] (54:04.55) --> [Stage1_WAV_Singletracks_From_WAV_Image/16 - Hung up.wav] (2:41.68) : .......... OK
Comparing AccurateRip checksums of split WAV singletracks to AccurateRip checksums from EAC LOG...
AccurateRip checksum of track 01: 12A17108, expected 12A17108. OK.
AccurateRip checksum of track 02: B8B12553, expected B8B12553. OK.
AccurateRip checksum of track 03: EE647F8C, expected EE647F8C. OK.
AccurateRip checksum of track 04: 198D1B89, expected 198D1B89. OK.
AccurateRip checksum of track 05: 443F683F, expected 443F683F. OK.
AccurateRip checksum of track 06: D4EA2156, expected D4EA2156. OK.
AccurateRip checksum of track 07: 23A1013A, expected 23A1013A. OK.
AccurateRip checksum of track 08: 59846ADB, expected 59846ADB. OK.
AccurateRip checksum of track 09: 562695D4, expected 562695D4. OK.
AccurateRip checksum of track 10: F8F465AC, expected F8F465AC. OK.
AccurateRip checksum of track 11: 779AA114, expected 779AA114. OK.
AccurateRip checksum of track 12: 826FDC3D, expected 826FDC3D. OK.
AccurateRip checksum of track 13: 08E26E72, expected 08E26E72. OK.
AccurateRip checksum of track 14: BB90680D, expected BB90680D. OK.
AccurateRip checksum of track 15: 37AAC77A, expected 37AAC77A. OK.
AccurateRip checksum of track 16: 1A3CD493, expected 1A3CD493. OK.
Joining singletrack WAV temporarily for comparing their checksum with the original image's checksum...
Joining [Stage1_WAV_Singletracks_From_WAV_Image/01 - Sunflower.wav] (4:06.62) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/02 - Can you heal us (holy man).wav] (3:41.68) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/03 - Wild wood.wav] (3:22.30) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/04 - Instrumental one (Part 1).wav] (1:37.05) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/05 - All the pictures on the wall.wav] (3:56.47) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/06 - Has my fire really gone out.wav] (3:51.38) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/07 - Country.wav] (3:38.60) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/08 - Instrumental two.wav] (0:49.52) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/09 - 5th season.wav] (4:54.00) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/10 - The weaver.wav] (3:43.08) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/11 - Instrumental one (Part 2).wav] (0:33.42) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/12 - Foot of the mountain.wav] (3:37.60) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/13 - Shadow of the sun.wav] (7:36.43) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/14 - Holy man (Reprise).wav] (1:50.72) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/15 - Moon on your pyjamas.wav] (4:02.00) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
Joining [Stage1_WAV_Singletracks_From_WAV_Image/16 - Hung up.wav] (2:41.68) --> [Stage2_WAV_Image_Joined_From_WAV_Singletracks/joined.wav] (54:04.55) : .......... OK
No padding needed.
Computing checksums...
Original checksum: e47804481da6959636de7fbad147e3f2b2131c682aa54f07a2405d2b27aa7bdf
Checksum of joined image: e47804481da6959636de7fbad147e3f2b2131c682aa54f07a2405d2b27aa7bdf
Checksum of joined image OK.
Encoding singletrack WAVs to FLAC ...
NOTE: --keep-foreign-metadata is a new feature; make sure to test the output file before deleting the original.
Running flac --test on singletrack FLACs...
Decoding singletrack FLACs to WAVs to validate checksums ...
NOTE: --keep-foreign-metadata is a new feature; make sure to test the output file before deleting the original.
Generating checksums of original WAV files...
Validating checksums of decoded WAV singletracks ...
01 - Sunflower.wav: OK
02 - Can you heal us (holy man).wav: OK
03 - Wild wood.wav: OK
04 - Instrumental one (Part 1).wav: OK
05 - All the pictures on the wall.wav: OK
06 - Has my fire really gone out.wav: OK
07 - Country.wav: OK
08 - Instrumental two.wav: OK
09 - 5th season.wav: OK
10 - The weaver.wav: OK
11 - Instrumental one (Part 2).wav: OK
12 - Foot of the mountain.wav: OK
13 - Shadow of the sun.wav: OK
14 - Holy man (Reprise).wav: OK
15 - Moon on your pyjamas.wav: OK
16 - Hung up.wav: OK
All checksums OK.