FFmpeg kommandon
FFmpeg kan med fördel kompilera själv till Linux system och Mac (läs om hur man kompilerar själv för Mac OS X eller guide för Ubuntu) Det finns färdiga program att hämta hem men ofta saknas intressanta codecs så som x264 (H264/MPEG4) och MP3 då dessa är behäftade med licensierings problematik (någon annan äger papperet du skriver på). Googla på "ffmpeg +codec" så hittar du mängder av information.
Webm
Webm är ett fritt format som bygger på VP8 codec. Google köpte denna av On2 Technologies och släppte koden fri 2010. Tanken var kanske att göra YouTube fri från Flash (ägare Adobe) och H264 (ägs av MPEG LA?)
Webm Audio
ffmpeg -i infil.aif -codec:a libvorbis -b:a 160k utfil.webm
Webm Video (ungefär samma parametrar som Miro Video Converter använder sig av)
ffmpeg -i infil.mov -strict experimental -f webm -vcodec libvpx -g 120 -lag-in-frames 16 -deadline good -vprofile 0 -qmax 53 -qmin 0 -b:v 768k -acodec libvorbis -ab 160k -ar 48000 -s 720x576 -threads auto utfil.webm
(Denna ger mycket bra videokvalitet och lite filstorlek)
H264 (MPEG4/AAC)
Detta är inget fritt format och kan vara behäftat med dyra licencieringskostnader. Det ägs(?) och är utvecklat av Moving Picture Experts Group:
Koda mpeg4 med x264
(x264 is a free software library for encoding video streams into the H.264/MPEG-4 AVC format.)
Återigen, detta är inget fritt format. Du äger egentligen inte papperet du skriver på. Om du tycker det är komplicerat läs denna sida (som även är en bra sammanfattning för olika videoformat):
http://diveinto.html5doctor.com/video.html
H264/x264 är fortfarande en av dom mest förnämliga videocodecs. Får man bara parametrarna rätt så kan kvalitet/liten filstorlek bli fantastisk bra. X264 är tämligen komplicerat men med en nykompilerad ffmpeg (med stöd för x264) får man god hjälp av presets.
Det här är det enda format som stöds i iOS (med undantag för andra Apple format)
Lossless H.264
Lossless exempel, snabbast encoding (ca 160 fps dualcore processor) men stor fil.
ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv
Lossless exempel, bäst kompression men till priset av lång tid att koda
ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 output.mkv
http://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide
Lägg gärna till metadata:
-metadata title="Milhouse of Sand and Fog"
Deinterlace och andra filter
I tidigare versioner kunde man använda -deinterlace
för att avfläta video. Det funkar fortfarande men är på väg bort.
I stället för -deinterlace (för dålig kvalitét) föreslår ffmpeg detta i stället:
-filter:v yadif
Det är OK är att bara skriva -vf yadif
utan parametrar. Resultatet av detta blir -vf yadif=0:-1:0
. Yadif tar ett antal parametrar (mode:parity:auto).
Parametrar för mode kan vara 0 (output 1 frame for each frame) eller 2 (like 0 but skips spatial interlacing check), siffran 0 är default. Andra modes är 1 (output 1 frame for each field) och 3 (like 1 but skips spatial interlacing check).
Ska man använda parametern parity så måste man veta fältordningen på källan, default är -1 vilket betyder automatic detection.
Parametern auto är intressant då den syftar till bestämma om endast de bildrutor som är markerade som interlace ska avflätas, defalt är 0 (deinterlace all frames). Testa att använda 1 (only deinterlace frames marked as interlaced) i stället.
Jag tycker att -filter:v yadif=2:-1:1
är ett bra alternativ till -deinterlace
när man ska koda film eller animationer (oftast progressive). Kanske bara -yadif,
utan parametrar, kan fungera för vanlig interlaced gammal TV eller slask DV. Det går lite långsammare avfläta med yadif men ger ett bättre resultat.
Kolla även -vf mcdeint=2:1:10
Croppa video:
Crop filter, crop=width:height:x:y
.
Filer exempel där video (720x576px) ska croppas 10px vänster, 2px top, 12px höger, 2px botten samt avfätas:
-filter:v (eller -vf) crop=702,572:10:2,yadif=2:-1:1
Encoding exempel för ffmpeg och x264
Presets finns som är anpassade att omkoda animerad film
ffmpeg -i animerat.mpg -aspect 16:9 -filter:v yadif,crop=702:572:10:2 -c:v libx264 -preset medium -tune animation -crf 22 -c:a libfaac -b:a 160k -async 1 -threads auto animerat.mp4
Filmkodning
Detta exempel är en film som är helt interlaced (alla rutor). Använd -preset slow bara när slutkvalitén är viktig.
ffmpeg -i film.mpg -aspect 16:9 -vf yadif=2:-1:1,crop=720:550:0:12 -c:v libx264 -preset medium -tune film -crf 22 -c:a libfaac -b:a 160k -async 1 -threads auto -metadata title="Filmtitel" film.mp4
Ger H264 High@3 Profile.
x264 presets
-preset
(skriv namnet på en preset för att välja encoding inställningar [ default är medium])
x264 --fullhelp
Name | Overridden by user settings | Kommentar |
ultrafast |
--no-8x8dct --aq-mode 0 --b-adapt 0 --bframes 0 --no-cabac --no-deblock --no-mbtree --me dia --no-mixed-refs --partitions none --rc-lookahead 0 --ref 1 --scenecut 0 --subme 0 --trellis 0 --no-weightb --weightp 0 |
Supersnabb lossless mkv eller mp4 men blir nästan lika stor som originalet. (Ca 250 fps)
|
superfast |
--no-mbtree --me dia --no-mixed-refs --partitions i8x8,i4x4 --rc-lookahead 0 --ref 1 --subme 1 --trellis 0 --weightp 1 |
Snabbare är veryfast, ca 230 fps. Bra kvalitét men stor fil. |
veryfast |
--no-mixed-refs --rc-lookahead 10 --ref 1 --subme 2 --trellis 0 --weightp 1 |
Över 200 fps i Mac. Denna preset är toppen för slask TV, går fort och tar lite plats.
|
faster |
--no-mixed-refs --rc-lookahead 20 --ref 2 --subme 4 --weightp 1 |
OK men blockigt. |
fast |
--rc-lookahead 30 --ref 2 --subme 6 --weightp 1 |
OK för snabba resultat.
|
medium |
(Default settings apply.) |
Prova att inte sätta ett preset så får man denna. |
slow |
--b-adapt 2 --direct auto --me umh --rc-lookahead 50 --ref 5 --subme 8 |
Ger mycket liten filstorlek och bra kvalitet med "-crf 22" Undvik denoice '-vf hqdn3d' som kan ge uppspelnings artifakter. |
slower |
--b-adapt 2 --direct auto --me umh --partitions all --rc-lookahead 60 --ref 8 --subme 9 --trellis 2 |
Ingen märkbar skillnad mot slow |
veryslow |
--b-adapt 2 --bframes 8 --direct auto --me umh --merange 24 --partitions all --ref 16 --subme 10 --trellis 2 --rc-lookahead 60 |
Förnämlig kvalitet. Lossless som blir lite mindre än orginalet men till priset av lång kodtid (kan också bli blockig vid uppspelning). |
placebo |
--bframes 16 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 16 --subme 11 --trellis 2 |
testa |
Den slutsatsen jag dragit är, använd: -preset veryfast|normal|slow
. Allt annat blir för dåligt eller tar för lång tid att koda.
Vorbis Ogg Video
Denna videocodec är inte i mitt tycke lika bra som MPEG4 (H264) eller Webm (VP8). Jag har testat med många parametrar och ska man upp i ungefär samma bildkvalitet som Webm VP8 eller H264 så blir filerna ofta dubbelt så stora. Ljudkvaliteten har jag inga problem med, den motsvar ungefär samma som AAC (MP4 Audio).
Här är en OK variant av Ogg Video/Audio
ffmpeg -i INFIL.dv -strict experimental -codec:v libtheora -q:v 7 -codec:a libvorbis -q:a 6 -threads auto UTFIL.ogv
Det finns alterativa verktyg som kanske är enklare att använda så som "ffmpeg2theora". Dessa inställningar ger bra kvalitet men ganska stor fil.
ffmpeg2theora infil.mov -o utfil.ogv --videoquality 8 --audioquality 7 --aspect 16:9 --pp autolevels:fullyrange --videobitrate 1600k --soft-target --two-pass --optimize
-videoquality [0-10] där ett rimlig värde ligger runt 5 till 8. 10 är max.
-audioquality [0-10] där 7 ger ca 224 kbits/s (vilket är ganska högt för komprimerat ljud, prova lägre värden)
Det verkar som att både ffmpeg2theorea och libtheora (förmodligen samma lib) vill ha raw video som input (lite krånglig metod presenterad här: http://people.xiph.org/~j/ogg-theora-microhowto.html) detta ska tydligen stå i README filen (har inte kollat detta).
|•|
Äldre exempel
Det här är lite äldre exempel som kanske inte är helt kompatibla med en nyare ffmpeg.
Konvertera en QuickTime DV fil till m2v (MPEG2)
ffmpeg -i infil.mov -target dvd mpeg2.m2v
Multipass konvertering
ffmpeg -i infil.mov -deinterlace -s 576x462 -aspect 4:3 -b 900k -sameq -pass 1 -passlogfile logfile -ab 128k -ar 44100 ut_1p.mp4
ffmpeg -i infil.mov -deinterlace -s 576x462 -aspect 4:3 -b 900k -sameq -pass 2 -passlogfile logfile -ab 128k -ar 44100 ut_2p.mp4
Mer:
- -vcodec codec
- -sameq [use same video quality as source (implies VBR)]
Göra MPEG2 filer
time ffmpeg -i infil.dv -qscale 1 -aspect 16:9 -s 720x576 -b 7500k -sameq -vcodec mpeg2video -me full -pass 1 -passlogfile log -ab 224k -ar 48000 utfil_multpass1.mpg
time ffmpeg -i infil.dv -qscale 1 -aspect 16:9 -s 720x576 -b 7500k -sameq -vcodec mpeg2video -me full -pass 2 -passlogfile log -ab 224k -ar 48000 utfil_multpass2.mpgeller:
time ffmpeg -i infil.dv -qscale 1 -aspect 16:9 -s 720x576 -b 7500k -sameq -vcodec mpeg2video -me full -pass 2 -passlogfile log utfil_vbr2.m2veller:
ffmpeg -i my_video.avi -target dvd -aspect 16:9 -sameq my_dvd_video.mpg
Flash Video
Äldre Flash Video format
ffmpeg -i smalfilm03.dv -f flv -deinterlace -s 576x462 -vcodec flv -keyint_min 250 -r 25 -ar 22050 -b 32 -qmin 2 -qmax 15 -g 50 -y -b 600k smalfilm03.flv
ffmpeg -i smalfilm03.dv -croptop 12 -cropleft 12 -cropbottom 12 -cropright 12 -f flv -deinterlace -s 576x462 -vcodec flv -keyint_min 250 -r 25 -ar 22050 -b 32 -qmin 2 -qmax 15 -g 50 -y -b 1000k smalfilm03.flv
ett till exempel
ffmpeg -i infil.avi -f flv -s 704x320 -r 25 -acodec mp3 -ar 44100 -ab 128k -qmin 2 -qmax 15 -g 50 -y -b 1200k -pass 1 -passlogfile ffmpeg.log utfil_p1.flv
ffmpeg -i infil.avi -f flv -s 704x320 -r 25 -acodec mp3 -ar 44100 -ab 128k -qmin 2 -qmax 15 -g 50 -y -b 1200k -pass 2 -passlogfile ffmpeg.log utfil_p2.flv
...
X11 grabbing
Spela in skärm aktiviteter med FFmpeg i en X11 display (Ubuntu eller liknande).
ffmpeg -f x11grab -i :0.0 /tmp/out.mpg(0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable.)
ffmpeg -f x11grab -i :0.0+10,20 /tmp/out.mpg
Spara Single Frame som bild
Extrahera enstaka rutor med
ffmpeg -y -i infil.mp4 -an -r 1 -t 10 -s 160x110 -pix_fmt rgb24 myTest%03d.png
Detta ger 10 rutor
ffmpeg -y -i infil.mp4 -r 25 -ss 00:01:18.000 -an -t 1 -s 160x110 -pix_fmt rgb24 aeolus_704x528%03d.png
Detta ger mig 25 rutor
ffmpeg -y -i infil_704x528.mp4 -r 1 -ss 00:01:18.000 -an -t 1 -s 160x110 -pix_fmt rgb24 aeolus_704x528_%03d.png
Detta ger en bild vid tiden 00:01:18.000 med namnet "infil_704x528_001.png".
|•|