Jeg er fullstendig noob til videoredigering, så tilgi meg hvis jeg ber om noe latterlig.
Jeg får videoklipp fra en set top recorder-boks. Klippene er AVI-filer:
Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3)
Oppløsningen og FPS er langt utover det jeg trenger, så jeg prøver å kjøre en kommando for å skalere ting ned:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
Dette lykkes med å gi meg ønsket oppløsning, framerate og lavere filstørrelse, men det svekket også kvaliteten mer enn jeg forventet.
Jeg så på den nye filen og fant at FFmpeg av en eller annen grunn konverterte formatet som ble brukt:
Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2
Det er uklart for meg hvorfor det ville ikke bruke de samme utdataformatene som inngangsformatene. Jeg prøvde å bruke denne kommandoen for å tvinge den til å bruke H.264:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Dessverre mislyktes det med følgende utgang:
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers built on Jan 4 2012 16:21:50 with gcc 4.6.1 configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static WARNING: library configuration mismatch avutil configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avcodec configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avformat configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avdevice configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avfilter configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay swscale configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay postproc configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay libavutil 51. 7. 0 / 51. 7. 0 libavcodec 53. 6. 0 / 53. 6. 0 libavformat 53. 3. 0 / 53. 3. 0 libavdevice 53. 0. 0 / 53. 0. 0 libavfilter 2. 4. 0 / 2. 4. 0 libswscale 2. 0. 0 / 2. 0. 0 libpostproc 52. 0. 0 / 52. 0. 0 Input #0, avi, from "highres.avi": Metadata: comment : Quality_GOOD encoder : Lavf52.64.2 encoded_by : AverMedia_c281_1.7.2 Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s [buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p [scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4 [libx264 @ 0x8f0fb40] broken ffmpeg default settings detected [libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium) [libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile> [libx264 @ 0x8f0fb40] speed presets are listed in x264 --help [libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high Output #0, h264, to "lowerresforceh264.avi": Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc Stream mapping: Stream #0.0 -> #0.0 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Jeg er ikke sikker på hvorfor jeg ikke kan gjøre dette. Kjører «ffmpeg -formats» oppførte h264 som en den kunne bruke for både input og output.
Hvis noen kunne peke meg i riktig retning, vil jeg sette stor pris på det. Takk.
PS: Jeg bruker FFmpeg versjon 0.7.3-4: 0.7.3-0 på Ubuntu 11.10.
EDIT
Jeg har fant en løsning der man ser på bruken av forhåndsinnstillinger. Etter å ha sett etter informasjon om forhåndsinnstillinger, fant jeg følgende veiledning som diskuterte dem:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
Jeg trengte bare å spesifisere kodeken og riktig forhåndsinnstilt innstilling slik:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
Jeg har fortsatt litt finjustering å gjøre, men dette er i utgangspunktet det jeg ønsket meg. Takk.
Kommentarer
- Sikker på at noen bare vil vite hvordan man konverterer Avermedia .avi-filer .mp4 slik at de spiller på Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec kopi -acodec kopi fromavermedia_cog.mp4 < / pre >
Svar
I » Jeg prøver å hjelpe. For det første forstår jeg ikke hvorfor du sier at FFMPEG H.264 ikke er inputformatet.
Jeg kjenner ikke FFMPEG-kommandolinjen godt nok (er det noen som gjør? 😉 ). Det må være en bryter for multipass-koding. Jeg vet at det er noen innebygde forhåndsinnstillinger du sannsynligvis kan bruke og gjør nesten helt sikkert det du satser på. Disse kalles vanligvis x264 forhåndsinnstillinger eller x264 melodi. Kan du finne noe sånt?
Kommentarer
- Takk. Din snakk om forhåndsinnstillinger har hjulpet meg med å finne en sannsynlig løsning. Jeg ‘ Jeg redigerer innlegget for å vise hva jeg gjorde.
- Fin løsning. Lagt til i samlingen min. Takk.
- @ BigBeagle: Når du finner svar på spørsmålet ditt, kan du legge det ut som svar. Redigering av spørsmålet ditt er gjort for å gi mer klarhet i spørsmålet. Som jeg forstår, går svarene i svardelen.
Svar
ffmpeg har fjernet sine x264 forhåndsinnstillinger slik at -vpre-innstilling fungerer ikke lenger.
Nå har jeg et skript for å konvertere videofiler til et format mobiltelefonen min kan håndtere.
ffmpeg -i input.avi -sws_flags lanczos+accurate_rnd -vf "scale=320:240" -c:v libx264 -crf 20 -preset veryslow -profile:v main -tune fastdecode -c:a copy output.mkv
Jeg forklarer hvert alternativ
-sws_flags lanczos+accurate_rnd
Dette alternativet er nedskalingsalgoritmen, lanszos anbefales da det gir minst gjenstander uten å bli sløret, men det er treg.
-vf "scale=..."
er selvforklarende spesifiser utgangsoppløsningen
-crf 20
dette er kvalitet, 20 er en god endelig (ikke bruk den før redigering) utgangsinnstilling, dette er konstant kvalitet og er det beste alternativet når filstørrelsen ikke er tett og gir bedre kvalitet til laveste filstørrelse enn noe annet, ellers bruk to passerer for maksimal kvalitet i en bestemt filstørrelse (som å måtte plassere den på en CD eller DVD), fast bithastighet (f.eks. ) skal bare brukes når du streamer, en spesiell sak er» 0 «som er tapsfri og rekkevidden for dette alternativet er fra 1 (høyeste kvalitet) til 50 (laveste kvalitet).
En god test for dette er å kjøre gjennom koden med -crf 20 ta merke til bithastigheten, og bruk deretter den som -b-innstillingen for en 2. versjon av filen, begge skal ha samme filstørrelse, sammenlign de to for kvalitetsforskjeller.
-preset veryslow
dette velger hvor mye CPU du vil bruke, jo langsommere jo mindre er filstørrelsen og bedre kvalitet.
-profile:v main
dette er H.264-profilen å bruke. høy er den mest effektive filstørrelsen, men bruker mye CPU til å dekode i forhold til de andre formatene. Når det er sagt, er det den mest populære, da de fleste mobiltelefoner har en maskinvaredekoder innebygd og flash-spiller støtter det, ikke min, så jeg må bruk hoved.
-tune fastdecode
mobiltelefonen min liker ikke å spille av filene uten dette alternativet, men vanligvis kan dette stå tomt eller settes til «film» for videospill, Hovedgrunnen til at du bruker dette er for å få litt ekstra kvalitet.
Og sist vil jeg anbefale å bruke et moderne containerformat. avi er ikke designet for å holde H.264 og etter det jeg forstår der » s ingen standard for lagring av H.264 eller for å gjøre filen større enn 2 GB, de fleste implementeringer er hack og utsatt for problemer, bruk mkv eller mp4.
Kommentarer
- Forhåndsinnstillingene for libx264 er nå spesifisert av
-preset
som i-preset slow
-
-tune fastdecode
deaktiverer avblokkering og vektede B- og P-rammer, samt CABAC. Det er dekodere som kan håndtere B-rammer, men ikke CABAC? Jeg vil foreslå-profile:v baseline
, hvis du trenger å målrette mot gamle maskinvaredekodere. (fastdecode
kan være nyttig hvis du målretter mot en softwa re dekoder på en langsom CPU, men ikke en maskinvaredekoder.) Hoved med B-rammer, men ingen deblockering eller CABAC ser kanskje ikke bedre ut enn baseline med deblockering. +1 for å anbefale ikke-AVI for lagring av h.264. IIRC, det viktigste er B-rammer, men ja h.264 i avi er ikke godt standardisert, og det ‘ s hacky. - I ‘ d kaller
-crf 20
en høy finale. Du kan endre det til 22 eller til og med 24 og sannsynligvis ha det bra, med mindre det ‘ s high motion, som et sportsarrangement.
Svar
Det er noen ting å gjøre klart:
- Et format er ikke en kodek; du vil hente en fil i avi format med video kodet med h264 kodek. Bare bruk -vcodec libx264 og et filnavn med .avi . Ffmpeg skal gjenkjenne et format ved å se på en filtype, men du kan også være spesifikk å legge til -f avi . Du definitivt ikke vil bruke mpeg1, fordi det gir dårligere kvalitet enn mpeg2 eller enda verre sammenlignet med mpeg4, som jeg anbefaler.
- Problemet ditt var at ffmpeg nettopp brukte lavest mulig kvalitet fordi du ikke spesifiserte noen. Alternativet -sameq ser sjelden ut til å fungere for meg. Det er faktisk veldig håndfull å stille inn bitrate manuelt. Legg til for eksempel -vb 3000k for å få en fil med gjennomsnittlig video bithastighet på 3 Mb / s, noe som gir ganske god kvalitet. Jeg antar at det ville være jevnt nok for deg å ha 2Mb / s for den nevnte oppløsningen.
- Nøkkelen til å senke filstørrelse er ikke oppløsning, men bithastighet nevnt ovenfor. Jeg vil helst holde meg til den opprinnelige oppløsningen og bare manipulere bithastigheten.
- Jeg antar at du også vil beholde lyden uten konvertering (så uten tap av kvalitet), så bruk -acodec-kopi .
Prøv dette: ffmpeg -i highres.avi -acodec kopi -vcodec libx264 -vb 2000k lavere res.avi
Kommentarer
- Konstant bithastighet er den verste (når det gjelder kvalitet vs. størrelse) av alle hastighetskontrollmodus i x264 og bør unngås. Bruk
-crf
til å angi en konstant kvalitetsmodus i stedet.