Jeg er komplet noob til videoredigering, så tilgiv mig, hvis jeg beder om noget latterligt.

Jeg får videoklip fra en set top-optagerboks. 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) 

Opløsningen og FPS er langt ud over hvad jeg har brug for, så jeg prøver at køre en kommando for at skalere tingene ned:

ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi 

Dette er en succes, der giver mig den ønskede opløsning, framerate og lavere filstørrelse, men det forringede også kvaliteten mere end forventet.

Jeg kiggede på den nye fil og fandt ud af, at FFmpeg af en eller anden grund konverterede det anvendte format:

Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2 

Det er uklart for mig, hvorfor det ville ikke bruge de samme outputformater som inputformater. Jeg forsøgte at bruge denne kommando til at tvinge den til at bruge H.264:

ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi 

Desværre mislykkedes det med følgende output:

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 gøre det. Kører “ffmpeg -formats” anførte h264 som en, den kunne bruge for både input og output.

Hvis nogen kunne pege mig i den rigtige retning, ville jeg sætte stor pris på det. Tak.

PS: Jeg bruger FFmpeg version 0.7.3-4: 0.7.3-0 på Ubuntu 11.10.

REDIGER

Jeg har fundet en løsning, der ser på brugen af forudindstillinger. Efter at have ledt efter oplysninger om forudindstillinger, fandt jeg følgende vejledning, der diskuterede dem:

http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html

Jeg havde bare brug for at specificere codec og den korrekte forudindstillede indstilling som sådan:

ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi 

Jeg har stadig noget tweaking at gøre, men dette er dybest set hvad jeg ønskede. Tak.

Kommentarer

  • Sikker på, at nogle mennesker bare vil vide, hvordan man konverterer Avermedia .avi-filer .mp4, så 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 at hjælpe. For det første forstår jeg ikke, hvorfor du siger, at FFMPEG H.264 ikke er inputformatet?

Jeg kender ikke FFMPEG-kommandolinjen godt nok (er der nogen, der gør?;)). Der skal være en switch til multipass-kodning. Jeg ved, at der er nogle indbyggede forudindstillinger, som du sandsynligvis kunne bruge og gør næsten helt sikkert, hvad du sigter mod. Disse kaldes normalt x264 presets eller x264 tune. Kan du finde noget lignende?

Kommentarer

  • Tak. Din tale om forudindstillinger har hjulpet mig med at finde en sandsynlig løsning. Jeg ‘ Jeg redigerer indlægget for at vise, hvad jeg gjorde.
  • Dejlig løsning. Føjet til min samling af uddrag. Tak.
  • @ BigBeagle: Når du finder et svar på dit spørgsmål, kan du sende det som et svar. Redigering af dit spørgsmål gøres for at give spørgsmålet mere klarhed. Som jeg forstår svarene i svarafsnittet.

Svar

ffmpeg har fjernet deres x264 forudindstillinger, så -vpre-indstilling fungerer ikke mere.

Nu har jeg et script til konvertering af videofiler til et format, som min mobiltelefon 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 hver mulighed

-sws_flags lanczos+accurate_rnd denne mulighed er nedskalingsalgoritmen, lanczos anbefales, da den producerer mindst mulig artefakter uden sløring, men det er langsom.

-vf "scale=..." er selvforklarende angiv outputopløsningen

-crf 20 dette er kvalitet, 20 er en god endelig (brug ikke den før redigering) outputindstilling, dette er konstant kvalitet og er den bedste mulighed, når filstørrelsen ikke er tæt og giver bedre kvalitet ved den laveste filstørrelse end noget andet, ellers brug to passerer for maksimal kvalitet i en bestemt filstørrelse (som at skulle passe den på en CD eller DVD), fast bithastighed (f.eks. ) bør kun bruges under streaming, en speciel sag er” 0 “, som er tabsfri, og rækkevidden for denne mulighed er fra 1 (højeste kvalitet) til 50 (laveste kvalitet).

En god test for dette er at køre gennem koden med -crf 20, bemærk bitrate, og brug derefter det som indstillingen -b for en 2. version af filen, begge skal have samme filstørrelse, sammenlign de to for kvalitetsforskelle.

-preset veryslow dette vælger, hvor meget CPU du vil bruge, jo langsommere jo mindre er filstørrelsen og bedre kvalitet.

-profile:v main dette er H.264-profilen at bruge. høj er den mest effektive filstørrelse klogt, men bruger masser af CPU til at afkode i forhold til de andre formater, når det er sagt, det er det mest populære, da de fleste mobiltelefoner har en hardware-dekoder indbygget, og flash-afspiller understøtter det, min gør det ikke, så jeg skal brug hoved.

-tune fastdecode min mobiltelefon kan ikke lide at afspille filerne uden denne mulighed, men normalt kan dette være tomt eller indstillet til “film” til videospil, Hovedårsagen til, at du bruger dette, er at få lidt ekstra kvalitet.

Og den sidste ting, jeg vil varmt anbefale at bruge et moderne containerformat. avi er ikke designet til at rumme H.264 og efter hvad jeg forstår der s ingen standard til lagring af H.264 eller større fil end 2 GB, de fleste implementeringer er hacks og tilbøjelige til at have problemer, brug mkv eller mp4.

Kommentarer

  • Forudindstillingerne for libx264 er nu specificeret af -preset som i -preset slow
  • -tune fastdecode deaktiverer deblockering og vægtede B- og P-rammer samt CABAC. Der er dekodere, der kan håndtere B-rammer, men ikke CABAC? Jeg vil foreslå -profile:v baseline , hvis du har brug for at målrette mod gamle hardwaredekodere. (fastdecode kan være nyttigt, hvis du målretter mod en softwa re-dekoder på en langsom CPU, men ikke en hardware-dekoder.) Hoved med B-rammer, men ingen deblockering eller CABAC ser måske eller måske ikke bedre ud end baseline med deblockering. +1 for at anbefale ikke-AVI til lagring af h.264. IIRC, det vigtigste er B-rammer, men ja h.264 i avi er ikke godt standardiseret, og det er ‘ s hacky.
  • I ‘ d kalder -crf 20 en høj final. Du kan ændre det til 22 eller endda 24 og sandsynligvis være i orden, medmindre det ‘ s high motion, som en sportsbegivenhed.

Svar

Der er nogle ting at gøre klart:

  • Et format er ikke en codec; du vil hente en fil i avi format med video kodet med h264 codec. Brug bare -vcodec libx264 og et filnavn med .avi . Ffmpeg skal genkende et format ved at se på en filtypenavn, men du kan også være specifik ved at tilføje -f avi . Du vil bestemt ikke ønsker at bruge mpeg1, fordi det giver dårligere kvalitet end mpeg2 eller endnu værre sammenlignet med mpeg4, som jeg anbefaler.
  • Dit problem var, at ffmpeg bare brugte den lavest mulige kvalitet, fordi du ikke angav nogen. Indstillingen -sameq ser sjældent ud til at fungere for mig. Faktisk er det meget håndfuld at indstille bithastigheden manuelt. Tilføj f.eks. -vb 3000k for at få en fil med en gennemsnitlig video bithastighed på 3Mb / s, hvilket giver en ganske god kvalitet. Jeg tror det ville være lige nok for dig at have 2Mb / s til den nævnte opløsning.
  • Nøglen til at sænke filstørrelse er ikke opløsning, men bithastighed nævnt ovenfor. Jeg vil hellere holde mig til den originale opløsning og bare manipulere bithastigheden.
  • Jeg antager, at du også vil beholde lyden uden konvertering (så uden kvalitetstab), så brug -acodec kopi .

Prøv dette: ffmpeg -i highres.avi -acodec kopi -vcodec libx264 -vb 2000k lavere res.avi

Kommentarer

  • Konstant bitrate er den værste (med hensyn til kvalitet versus størrelse) af alle hastighedskontroltilstande i x264 og bør undgås. Brug -crf til at indstille en konstant kvalitetstilstand i stedet.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *