Ik “ben helemaal niet bezig met videobewerking, dus vergeef me als ik om iets belachelijks vraag.

Ik krijg videoclips uit een set-top recorder box. De clips zijn AVI-bestanden:

Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3) 

De resolutie en FPS zijn veel hoger dan ik nodig heb, dus ik probeer een commando uit te voeren om dingen te verkleinen:

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

Dit is gelukt om me de gewenste resolutie, framerate en lagere bestandsgrootte te geven, maar het verminderde ook de kwaliteit veel meer dan ik had verwacht.

Ik keek naar het nieuwe bestand, en ontdekte dat FFmpeg om de een of andere reden het gebruikte formaat converteerde:

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

Het is mij niet duidelijk waarom het zou niet dezelfde uitvoerformaten gebruiken als invoerformaten. Ik heb geprobeerd dit commando te gebruiken om het H.264 te dwingen:

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

Helaas is het mislukt met de volgende 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 

Ik “weet niet zeker waarom ik” dit niet kan. Met het draaien van “ffmpeg -formats” werd h264 vermeld als een die het zou kunnen gebruiken voor zowel input als output.

Als iemand me in de goede richting zou kunnen wijzen, zou ik dat enorm op prijs stellen. Bedankt.

PS: ik gebruik FFmpeg-versie 0.7.3-4: 0.7.3-0 op Ubuntu 11.10.

EDIT

Ik heb vond een oplossing door het gebruik van presets te bekijken. Nadat ik informatie over voorinstellingen had gezocht, vond ik de volgende tutorial waarin ze werden besproken:

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

Ik hoefde alleen de codec en de juiste preset-instelling als volgt te specificeren:

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

Ik heb nog wat aanpassingen te doen, maar dit is eigenlijk wat ik wilde. Bedankt.

Reacties

  • Natuurlijk willen sommige mensen gewoon weten hoe ze Avermedia .avi-bestanden .mp4 kunnen converteren zodat ze kunnen worden afgespeeld op Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >

Antwoord

I ” ik probeer te helpen. Ten eerste begrijp ik niet waarom je zegt dat FFMPEG H.264 niet het invoerformaat is?

Ik ken de FFMPEG-opdrachtregel niet goed genoeg (is er iemand die doet? 😉 ). Er moet een schakelaar zijn voor multipass-codering. Ik weet dat er enkele ingebouwde presets zijn die je waarschijnlijk zou kunnen gebruiken en die vrijwel zeker doen waar je naar streeft. Deze worden normaal gesproken x264-voorinstellingen of x264-melodieën genoemd. Kun je zoiets vinden?

Reacties

  • Bedankt. Uw gesprek over presets heeft me geholpen een waarschijnlijke oplossing te vinden. Ik ‘ zal het bericht bewerken om te laten zien wat ik deed.
  • Mooie oplossing. Toegevoegd aan mijn verzameling fragmenten. Bedankt.
  • @BigBeagle: als je een antwoord op je vraag vindt, kun je deze als antwoord posten. Het bewerken van uw vraag wordt gedaan om de vraag meer duidelijkheid te geven. Zoals ik begrijp, gaan de antwoorden in het antwoordgedeelte.

Answer

ffmpeg heeft hun x264-presets verwijderd, zodat de -vpre-instelling werkt niet meer.

Nu heb ik een script voor het converteren van videobestanden naar een formaat dat mijn mobiel aankan.

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 

Ik zal elke optie uitleggen

-sws_flags lanczos+accurate_rnd deze optie is het algoritme voor het verkleinen, lanczos wordt aanbevolen omdat het de minste artefacten produceert zonder vervaging, maar het is langzaam.

-vf "scale=..." spreekt voor zich, specificeer de uitvoerresolutie

-crf 20 dit is de kwaliteit, 20 is een goede laatste (gebruik het niet voor het bewerken) uitvoerinstelling, dit is een constante kwaliteit en is de beste optie als de bestandsgrootte niet krap is en een betere kwaliteit oplevert bij de laagste bestandsgrootte dan al het andere, gebruik anders twee doorgangen voor maximale kwaliteit bij een specifieke bestandsgrootte (zoals het op een cd of dvd moeten passen), vaste bitsnelheid (bijv. ) mag alleen worden gebruikt bij het streamen, een speciaal geval is” 0 “wat geen verlies oplevert en het bereik van deze optie is van 1 (hoogste kwaliteit) tot 50 (laagste kwaliteit).

Een goede test hiervoor is om de codering met -crf 20 te doorlopen, let op de bitrate, en die dan te gebruiken als de -b instelling voor een 2e versie van het bestand, beide moeten dezelfde bestandsgrootte hebben, vergelijk de twee voor kwaliteitsverschillen.

-preset veryslow dit kiest hoeveel CPU je wilt gebruiken, hoe langzamer het is hoe kleiner de bestandsgrootte en hoe beter de kwaliteit.

-profile:v main dit is het H.264-profiel te gebruiken. high is de meest efficiënte bestandsgrootte, maar gebruikt veel CPU om te decoderen in vergelijking met de andere formaten, dat gezegd hebbende, het is het meest populair omdat de meeste mobiele telefoons een ingebouwde hardwaredecoder hebben en de flash-speler dit ondersteunt, de mijne niet, dus ik moet gebruik main.

-tune fastdecode mijn mobiel speelt de bestanden niet graag af zonder deze optie, maar meestal kan dit leeg worden gelaten of op “film” worden gezet voor videogames, de De belangrijkste reden dat je dit gebruikt, is om een beetje extra kwaliteit te krijgen.

En het laatste wat ik ten zeerste zou aanbevelen om een modern containerformaat te gebruiken .avi is niet “ontworpen om H.264 te bevatten en van wat ik daar begrijp” s geen standaard voor het opslaan van H.264 of het groter maken van het bestand dan 2GB, de meeste implementaties zijn hacks en kunnen problemen veroorzaken, gebruik mkv of mp4.

Reacties

  • De voorinstellingen voor libx264 worden nu gespecificeerd door -preset zoals in -preset slow
  • -tune fastdecode schakelt deblokkering en gewogen B- en P-frames uit, evenals CABAC. Er zijn decoders die B-frames aankunnen, maar niet CABAC? Ik zou -profile:v baseline voorstellen , als u zich moet richten op oude hardwaredecoders. (fastdecode kan handig zijn als u zich richt op een software re-decoder op een langzame CPU, maar geen hardwaredecoder.) Main met B-frames maar zonder deblokkering of CABAC ziet er misschien wel of niet beter uit dan de basislijn met deblokkering. +1 voor het aanbevelen van niet-AVI voor het opslaan van h.264. IIRC, de hoofdframes zijn B-frames, maar ja, h.264 in avi is niet goed gestandaardiseerd, en het is ‘ hacky.
  • I ‘ d noem -crf 20 een hoge finale. Je kunt dat veranderen in 22 of zelfs 24 en waarschijnlijk komt het wel goed, tenzij het ‘ veel beweging heeft, zoals een sportevenement.

Answer

Er zijn enkele dingen die duidelijk moeten worden gemaakt:

  • Een indeling is niet een codec; je wilt een bestand in avi formaat met video gecodeerd met h264 codec. Gebruik gewoon -vcodec libx264 en een bestandsnaam met .avi . Ffmpeg zou een indeling moeten herkennen door naar een bestandsextensie te kijken, maar u kunt ook specifiek zijn door -f avi toe te voegen. U en niet wilt beslist mpeg1 gebruiken, omdat het een slechtere kwaliteit geeft dan mpeg2 of zelfs erger vergeleken met mpeg4, wat ik aanraad.
  • Uw probleem was dat ffmpeg zojuist de laagst mogelijke kwaliteit gebruikte omdat u er geen “geen” hebt gespecificeerd. De optie -sameq lijkt zelden voor mij te werken. In feite is het erg lastig om de bitrate handmatig in te stellen. Voeg bijvoorbeeld -vb 3000k toe om een bestand te krijgen met een gemiddelde video bitsnelheid van 3 MB / s, wat een redelijk goede kwaliteit oplevert. Ik denk dat het zelfs genoeg voor je zou zijn om 2 MB / s te hebben voor de genoemde resolutie.
  • De sleutel tot het verlagen van de bestandsgrootte is niet de resolutie, maar de bitrate die hierboven is vermeld. Ik blijf liever bij de oorspronkelijke resolutie en manipuleer gewoon de bitrate.
  • Ik denk dat je de audio ook zonder conversie wilt behouden (dus zonder kwaliteitsverlies), dus gebruik -acodec copy .

Probeer dit: ffmpeg -i highres.avi -acodec kopie -vcodec libx264 -vb 2000k lager res.avi

Reacties

  • Constante bitrate is de slechtste (in termen van kwaliteit vs. grootte) van alle snelheidsregelingsmodi in x264 en moet worden vermeden. Gebruik -crf om in plaats daarvan een modus voor constante kwaliteit in te stellen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *