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.

Flödesschema för FFmpeg-kodningspipelinen

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
← Alla projekt