ffdrop
Drag-to-encode-frontend för ffmpeg och sips. Samlar de transkodningar man kör om och om igen i video-/animationsproduktion — encode, ProRes-intermediates, color-tag-fixar, range-konvertering, audio-extract, PNG-sekvens — och nu bildkonvertering med ICC-profilhantering, bakom en drop-yta istället för ett terminalfönster.
Presets
Varje preset mappar direkt till ett ffmpeg-anrop. Inga dolda heuristiker.
| Preset | Codec / profil | Pixelformat | Audio | Container |
|---|---|---|---|---|
| Video → MP4 (h264) | libx264 · profile main · CRF (default 20) |
yuv420p |
aac 192k / -an |
.mp4 +faststart |
| Video → ProRes 422 Proxy | prores_ks · -profile:v 0 |
yuv422p10le |
pcm_s16le |
.mov |
| Video → ProRes 422 LT | prores_ks · -profile:v 1 |
yuv422p10le |
pcm_s16le |
.mov |
| Video → ProRes 422 HQ | prores_ks · -profile:v 3 |
yuv422p10le |
pcm_s16le |
.mov |
| Video → WAV (extract) | -vn · pcm_s16le |
— | passthrough → PCM | .wav |
| Video → MP3 (extract) | -vn · libmp3lame -q:a 2 |
— | VBR ~190 kbps | .mp3 |
| Video → Lura QuickTime-gamma | -c copy · -color_trc iec61966-2-1 + h264_metadata transfer=13 |
passthrough | passthrough | .mp4 +write_colr |
| Video → Återställ gamma-hack | -c copy · -color_trc bt709 + h264_metadata transfer=1 |
passthrough | passthrough | .mp4 +write_colr |
| PNG-sequence → MP4 h264 | libx264 · CRF 20 |
yuv420p |
— | .mp4 +faststart |
| PNG-sequence → ProRes 422 HQ | prores_ks · -profile:v 3 |
yuv422p10le |
— | .mov |
ProRes-presets sätter -vendor apl0. PNG-sekvenser detekteras på mönster i
droppad mapp; framerate väljs i UI och matas som -framerate.
Color-tag & range
Skriv om color-metadata utan omkodning, eller konvertera range på pixelnivå.
Per-fil-override av primaries / transfer / matrix / range, läst från
ffprobe och presenterat i info-panelen.
Metadata-only (lossless)
Skriver om color-atomerna med -c copy — ingen ny encode, bitströmmen
är orörd. Rättar felflaggade transfer/primaries/matrix/range när taggen är fel
snarare än pixeldatan. (För det Apple-specifika ~1.96-gammaskiftet, se QuickTime-hacket nedan.)
ffmpeg -i in.mov -c copy \
-color_primaries bt709 \
-color_trc bt709 \
-colorspace bt709 \
-color_range tv \
in_retagged.mov
Range-rescale (destruktiv)
När pixelvärdena faktiskt är fel-skalade: bocka i pixel-rescale så läggs ett
scale-steg in i filterkedjan. tv → limited, pc → full,
in_range auto-detekteras.
-vf scale=in_range=auto:out_range=limited
Flaggorna mappar 1:1 mot ffmpeg: -color_primaries /
-color_trc / -colorspace / -color_range.
QuickTime-gamma (fulhack)
macOS ColorSync (QuickTime, Preview, mellanslag i Finder, Safari, Chrome) renderar
Rec.709 i Gamma ~1.96 — plattare och ljusare än 2.2–2.4. VLC och redigerare visar
rätt. Lura QuickTime-gamma taggar om transfer till sRGB (13) på både
container-colr-atomen och H.264-VUI-flaggan, så ColorSync hamnar på
~2.2-kurvan. Pixlarna är orörda. Det är ett nollsummebyte, inte en lagning: filen ser
då fel ut i VLC / Premiere / AE / DaVinci. En och samma fil kan inte se
likadan ut i båda lägren. Återställ gamma-hack skriver transfer tillbaka
till bt709 — bitidentisk rundtur. Endast h264; bara för Mac-visning, aldrig master.
# lura: container + bitström → sRGB
-c copy -color_trc iec61966-2-1 -color_primaries bt709 -colorspace bt709 \
-movflags +faststart+write_colr \
-bsf:v h264_metadata=transfer_characteristics=13:colour_primaries=1:matrix_coefficients=1
h264-kedjan i klartext
MP4-presetet är fullt parametriserat från UI:t. Inget gissas — det här är exakt vad som körs (toggles utelämnade när av):
ffmpeg -y -hide_banner -i in.mov \
[-vf scale=trunc(iw/4)*2:trunc(ih/4)*2] # "skala 50%"
[-vf scale=in_range=auto:out_range=limited] # range-rescale
-c:v libx264 -crf N -preset medium \
-profile:v main -pix_fmt yuv420p -movflags +faststart \
[-color_primaries … -color_trc … -colorspace … -color_range …] \
[-tune grain] # "bevara grain"
[-c:a aac -b:a 192k | -an] \
out_h264_crfN.mp4
Output-filnamnet kodar valen: _h264_crf20_50_grain_noaudio_colortagged.
Skala-uttrycket trunkerar till jämna dimensioner (h264-krav).
Progress läses från -progress pipe:1 mot frame-count från ffprobe.
Bild & ICC
Stillbilder går via sips (inte ffmpeg — som hanterar ICC-profiler dåligt).
Dra in PNG / JPEG / TIFF / HEIC / WebP, konvertera till valfritt utdataformat, med
per-bild ICC-åtgärd. Inga nya beroenden — sips finns i macOS.
| Mål | sips-format | Kvalitet | Alpha | 16-bit |
|---|---|---|---|---|
| Bild → PNG | png | lossless (DEFLATE) | bevaras | bevaras |
| Bild → JPEG | jpeg | formatOptions 1–100 (def 95) | plattas mot vitt | — |
| Bild → TIFF | tiff | lossless | bevaras | bevaras |
| Bild → HEIC | heic | sips default | bevaras | bevaras |
WebP läses som indata men skrivs inte (sips saknar webp-encode). Filändelse mappas till
sips-formatnamn: jpg→jpeg, tif→tiff.
Fyra ICC-åtgärder
Behåll / Assign
Behåll lämnar källprofilen orörd. Assign bäddar in en
vald profil utan att röra pixlarna (sips --embedProfile) — som Photoshops
"Assign Profile". Profil-listan filtreras till embed-bara RGB-profiler (ICC-headern läses;
CMYK/Gray/Lab/abstrakta tone-profiler sållas bort).
sips -s format jpeg \
--embedProfile "…/sRGB Profile.icc" \
in.png --out in_sRGB.jpg
Convert / Ta bort
Convert räknar om pixlarna mellan profiler med renderingsintent
(--matchToWithIntent; perceptual/relative/saturation/absolute).
Ta bort river färgmarkeringen till en fysiskt naken fil via egen
PNG-chunk- och JPEG-marker-kirurgi (inte bara sips, som alltid återbäddar en default).
sips --matchToWithIntent \
"…/Display P3.icc" relative \
in.png --out in_DisplayP3.png
Fallgropar som ffdrop varnar för i UI:t: Convert nedsamplar 16-bit → 8-bit
(Assign bevarar djupet). JPEG saknar alpha — transparens plattas mot vitt (välj PNG/TIFF/HEIC
för att behålla den). Info-panelen läser råfilen, inte sips -g profile
(som rapporterar default-sRGB även på en profil-lös fil). Utdatanamnet kodar profil + kvalitet:
bild_sRGB_q95.jpg.
Krav
- macOS på Apple Silicon (arm64). Ingen universal-binary i nuläget.
- Systemets
ffmpeg+ffprobei PATH (för video/PNG-sekvens). ffdrop bundlar dem inte — den letar i/opt/homebrew/bin,/usr/local/bin,/opt/local/bin, senwhich. - Bildkonvertering använder
sips, som ingår i macOS — inget extra att installera. - Saknas de visar appen en setup-vy och pollar var 3:e sekund tills de dyker upp.
Installera via Homebrew:
brew install ffmpeg. - Signerad (Developer ID) och notariserad — ingen Gatekeeper-override behövs.