Automatiserad kodningspipeline med FFmpeg
En Bash-driven pipeline som automatiserar videotranskodning, formatkonvertering och filorganisation med FFmpeg. Den tar bort repetitivt manuellt kodningsarbete och gör resultatet förutsägbart.
Problemet
Video kommer från olika källor med inkonsekventa codecs, containrar, upplösningar och metadata. Att köra FFmpeg för hand för varje fil är långsamt och lätt att göra fel: en glömd flagga ger en fil som ser bra ut tills den når en spelare som inte kan avkoda den.
Pipeline:n standardiserar processen. Filer läggs i en indatamapp; kodade filer kommer ut, med inställningarna dokumenterade.
Så fungerar det
Ett watcher-skript bevakar en angiven indatamapp. När en ny fil dyker upp identifierar pipeline:n källformatet, väljer matchande kodningsprofil och köar jobbet. Varje jobb kör FFmpeg med en fast uppsättning parametrar och skriver en logg för granskning.

Pipelinens steg: inotifywait triggar på nya filer, en profilväljare väljer codec-parametrar, FFmpeg transkodar och resultatet hamnar i mappar för lyckade eller misslyckade jobb.
Filer flyttas — inte kopieras — till en arbetsmapp före kodning, så en halvskriven uppladdning aldrig plockas upp. Lyckade och misslyckade jobb separeras på disk, vilket gör en misslyckad batch uppenbar utan att läsa loggen först.
Kodningsprofiler
Profiler är konfigurationsfiler som anger codec, bitrate, upplösningsmål, ljudinställningar och containerformat. Att lägga till en profil kräver inga ändringar i kärnskriptet. Standarduppsättningen täcker H.264 för webb, H.265 för arkivering och extrahering av enbart ljud.
Metadata
Pipeline:n bevarar källmetadata där den finns — skapelsetid, titel och kommentarsfält — och lägger på en konsekvent uppsättning utdatataggar. GPS-koordinater inbäddade i materialet behålls i utdatacontainern.
Felhantering
Misslyckade jobb flyttas till en felmapp tillsammans med FFmpegs stderr-utdata. Lyckade jobb flyttas till utdatamappen, och källan arkiveras eller raderas enligt konfigurationen.
En sammanfattande logg registrerar antal jobb, varaktighet och fel för varje körning. Inget hänger på att någon tittar på terminalen: om en körning misslyckas finns beviset på disk.
Byggt med
- Bash
- FFmpeg
- inotifywait
- H.264
- H.265
- Linux