En snabbguide om hur du använder FFmpeg för att konvertera mediefiler

Det finns många verktyg med öppen källkod för att redigera, finjustera och konvertera multimedier till exakt vad du behöver. Verktyg som Audacity eller Handbrake är fantastiska, men ibland vill du bara snabbt ändra en fil från ett format till ett annat. Kom in i FFmpeg.

FFmpeg är en samling olika projekt för hantering av multimediefiler. Det används ofta bakom kulisserna i många andra medierelaterade projekt. Trots namnet har det inget att göra med Moving Picture Experts Group eller de otaliga multimediaformat som de har skapat.

I den här artikeln kommer jag att använda FFmpeg genom kommandoradsverktyget ffmpeg, som bara är en enda, liten del av FFmpeg-projektet. Det finns tillgängligt på många olika operativsystem och ingår som standard i vissa operativsystem. Det kan laddas ner från FFmpegs webbplats eller via de flesta pakethanterare.

FFmpeg är ett kraftfullt verktyg som kan göra nästan allt du kan tänka dig med multimediefiler. I den här artikeln är vi intresserade av att använda det för att konvertera filer, så vi kommer inte att göra en djupdykning i alla dess funktioner. Innan vi tittar på hur vi använder FFmpeg måste vi först ta en snabb titt på vad en mediefil exakt är.

Mediafiler

På en mycket hög nivå är en mediefil uppdelad i en container och dess strömmar. Strömmarna innehåller de faktiska AV-komponenterna, t.ex. en films ljud eller video, och är kodade med hjälp av en viss mediekodning, eller codec. Varje codec har sina egna egenskaper, styrkor och svagheter. Exempelvis är FLAC-codec bra för förlustfritt ljud av hög kvalitet, medan Vorbis är utformad för att konkurrera med MP3 när det gäller filstorlek samtidigt som den erbjuder bättre ljudkvalitet. Detta innebär att en FLAC-formaterad fil kommer att vara mycket större än en Vorbis-ljudström men bör låta bättre. Ingen av dem är i sig bättre än den andra, eftersom var och en försöker göra olika saker.

Containern är en omslagsform för strömmarna. Den presenterar ett enda gränssnitt som mediaspelare och verktyg kan interagera med. Vissa behållare är mycket avancerade och tillåter alla typer av strömmar, inklusive flera video- och ljudströmmar i en enda behållare. Strömmarna i en behållare behöver dock inte bara vara ljud eller video. Olika behållare tillåter olika strömmar, t.ex. undertexter, kapitelinformation eller andra metadata. Allt beror på vad containern är inställd på att tillåta.

Detta är en abstrakt representation av mediefiler och hoppar över många av skillnaderna mellan containrar. Många kräver vissa strömmar och metadata eller sätter begränsningar på tillåtna codecs eller innehåll. Denna förklaring räcker för att ta dig igenom den här artikeln. Om du vill veta mer klickar du på länkarna ovan.

Var medveten om att video- och ljudkodning kan ta mycket lång tid att köra. Du bör vara beredd på att slå dig ner ett tag när du använder FFmpeg.

Grundläggande konvertering

Det som får de flesta att snubbla när det gäller att konvertera ljud och video är att välja rätt format och behållare. Som tur är är FFmpeg ganska smart med sina standardinställningar. Vanligtvis väljer den automatiskt rätt codecs och behållare utan någon komplicerad konfiguration.

Säg till exempel att du har en MP3-fil och vill ha den konverterad till en OGG-fil:

ffmpeg -i input.mp3 output.ogg

Detta kommando tar en MP3-fil som heter input.mp3 och konverterar den till en OGG-fil som heter output.ogg. Ur FFmpegs synvinkel innebär detta att MP3-ljudströmmen konverteras till en Vorbis-ljudström och att denna ström förpackas i en OGG-behållare. Du behövde inte ange ström- eller behållartyper eftersom FFmpeg räknade ut det åt dig.

Detta fungerar även med videor:

ffmpeg -i input.mp4 output.webm

Då WebM är ett väldefinierat format vet FFmpeg automatiskt vilken video och vilket ljud som stöds och omvandlar strömmarna så att de blir en giltig WebM-fil.

Avhängigt av vilken behållare du väljer fungerar detta inte alltid. Containrar som Matroska är till exempel utformade för att hantera nästan alla strömmar du vill lägga in i dem, oavsett om de är giltiga eller inte. Detta innebär att kommandot:

ffmpeg -i input.mp4 output.mkv

kan resultera i en fil med samma codecs som input.mp4 hade, vilket kanske eller kanske inte är vad du vill ha.

Välja dina codecs

Så vad gör du när du vill använda en behållare som Matroska (som kan hantera nästan vilken ström som helst) men ändå påverka vilka codecs som finns i utdata? FFmpeg till undsättning! Du kan välja de codecs som behövs genom att använda flaggan -c.

Denna flagga låter dig ställa in de olika codecs som ska användas för varje stream. Om du till exempel vill ställa in att ljudströmmen ska vara Vorbis använder du följande kommando:

ffmpeg -i input.mp3 -c:a libvorbis output.ogg

Det samma kan göras för att ändra både video- och ljudströmmen:

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

Detta kommer att göra en Matroska-container med en VP9-videoström och en Vorbis-audioström, i stort sett samma sak som WebM som vi gjorde tidigare.

Kommandot ffmpeg -codecs kommer att skriva ut alla codec som FFmpeg känner till. Utmatningen av det här kommandot kommer att ändras beroende på vilken version av FFmpeg du har installerat.

Byte av en enskild ström

Fler gånger än vad du skulle vilja är filen du har delvis korrekt med bara en enda ström i fel format. Det kan vara mycket tidskrävande att koda om den korrekta strömmen. FFmpeg kan hjälpa till med den här situationen:

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

Detta kommando kopierar videoströmmen från input.webm till output.mkv och kodar Vorbis-ljudströmmen till en FLAC. Flaggan -c är verkligen kraftfull.

Byte av behållare

Det tidigare exemplet kan tillämpas på både ljud- och videoströmmarna, vilket gör att du kan konvertera från ett behållarformat till ett annat utan att behöva göra någon ytterligare kodning av strömmen:

ffmpeg -i input.webm -c:av copy output.mkv

Influera kvaliteten

När vi nu har koll på codecs är nästa fråga: Hur ställer vi in kvaliteten för varje ström?

Den enklaste metoden är att ändra bitraten, vilket kan eller inte kan resultera i en annan kvalitet. Människans förmåga att se och höra är inte så ren och tydlig som vi vill tro. Ibland gör en ändring av bitraten en enorm skillnad för den subjektiva kvaliteten. Andra gånger kanske det inte gör något annat än att ändra filstorleken. Ibland är det mycket svårt att säga vad som kommer att hända utan att prova det.

För att ställa in bitraten för varje ström använder du flaggan -b, som fungerar på samma sätt som flaggan -c, förutom att du i stället för codec-alternativ ställer in en bitrate.

För att ändra bitraten för videon skulle du till exempel använda den så här:

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

Detta kommer att kopiera ljudet (-c:a copy) från input.webm och konvertera videon till en VP9-codec (-c:v vp9) med en bithastighet på 1M/s (-b:v), allt paketerat i en Matroska-behållare (output.mkv).

Ett annat sätt vi kan påverka kvaliteten är att justera videons bildfrekvens med alternativet -r:

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

Detta skapar en ny Matroska med ljudströmmen kopierad över och videoströmmens bildfrekvens tvingad till 30 bilder per sekund, i stället för att använda bildfrekvensen från inmatningen (-r 30).

Du kan också justera dimensionerna på din video med FFmpeg. Det enklaste sättet är att använda en förutbestämd videostorlek:

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

Detta ändrar videon till 1280×720 i utdata, men du kan ställa in bredden och höjden manuellt om du vill:

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

Detta ger exakt samma utdata som det tidigare kommandot. Om du vill ställa in anpassade storlekar i FFmpeg ska du komma ihåg att parametern bredd (1280) kommer före höjden (720).

Justering av bildfrekvens och bithastighet är två grova men effektiva tekniker för att påverka mediekvaliteten. Att ställa in dessa värden mycket högt kan inte förbättra kvaliteten på en befintlig källa om dess kvalitet redan är låg.

Att ändra dessa inställningar är mest effektivt för att snabbt minska en högkvalitativ ström för att göra en mindre filstorlek. Att justera storleken på videon kan inte förbättra kvaliteten, men kan få den att passa bättre på en surfplatta i stället för på tv:n. Att ändra storleken på en 640×480-video till 4K kommer inte att förbättra den.

Att ändra kvaliteten på dina filer är en mycket subjektiv fråga, vilket innebär att det inte finns något sätt som fungerar varje gång. Den bästa metoden är att göra några ändringar och testa om det ser eller låter bättre för dig.

Modifiera strömmarna

Ofta har du en fil som är nästan perfekt och du behöver bara klippa bort några delar. Detta kan göras lättare med ett verktyg som visar vad du ändrar, men om du vet exakt var du vill att det ska trimmas är det mycket enkelt att göra det i FFmpeg:

ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv

Detta kommer att kopiera video- och ljudströmmarna (-c:av copy) men kommer att trimma videon. Alternativet -t ställer in klipptiden till 10 sekunder och alternativet -ss ställer in startpunkten för videon för trimning, i det här fallet vid en minut (00:01:00). Du kan vara mer exakt än bara timmar, minuter och sekunder och gå ner till millisekunder om det behövs.

Extrahera ljudet

Ibland bryr du dig inte om videon, du vill bara ha ljudet. Som tur är är detta mycket enkelt i FFmpeg med flaggan -vn:

ffmpeg -i input.mkv -vn audio_only.ogg

Detta kommando extraherar endast ljudet från inmatningen, kodar det som Vorbis och sparar det i audio_only.ogg. Nu har du en isolerad ljudström. Du kan också använda flaggorna -an och -sn på samma sätt för att strippa ut ljud- och undertextströmmar.

Göra en GIF av det

Nyligen har animerade GIF:er (med ett hårt g eftersom jag inte är ett monster) gjort comeback. Personligen tycker jag att GIF är det sämsta formatet man kan välja för video. Det har en fruktansvärd komprimeringskvalitet och storlek, har mycket hårda begränsningar kring färger, bildfrekvenser och metadata för behållare, och kan inte stödja ljud. Ändå är det ganska populärt. Så hur kan du göra ett videoklipp till en animerad GIF?

Att använda flaggan -an, i likhet med vad vi gjorde ovan, är bättre än att skapa en animerad GIF om du vill göra en video utan ljud, men det finns många ställen som har stöd för GIF som inte har stöd för ett annat videoformat. För alla dessa:

ffmpeg -i input.mkv output.gif

Detta kommando skapar en GIF med samma dimensioner som inmatningsfilen. Detta är ofta en dålig idé, eftersom GIF:er inte komprimeras bra i förhållande till andra videoformat (enligt min erfarenhet blir en GIF cirka åtta gånger större än källvideon). Det kan vara till hjälp att använda alternativet -s för att ändra storleken på din GIF till något lite mindre, särskilt om ingångskällan är ganska stor, t.ex. HD-video.

Andra verktyg

Men även om FFmpeg är det bästa verktyget för de flesta AV-uppgifter, är det inte perfekt för allt. Det finns några verktyg som, om de används tillsammans med FFmpeg, kan göra allting lite enklare.

Hämtning av videor från YouTube

Det kan vara mycket lätt att ladda upp något till YouTube, förlora den ursprungliga källvideon och bara ha YouTube-versionen kvar. Vilket är det enklaste sättet att hämta en kopia av dina YouTube-videor?

Youtube-dl är ett smart litet verktyg som du kan använda för att hämta videor från YouTube och flera andra videoströmningstjänster. Det är superenkelt att använda:

youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0

Detta kommando hämtar videon på den angivna webbadressen och sparar den lokalt.

Youtube-dl har flera alternativ för att kontrollera kvaliteten och formatet på den hämtade videon, men jag tycker att det är enklare att använda kommandot ovan. Det laddar ner ljud och video av högsta kvalitet i en enda fil, sedan använder jag FFmpeg för att konvertera dem till det format jag vill ha.

Få information om media

Ibland är allt du behöver veta vad som finns i mediakontainern. Det finns flera verktyg som kan göra detta, men mitt favoritverktyg är MediaInfo. MediaInfo visar all information inuti en mediebehållare, för var och en av de olika strömmarna, samt metadata för inmatningsfilen. Detta ger dig allt du kanske vill veta – och förmodligen en massa saker som du inte visste.

Att köra kommandot mediainfo inputFile.mkv spottar ut en lista med information om inmatningsfilen i en mänskligt läsbar form.

Och mer…

Det här är bara att skrapa på ytan av vad FFmpeg kan göra. Som tur är är dokumentationen för FFmpeg och projektets andra verktyg mycket bra och värd att kolla in. Den lär dig allt om de många olika trick som den här hunden kan göra.

Om du är ute efter ett verktyg med ett grafiskt gränssnitt för konvertering av multimedia är Handbrake ett exceptionellt bra verktyg som finns tillgängligt för Linux, Mac OS X och Windows. Handbrake använder FFmpeg (bland andra verktyg) under huven.

Lämna ett svar

Din e-postadress kommer inte publiceras.