Jak zpracovat fotky z více zdrojů, aby se daly pustit na televizi
Zpracování velkého počtu fotek z různých zdrojů
Rodinné fotky z akcí    

Bývaly doby, kdy měla rodina jeden lepší foťák nebo aspoň nějaký foťák, na který se zaznamenal výlet, oslava nebo jakákoliv jiná akce. Jenže dneska to s ohledem na kvalitu fotek z mobilu nedává moc smysl. Takže když jedeme jako rodina na nějaký výlet nebo akci, tak na konci máme fotky ze čtyřech mobilů, každý fotograf prásknul pět fotek z každé scény a pokud chceme z toho něco vybrat, co by se pak mohlo promítnout na televizi, tak to musíme dostat na jednu hromadu pořádně probrat. Jinak bychom unudili sami sebe k smrti.

První problém bývá dostat fotky od všech členů výpravy. Tohle naštěstí řeší Synology a aplikace Photos, která zálohuje fotky na NAS. O tom to dneska nebude. Mám fotky z několika mobilů na NAS. Každý z mobilů si je pojmenovává podle svého, takže jsou vždy za sebou fotky z jednoho mobilu, takže i když proberu fotky a nechám z každé scény jen tu nejlepší, tak za chvíli narazím na stejnou scénu vyfocenou jiným mobilem a hledat, kde je to samé foto z jiného mobilu, to je o nervy. Takže potřebujeme všechny fotky nějak seřadit, aby ukazovaly totéž a šlo vybrat jednu nejlepší. Nebudeme řešit AI. Prostě seřadíme fotky podle času. Většinou fotíme ve stejnou dobu stejné věci. K tomu potřebujeme vyřešit iPhone. Některé televize neumí přehrát fotmát HEIC, který používá iPhone, takže zkovertujeme všechno do JPG. K tomu budeme potřebovat imagemagick, který najdete zde: Image Magick a který umí cmd line příkazy, protože jak jinak zpracovávat fotky než v Power Shellu. :-)

Takže předpokládejme, že naházíme všechny fotky do stejné složky. Z fotek načteme datum poslední změny. A všechny přejmenujeme na formát img_ čtyři čísla roku, dvě měsíce, dvě dne, pomlčka a čas ve 24 hodinovém formátu hodina minuta sekunda. Takže výsledek bude vypadat: img_20260304-092103

Jelikož se může stát, že dva lidi vyfotí něco ve stejnou sekundu, tak script bude při přejmenování hlídat, jestli už takový soubor neexistuje a pokud ano, tak na konec přidá _1, pokud by i ten existovat, tak _2 a tak dále. Až přejmenujeme všechny soubory, tak načteme všechny fotky z iPhonu, pošleme je magicku a necháme z nich udělat JPG.

$base_path = "C:\Temp\Process_Photos\Photos"

foreach ($file in $files) {
$id = 0
$name = $file.name
$date = $file.LastWriteTime | Get-Date -Format yyyyMMdd-HHmmss
$old_name = $base_path + "\" + $name

Některé telefony dělají speciální jména pro určitý typ fotek. Například Google Pixel dělá Motion Picture a přidává .MP do jména souboru, některé telefony přidávají .PORTRAIT do jména. Toho se zbavíme.

$name = $name.replace('.MP.','.')

$name = $name.replace('.PORTRAIT','')

Jelikož mám ve složce mix JPG a HEIC, tak potřebujeme přejmenovat soubor, ale zachovat příponu. Kdybychom nejdřív konvertovali HEIC na JPG, tak se změní datum poslední změny a jména nebudou sedět.

$fix = $name.split('.')
$new_name = "img_" + $date + "." + $fix[1]
$test_path = $base_path + "\" + $new_name

Tady následuje test, jestli už soubor se stejným jménem neexistuje a pokud ano, tak zkoušíme jména s indexem, který se zvedá.

$fix = $name.split('.')
$new_name = "img_" + $date + "." + $fix[1]
$test_path = $base_path + "\" + $new_name

if (Test-Path $test_path) {
write-host "Nelze vytvořit $new_name z $old_name"
do {
write-host "Test path: $test_path"
Test-Path $test_path
$id = $id + 1
$new_name = "img_" + $date + "_" + $id + "." + $fix[1]
$test_path = $base_path + "\" + $new_name
} While (
Test-Path $test_path
)
if ($id -ne 0) {write-host "New name: $new_name, Index: $id"}
}

Našli jsme volné jméno, můžeme přejmenovat soubor.

Rename-Item -Path $old_name -NewName $new_name }

Máme přejmenováno, teď ještě vyřešit Apple. Začneme definicí složek, odkud číst a kam zapsat. Zapisuju do stejné složky, takže teoreticky by mi stačila jedna proměnná. Ale občas potřebuju test, takže nechávám oboje. A jako třetí máme cestu k ImageMagick. Upravte podle své verze.

$src = "C:\Temp\Process_Photos\Photos"
$dst = "C:\Temp\Process_Photos\Photos"

$magick = "C:\Program Files\ImageMagick-7.1.2-Q16-HDRI\magick.exe"

No a když zkovertujeme HEIC do JPG, tak se může stát, že tam takový soubor už bude. Takže znovu budeme kontrolovat a přidávat index.

New-Item -ItemType Directory -Force -Path $dst | Out-Null

Get-ChildItem -Path $src -Recurse -File -Include *.heic,*.HEIC | ForEach-Object {
$rel = $_.FullName.Substring($src.Length).TrimStart('\')
$outDir = Join-Path $dst (Split-Path $rel -Parent)
New-Item -ItemType Directory -Force -Path $outDir | Out-Null

$outFile = Join-Path $outDir ($_.BaseName + ".jpg")
$id = 0

if (Test-Path $outFile) {
write-host "Nelze vytvořit $outFile"
do {
write-host "Test path: $outFile"
Test-Path $outFile
$id = $id + 1
$outFile = Join-Path $outDir ($_.BaseName + "_" + $id + ".jpg")
} While (
Test-Path $outFile
)
if ($id -ne 0) {write-host "New name: $outFile, Index: $id"}
}

& $magick $_.FullName -auto-orient -quality 92 $outFile
}

Ten poslední řádek, to je volání ImageMagick s parametry, které zachovají EXIF obrázku, jeho orientaci a nastaví kvalitu na 92, což je rozumná hodnota. No a až máme hotovo, tak smažeme HEIC.

Remove-Item .\photos\*.HEIC -Confirm:$false

No a teď už jen otevřít obrázky v Irfan Veiw nebo něčem podobném a začít promazávat.

Poslední aktualizace - Neděle, 15. Března 2026 14:49
 
 
 
Page 1 of 1
© TNX alias Jan Kovář. Původní design stránky byl určen pro CMS Joomla! a vytvořen společností Siteground web hosting