Der findes mange open source-værktøjer til redigering, tilpasning og konvertering af multimedier til præcis det, du har brug for. Værktøjer som Audacity eller Handbrake er fantastiske, men nogle gange vil du bare gerne hurtigt ændre en fil fra et format til et andet. Kom ind i FFmpeg.
FFmpeg er en samling af forskellige projekter til håndtering af multimediefiler. Det bruges ofte bag kulisserne i mange andre medierelaterede projekter. På trods af navnet har det intet at gøre med Moving Picture Experts Group eller de utallige multimedieformater, som den har skabt.
I denne artikel vil jeg bruge FFmpeg gennem kommandolinjeværktøjet ffmpeg, som kun er en enkelt, lille del af FFmpeg-projektet. Det er tilgængeligt på mange forskellige styresystemer og er inkluderet i nogle styresystemer som standard. Det kan hentes fra FFmpeg-webstedet eller via de fleste pakkehåndteringsprogrammer.
FFmpeg er et kraftfuldt værktøj, der kan gøre næsten alt, hvad du kan forestille dig, med multimediefiler. I denne artikel er vi interesseret i at bruge det til at konvertere filer, så vi vil ikke foretage et dybdegående dyk i hele dets funktionssæt. Før vi ser på brugen af FFmpeg, skal vi først tage et hurtigt kig på, hvad en mediefil præcis er.
Mediefiler
På et meget højt niveau er en mediefil opdelt i en container og dens streams. Strømmene indeholder de faktiske AV-komponenter, f.eks. en films lyd eller video, og de er kodet ved hjælp af en bestemt mediekodning eller codec. Hver codec har sine egne egenskaber, styrker og svagheder. F.eks. er FLAC-codec’et godt til tabsfri lyd af høj kvalitet, mens Vorbis er designet til at konkurrere med MP3 med hensyn til filstørrelse og samtidig tilbyde bedre lydkvalitet. Det betyder, at en FLAC-formateret fil vil være meget større end en Vorbis-lydstrøm, men den skulle lyde bedre. Ingen af dem er i sagens natur bedre end den anden, da de hver især forsøger at gøre forskellige ting.
Containeren er indpakningen for strømmene. Den præsenterer en enkelt grænseflade, som medieafspillere og værktøjer kan interagere med. Nogle containere er meget avancerede og giver mulighed for alle slags streams, herunder flere video- og lydstreams i en enkelt container. Strømmene i en container behøver dog ikke kun at være lyd eller video. Forskellige containere giver mulighed for forskellige streams, f.eks. undertekster, kapiteloplysninger eller andre metadata. Det afhænger alt sammen af, hvad containeren er indstillet til at tillade.
Dette er en abstrakt repræsentation af mediefiler og springer over mange af forskellene mellem containerne. Mange kræver visse streams og metadata eller sætter begrænsninger på de tilladte codecs eller indhold. Denne forklaring er nok til at få dig igennem denne artikel. Hvis du vil vide mere, skal du klikke på linkene ovenfor.
Vær opmærksom på, at video- og lydkodning kan tage meget lang tid at køre. Du skal være forberedt på at sætte dig til rette i et stykke tid, når du bruger FFmpeg.
Basisk konvertering
Den ting, der snubler de fleste mennesker, når det kommer til konvertering af lyd og video, er at vælge de korrekte formater og containere. Heldigvis er FFmpeg ret smart med sine standardindstillinger. Normalt vælger den automatisk de korrekte codecs og container uden nogen kompleks konfiguration.
Sig f.eks. at du har en MP3-fil og vil have den konverteret til en OGG-fil:
ffmpeg -i input.mp3 output.ogg
Denne kommando tager en MP3-fil kaldet input.mp3 og konverterer den til en OGG-fil kaldet output.ogg. Set fra FFmpegs synspunkt betyder det, at MP3-lydstrømmen konverteres til en Vorbis-lydstrøm og at denne strøm pakkes ind i en OGG-container. Du behøvede ikke at angive stream- eller containertyper, fordi FFmpeg regnede det ud for dig.
Dette virker også med videoer:
ffmpeg -i input.mp4 output.webm
Da WebM er et veldefineret format, ved FFmpeg automatisk, hvilken video og lyd det kan understøtte, og vil konvertere streams til at være en gyldig WebM-fil.
Afhængigt af din valgte container vil dette ikke altid fungere. For eksempel er containere som Matroska designet til at håndtere næsten alle streams, du har lyst til at lægge i dem, uanset om de er gyldige eller ej. Det betyder, at kommandoen:
ffmpeg -i input.mp4 output.mkv
kan resultere i en fil med de samme codecs som input.mp4 havde, hvilket måske eller måske ikke er det, du ønsker.
Vælg dine codecs
Så hvad gør du, når du ønsker at bruge en container som Matroska (som kan håndtere næsten alle streams), men stadig har indflydelse på, hvilke codecs der er i output? FFmpeg til undsætning! Du kan vælge de nødvendige codecs ved at bruge -c-flaget.
Dette flag lader dig indstille de forskellige codecs, der skal bruges for hver stream. Hvis du f.eks. vil indstille lydstrømmen til at være Vorbis, skal du bruge følgende kommando:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Det samme kan gøres for at ændre både video- og lydstrømmen:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Dette vil lave en Matroska-container med en VP9-videostrøm og en Vorbis-lydstrøm, stort set det samme som den WebM, vi lavede tidligere.
Kommandoen ffmpeg -codecs vil udskrive alle de codec, som FFmpeg kender til. Udgangen af denne kommando vil ændre sig afhængigt af den version af FFmpeg, du har installeret.
Ændring af en enkelt stream
Flere gange end du ønsker, er den fil, du har, delvist korrekt med kun en enkelt stream i det forkerte format. Det kan være meget tidskrævende at genindkode den korrekte stream. FFmpeg kan hjælpe med denne situation:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Denne kommando kopierer videostrømmen fra input.webm til output.mkv og koder Vorbis-lydstrømmen til en FLAC. Flaget -c er virkelig kraftfuldt.
Ændring af en container
Det foregående eksempel kan anvendes på både lyd- og videostrømmene, så du kan konvertere fra et containerformat til et andet uden at skulle foretage yderligere stream-kodning:
ffmpeg -i input.webm -c:av copy output.mkv
Indflydelse på kvaliteten
Nu, hvor vi har styr på codecs, er det næste spørgsmål: Hvordan indstiller vi kvaliteten af hver stream?
Den enkleste metode er at ændre bitraten, hvilket måske eller måske ikke resulterer i en anden kvalitet. Menneskets evne til at se og høre er ikke så ren og klar, som vi gerne vil tro. Nogle gange gør det en stor forskel på den subjektive kvalitet at ændre bitrate. Andre gange gør det måske ikke andet end at ændre filstørrelsen. Nogle gange er det meget svært at sige, hvad der vil ske uden at prøve det af.
For at indstille bitraten for hver stream bruger du -b-flaget, som fungerer på samme måde som -c-flaget, bortset fra at du i stedet for codec-optioner indstiller en bitrate.
For eksempel, for at ændre bitraten for videoen, ville du bruge det sådan her:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Dette vil kopiere lyden (-c:a copy) fra input.webm og konvertere videoen til en VP9-codec (-c:v vp9) med en bithastighed på 1M/s (-b:v), alt sammen samlet i en Matroska-container (output.mkv).
En anden måde, vi kan påvirke kvaliteten på, er at justere billedfrekvensen for videoen ved hjælp af indstillingen -r:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Dette skaber en ny Matroska med lydstrømmen kopieret over og videostreamens billedfrekvens tvunget til 30 billeder i sekundet i stedet for at bruge billedfrekvensen fra input (-r 30).
Du kan også justere dimensionerne på din video ved hjælp af FFmpeg. Den enkleste måde er at bruge en forudbestemt videostørrelse:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Dette ændrer videoen til 1280×720 i output, men du kan indstille bredde og højde manuelt, hvis du ønsker det:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Dette giver nøjagtig samme output som den tidligere kommando. Hvis du vil indstille brugerdefinerede størrelser i FFmpeg, skal du huske, at breddeparameteren (1280) kommer før højden (720).
Regulering af billedfrekvens og bitrate er to grove, men effektive teknikker til at påvirke mediekvaliteten. Hvis du indstiller disse værdier meget højt, kan du ikke forbedre kvaliteten af en eksisterende kilde, hvis dens kvalitet allerede er lav.
Ændring af disse indstillinger er mest effektiv til hurtigt at reducere en stream af høj kvalitet for at lave en mindre filstørrelse. Justering af størrelsen på din video kan ikke forbedre kvaliteten, men kan få den til at passe bedre på en tablet i stedet for på dit tv. Ændring af størrelsen af en 640×480-video til 4K vil ikke forbedre den.
La ændring af kvaliteten af dine filer er et meget subjektivt spørgsmål, hvilket betyder, at der ikke er én måde, der virker hver gang. Den bedste metode er at foretage nogle ændringer og teste, om det ser eller lyder bedre for dig.
Modificering af streams
Ofte har du en fil, der er næsten perfekt, og du har bare brug for at trimme et par dele af. Dette kan gøres nemmere med et værktøj, der viser dig, hvad du ændrer, men hvis du ved præcis, hvor du vil have det trimmet, er det meget nemt at gøre det i FFmpeg:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Dette vil kopiere video- og lydstrømme (-c:av copy), men vil trimme videoen. Indstillingen -t indstiller klippevarigheden til at være 10 sekunder, og indstillingen -ss indstiller startpunktet for videoen til trimning, i dette tilfælde på et minut (00:01:00). Du kan være mere præcis end blot timer, minutter og sekunder og gå ned til millisekunder, hvis det er nødvendigt.
Udtræk af lyden
Sommetider er du egentlig ligeglad med videoen, du vil bare have lyden. Heldigvis er dette meget ligetil i FFmpeg med -vn-flaget:
ffmpeg -i input.mkv -vn audio_only.ogg
Denne kommando udtrækker kun lyden fra input, koder den som Vorbis og gemmer den i audio_only.ogg. Nu har du en isoleret lydstrøm. Du kan også bruge -an og -sn-flagene på samme måde til at strippe lyd- og undertekststrømme ud.
Gør en GIF ud af det
For nylig har animerede GIF’er (med et hårdt g, fordi jeg ikke er et monster) fået et comeback. Personligt synes jeg, at GIF er det værste format, man kan vælge til video. Det har en forfærdelig komprimeringskvalitet og størrelse; har meget hårde begrænsninger omkring farver, billedfrekvenser og containermetadata; og kan ikke understøtte lyd. Alligevel er det ret populært. Så hvordan kan du lave et videoklip til en animeret GIF?
Brug af -an-flaget, i lighed med det vi gjorde ovenfor, er bedre end at oprette en animeret GIF, hvis du gerne vil lave en video uden lyd, men der er masser af steder, der understøtter GIF’er, som ikke understøtter et andet videoformat. For alle disse:
ffmpeg -i input.mkv output.gif
Denne kommando opretter en GIF med de samme dimensioner som inputfilen. Dette er ofte en dårlig idé, da GIF’er ikke komprimeres godt i forhold til andre videoformater (min erfaring er, at en GIF vil være omkring otte gange større end kildevideoen). Det kan være nyttigt at bruge indstillingen -s til at ændre størrelsen på din GIF til noget lidt mindre, især hvis inputkilden er ret stor, f.eks. HD-video.
Andre værktøjer
Selv om FFmpeg er det foretrukne værktøj til de fleste AV-opgaver, er det ikke perfekt til alt. Der er nogle værktøjer, der sammen med FFmpeg kan gøre det hele lidt nemmere.
Grabbing videos from YouTube
Det kan være meget nemt at uploade noget til YouTube, miste den originale kildevideo og kun have YouTube-versionen tilbage. Hvad er den nemmeste måde at hente en kopi af dine YouTube-videoer på?
Youtube-dl er et smart lille værktøj, som du kan bruge til at hente videoer fra YouTube og flere andre video-streaming-tjenester. Det er super ligetil at bruge:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Denne kommando downloader videoen på den angivne URL og gemmer den lokalt.
Youtube-dl har flere muligheder for at styre kvaliteten og formatet af den downloadede video, men jeg synes, at det er nemmere at bruge kommandoen ovenfor. Den downloader lyd og video i den højeste kvalitet i en enkelt fil, hvorefter jeg bruger FFmpeg til at konvertere dem til det format, jeg ønsker.
Få oplysninger om medierne
Sommetider er det eneste, du har brug for at vide, hvad der er inde i mediecontaineren. Selv om der er flere værktøjer, der kan gøre dette, er mit foretrukne værktøj MediaInfo. MediaInfo viser alle oplysninger inde i en mediecontainer, for hver af de forskellige streams, samt metadata for inputfilen. Dette giver dig alt, hvad du måske ønsker at vide – og sandsynligvis en masse ting, du ikke vidste.
Kør kommandoen mediainfo inputFile.mkv spytter en liste med oplysninger om inputfilen ud i en menneskeligt læsbar form.
Og mere…
Dette er bare at skrabe på overfladen af, hvad FFmpeg kan gøre. Heldigvis er dokumentationen for FFmpeg og projektets andre værktøjer meget god og værd at tjekke ud. Den vil lære dig alt om de mange forskellige tricks, som denne hund kan lave.
Hvis du er ude efter et værktøj med en grafisk brugerflade til konvertering af multimedier, er Handbrake et usædvanligt godt værktøj, der er tilgængeligt på Linux, Mac OS X og Windows. Handbrake bruger FFmpeg (blandt andre værktøjer) under motorhjelmen.