Återskapa bilder enkelt med QPhotoRec i Windows

PhotoRec är ett fritt alternativ när det kommer till att återskapa bilder från minneskort. Jag har tidigare skrivit om expertläget i Terminalen/Kommandotolken, men för enkelhets skull delar jag även här den enkla metoden för Windowsanvändaren där man använder QPhotoRec som har ett bättre gränssnitt än det man vanligtvis kör i Terminalen/Kommandotolken.

Välj vilken version av PhotoRec du vill ladda ned. Där finns WIP (Work In Progress) och den stabila version. Vilken som kvittar och det finns gröna tydliga rutor att ladda ned från ute till höger.

När du laddat ned programmet packar du upp det och lägger det var som helst på datorn, exempelvis på Skrivbordet. Vad du inte ska göra är att lägga det på minneskortet eftersom du då kommer skriva över den data du vill återskapa.

Kör som administratör.
I rullgardinsmenyn väljer du ditt USB-minne. Leta efter en liknande filstorlek som du vet att ditt minneskort har.

Se till att avsöka hela partitionen. Under Filformat kan du begränsa vilka filtyper som programmet ska leta efter. Canons råformat CRW och CR2 ingår i tif-familjen och Canon CR3 ingår i mov-familjen. Låt det vara om du är osäker.

Välj vilken plats. Trycker du Bläddra och sedan OK kommer en mapp döpt till recup-dir.1 att skapas i ursprungsmappen. Beroende på antal filer kan fler mappar tillkomma. När du är redo trycker du på Sök.

Fil-familjen tif har här hittats. I detta fall Canons CR2.
Samtliga råfiler återskapade.

Canons lågnivåformatering

I Canons kameror som använder SD-kort finns ytterligare ett alternativ till att formatera minneskortet. Nämligen lågnivåformatering.

I detta fall ska man trycka på ikonen för soptunnan för att kryssa i lågnivåformatering.

Fördelen är att kortets skrivhastighet återställs och från Canons manualer står dessa två meningar:

  • ”Formatera kort genom att välja [Lågnivåformatering] i [ : Formatera kort] innan du spelar in 4K-filmer.”

”Utför lågnivåformatering om kortets skriv- eller läshastighet förefaller långsam eller om du vill radera alla data på kortet.”

Nackdelen är att man inte längre med enkla program som Recuva eller Photorec kommer kunna återskapa någonting som funnits på kortet innan lågnivåformateringen. I stället behöver man gå förbi SD-kortets kontrollenhet vilket inte är en lika lätt process.

Inbäddade YouTube-klipp omfattas ej av utgivningsbeviset

Varför återställs skrivhastigheten?

Minneskort kan till skillnad från hårddiskar inte skriva över annan information innan den raderat den befintliga informationen.

Från minneskortstillverkaren Kingston står följande att finna:

”Garbage Collection är nyckeln till att NAND-flash ska vara hållbart och behålla sin hastighet. NAND-flashbaserade enheter kan inte skriva över data som redan finns där. De måste gå igenom en Program/Erase-cykel för att skriva till ett redan använt datablock. En NAND-flashstyrenhet kopierar först alla giltiga data (som fortfarande används) och skriver dem till tomma sidor i ett annat block. Därefter raderas alla celler i det aktuella blocket (både giltiga och ogiltiga data), för att sedan börja skriva nya data till det nyligen raderade blocket. Denna process kallas Garbage Collection.”

Nu när vi vet att en radering behövs innan ny information skrivs står följande att finna hos pawitp.medium.com:

En sak är att SD-kort stöder vad som kallas ”CMD38” som talar om för SD-kortet att radera vissa block utan att faktiskt skriva nollor till platsen.

Användningsfallet är som följer. Anta att du vill förbereda dig för att kasta bort eller ge ett SD-kort till någon annan, du vill inte att andra människor ska kunna återställa dina data som det skulle vara möjligt med ett normalt snabbformat. Ditt SD-kort har en kapacitet på 32 GB och kan skriva med 10 MB/s. Att göra en fullständig radering där du skriver noll till varje block skulle ta cirka 1 timme. Det skulle också i onödan slita ut flashminnet om du planerar att återanvända det.

Alternativt kan du med hjälp av ”CMD38” snabbt be SD-kortet att bara radera allt i stället för att be det skriva nollor överallt. Det här går naturligtvis snabbare eftersom styrenheten inte raderar blocken utan bara kommer ihåg att om användaren begär dessa block ska noll returneras i stället (dvs. en ”logisk” radering).

Det är fortfarande möjligt att återställa data om angriparen är tillräckligt sofistikerad för att läsa flashen direkt genom att kringgå styrenheten, men då måste kortet öppnas med hjälp av dyr utrustning.

Man behöver alltså inte skriva över hela kortet med nollor utan kan bara be styrenheten att säga att alla block ska vara noll. Det är därför en lågnivåformatering i Canons kameror bara tar några sekunder att genomföra.

Nedan finns ett prestandatest från ett Samsung MicroSD EVO 256 GB Plus U3. Lägsta skrivhastighet för videoinspelning ska vara 30 MB/s. Detta kort sitter i min bilkamera och när det blir fullt tas de första filmerna bort och kameran fortsätter därefter att skriva till den fria delen. Efter att jag stoppat i kortet i datorn och raderat samtliga filmer prestandatestade jag kortet. Skrivhastigheten hamnade då kring 6 MB/s.

Efter en lågnivåformatering i en Canon lät jag därefter återigen prestandatesta kortet. Genomsnittlig skrivhastighet hamnade nu på 72 MB/s.

Med SanDisk Extreme Pro V30 låg den genomsnittliga skrivhastigheten på 75 MB/s. Däremot var det två stora prestandasänkningar som skulle kunna få en videoinspelning att avbrytas.

Genomsnittlig skrivhastighet efter en lågnivåformatering hamnade på 79 MB/s och utan några stora prestandasänkningar.

Avkoda Canons metadata med Exiftool

Exchangeable image file format, Exif, är en öppen standard som innebär att kameratillverkaren bäddar in viktig data i bildfilen. Exempelvis vilket fabrikat och vilken kameramodell. Även kamerainställningar som bländare/ISO/slutartid, datum/tid och geografisk position. Utöver det finns det även någonting som heter MakerNote.

I MakerNote får kameratillverkaren själv bestämma sina egna metadatataggar. Inte heller behöver kameratillverkaren berätta vad taggarna innebär eller är till för och kan t.o.m. välja att kryptera taggarna.

Varför en kameratillverkare inte publicerar en lista över vad taggarna i MakerNote betyder är en gåta. Speciellt när vissa delar innehåller viktig information som exempelvis black level, d.v.s. den förskjutning man måste göra med råfilen för att den inte ska få färgstick.

Black level 2048 till vänster vs black level 0 till höger.

Att felsöka andras kameraproblem försvåras också när man inte vet vilka specifika inställningar som använts eller vilka temperaturer kameran haft.

Det verkar bra märkligt att från kameratillverkarens sida bädda in en mängd information såsom slutarläge, exponeringsräknare eller flimmerreducering för att sedan aldrig låta fotograferna ta del av dem.

Exiftool

Ett populärt program för att analysera metadata är Exiftool och med programmet kan man själv försöka sig på att avkoda just sådana metadatataggar i fältet MakerNote som fortfarande är okända. Exiftool har för Canon en förteckning över vilka taggar som är avkodade. Tänk på att de inte behöver stämma till 100%. Exempelvis taggen som döps till Measured EV 2 som man trodde hade med uppmätt exponeringsvärde att göra har med nyare kameror värden som är helt uppåt väggarna.

Exiftool för Linux

Ladda ned senaste version, packa upp och lägg filen exiftool och dess mapp lib i din lokala användarmapp Hem>.local>bin. Se till att visa dolda filer är ikryssad.

Öppna terminalen någonstans och kontrollera att det är senaste version du har genom att skriva:

$ exiftool -ver

Nu kan du börja analysera dina råfiler. Med kommandot -U visas okända taggar och om man lägger till kommandot -G får man reda på om det rör sig om Exif, MakerNotes eller Composite (taggar som Exiftool själv skapar genom att kombinera vissa befintliga taggar).

Exempel där * syns är vad som kallas för wildcard. Har man 100 råfiler i CR2-format behöver man inte beskriva alla vid namn utan alla filer som har CR2 i slutet kommer användas. Fungerar i Linux men ej i Windows.

$ exiftool -U -G *CR2

För att få ned allt till textfiler kan man lägga till -w för write.

out är mappnamnet och  %f_%e.txt innebär att varje textfil får samma namn som råfilens namn.

exiftool -U -G -w out/%f_%e.txt *CR2

Linux: diff i Terminalen

Öppna Terminalen i den mapp där du har dina textfiler och välj två som du vill analysera skillnaden hos.

$ diff _M7D0195_CR2.txt _M7D0196_CR2.txt
Kommandot diff i Linux för att jämföra skillnader.

För att exportera allt till en textfil lägger man till följande i slutet:

$ diff _M7D0195_CR2.txt _M7D0196_CR2.txt > Ny-textfil.txt

Windows: fc i CMD

För att jämföra textfilernas skillnad kan man öppna kommandotolken, CMD, i den mapp man har sina textfiler liggandes. Därefter skriver man när man jämför textfilerna:

fc _M7D0195_CR2.txt _M7D0196_CR2.txt
Kommandot fc i Windows för att jämföra skillnader.

För att exportera allt till en textfil lägger man till följande i slutet:

fc _M7D0195_CR2.txt _M7D0196_CR2.txt > Ny-textfil.txt

Exempel från verkligheten

R6 flimmerreducering

Jag tog totalt 40 bilder med flimmerreduceringen från en R6 av/på.

Därefter jämförde jag de okända taggarna och kunde se att en tagg, Canon File Info 0x0020, ändrade sig i takt med att jag aktiverade och inaktiverade flimmerreduceringen. Genom att lägga till kommandot nedan kunde jag isolera taggen för att få en enklare överblick.

 |grep "File Info 0x0020"

Det blev rätt tydligt att taggen hade med flimmerreduceringen att göra.

exiftool -U /home/macgyver/Publikt/Canon/Exiftool/0x0020/*CR3 |grep "File Info 0x0020"


Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1

Därefter postade jag informationen i Exiftools forum och bidrog till att taggen accepterades av Exiftool.

Mappa bort laserskadade pixlar med RawTherapee

Kamerasensorer är känsliga för laser och det räcker med en kort exponering för att det ska bli en permanent skada som kräver att sensorn byts ut.

Inbäddade YouTube-klipp omfattas ej av utgivningsbeviset

Med en ny kamera kan det vara värt att betala för att byta sensor, men har man en äldre kanske det är både enklare och mer ekonomiskt att ersätta den med en begagnad likvärdig kamera.

Är skadorna på sensorn begränsade skulle man kunna fortsätta använda kameran bara genom att mappa bort, d.v.s. gömma, de defekta pixlarna.

Råkonverteraren RawTherapee har just en sådan funktion. Med hjälp av en textfil kan man skriva in de defekta pixlarnas koordinater och därmed svartlista dem från att användas. Textfilen måste döpas till samma namn som det som RawTherapee visar.

Exempel med Canon EOS 5D IV

I manualen till RawTherapee står följande:

RawTherapee can correct a list of bad pixels (pixels that are always black or white or stuck at one color) for your particular camera model. To do this, you need to write a text file with the absolute raw coordinates of these pixels: each line specifies a pixel with x<space>y<return> positions.

Man behöver alltså identifiera de trasiga pixlarna och skriva in dem i en textfil. Textfilen ska ha samma namn som det namn som visas i RawTherapee.

I detta fall blir det alltså:

Canon EOS 5D Mark IV.badpixels

Eftersom RawTherapee dessutom beskär råfilen något, 4 pixlar med Bayer-sensor och 7 pixlar för X-Trans-sensor (Fujifilms egna sensor) behöver man skriva in förskjutningen på den första raden i textfilen. I mitt fall rör det sig om en Canon EOS 5D IV som använder den vanliga Bayer-sensorn vilket innebär att jag sätter 4 överst. Därefter börjar man skriva in de skadade pixlarnas positioner.

Det kan underlätta att stänga av vitbalansen i RawTherapee.

Positionerna får man lättast genom att öppna råfilen i RawTherapee och välja en neutral profil. Under Demosaicing väljer man Mono eller None. Ute till vänster får man positionerna i x och y. Skriv in dessa i textfilen.

Testa nu att det fungerar. Spara textfilen och se till att den ligger i en mapp dit Dark-frames directory pekar. Starta om RawTherapee varje gång du uppdaterat textfilen.

Råfiler från Dpreview-användaren ash92, inklusive textfil.

Tips och tricks

Fotografera någonting som är rosa för att få en jämnare övergång mellan de olika pixlarna. Märks när man stänger av vitbalansen och väljer None i Demosaicing. Mer detaljer hur man går till väga finns på engelska här.

För laserskador som sträcker sig över hela linjer och kolumner kan man använda Excel eller LibreOffice för att lägga in de två första koordinaterna och sedan dra ned fältet för att generera tusentals positioner på några sekunder.