Teljesen noob vagyok a videoszerkesztéshez, ezért bocsásson meg, ha valami nevetségeset kérek.

Videoklipeket szerzek set set recorder boxból. A klipek AVI fájlok:

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

A felbontás és az FPS jóval meghaladja az elvártakat, ezért megpróbálok futtatni egy parancsot a dolgok kicsinyítéséhez:

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

Ez sikeresen megadta a kívánt felbontást, képkockasebességet és kisebb fájlméretet, de a minőséget is jobban rontotta, mint vártam.

Megnéztem az új fájlt, és megállapítottam, hogy valamilyen oknál fogva az FFmpeg átalakította a használt formátumot:

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

Nem világos számomra, hogy miért nem ugyanazokat a kimeneti formátumokat használja, mint a bemeneti formátumokat. Megpróbáltam ezzel a paranccsal kényszeríteni a H.264 használatára:

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

Sajnos nem sikerült a következő kimenettel:

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 

Nem tudom, miért nem tudom ezt megtenni. Az “ffmpeg -formats” futtatása a h264 listát használta fel mind a bemenetre, mind a kimenetre.

Ha valaki jó irányba tudna mutatni, azt nagyon értékelném. Köszönöm.

PS: Az FFmpeg 0.7.3-4 verzióját használom: 0.7.3-0 az Ubuntu 11.10-en.

EDIT

I “ve megoldást talált az előre beállított értékek használatára. Miután megkeresett információkat az előre beállított értékekről, megtaláltam a következő oktatóanyagot:

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

Csak meg kellett adnom a kodeket és a megfelelő előre beállított beállítást, így:

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

Még mindig van némi csípésem, de alapvetően ezt akartam. Köszönet.

Hozzászólások

  • Bizonyos emberek egyszerűen tudni akarják, hogyan kell konvertálni az Avermedia .avi fájlokat .mp4, hogy a Mountain Lion / Mavericks rendszeren játsszanak < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >

Válasz

I ” segíteni próbálok. Először nem értem, miért mondod, hogy az FFMPEG H.264 nem a bemeneti formátum?

Nem ismerem elég jól az FFMPEG parancssort (van-e valaki, aki csinál? 😉 ). Kapcsolónak kell lennie a többutas kódoláshoz. Tudom, hogy van néhány beépített preset, amelyet valószínűleg használhatna, és szinte biztosan megteheti, amire törekszik. Ezeket általában x264 előre beállítottnak vagy x264 dallamnak hívják. Talál valami hasonlót?

Megjegyzések

  • Köszönöm. Az előre beállított beszélgetések segítettek megtalálni a valószínű megoldást. ‘ Szerkesztem a bejegyzést, hogy megmutassam, mit tettem.
  • Szép megoldás. Hozzáadva a kivonatok gyűjteményéhez. Köszönöm.
  • @BigBeagle: Ha választ talál a kérdésére, azt válaszként közzéteheti. A kérdés szerkesztése a kérdés egyértelműbbé tétele érdekében történik. Mint megértettem, a válaszok a válasz szakaszban találhatók.

Válasz

Az ffmpeg eltávolította az x264-es presetjeiket, így a A -vpre beállítás nem működik tovább.

Most van egy szkriptem a videofájlok konvertálására olyan formátumra, amelyet a mobilom képes kezelni.

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 

Megmagyarázom az egyes opciókat

-sws_flags lanczos+accurate_rnd ez az opció a kicsinyítési algoritmus, a lanczos ajánlott, mivel a legkevesebb artefaktumot hozza létre folt nélkül, de lassú.

-vf "scale=..." magától értetődő, adja meg a kimeneti felbontást

-crf 20 ez az minőség, a 20 egy jó végső (a szerkesztés előtt ne használja) kimeneti beállítás, ez állandó minőség és a legjobb megoldás, ha a fájlméret nem szűk, és a legkisebb fájlméretnél jobb minőséget eredményez, mint bármi más, különben használja két lépés a maximális minőségért egy adott fájlméret mellett (például CD-re vagy DVD-re kell illeszteni), fix bitráta (pl. ) csak streameléskor szabad használni, egy speciális eset a” 0 “, amely veszteségmentes, és ennek az opciónak a tartománya 1-től (legmagasabb minőség) és 50-ig (legalacsonyabb minőség).

Erre jó teszt, ha a -crf 20 kódolást végigfuttatja, vegye tudomásul a bitrátát, majd használja, hogy a fájl 2. verziójának -b beállításának mindkét fájlnak azonos méretűnek kell lennie, hasonlítsa össze a kettőt a minőségi különbségek.

-preset veryslow ez választja ki, hogy mekkora processzort szeretne használni, annál lassabban kisebb a fájlméret és jobb a minőség.

-profile:v main ez a H.264 profil használni. A high a leghatékonyabb fájlméret, de sok CPU-t használ a dekódoláshoz, a többi formátumhoz képest, ami azt mondta, hogy ez a legnépszerűbb, mivel a legtöbb mobiltelefon beépített hardveres dekóderrel rendelkezik, és a flash lejátszó támogatja, az enyém nem, ezért muszáj használja a main.

-tune fastdecode a mobilom nem szereti a fájlokat lejátszani ezen opció nélkül, de általában ezt üresen lehet hagyni, vagy “film” -re lehet állítani a videojátékokhoz, Ennek fő oka az, hogy egy kis extra minőséget érjen el.

És az utolsó dolog, amit nagyon ajánlanék, egy modern tárolóformátumot használjon. s nincs szabvány a H.264 tárolására vagy a fájl 2 GB-nál nagyobb méretre állítására, a legtöbb implementáció feltört és hajlamos problémákra, használja az mkv vagy az mp4 fájlokat.

Megjegyzések

  • A libx264 beállításait mostantól a -preset adja meg, mint a -preset slow
  • letiltja a deblokkolást, valamint a súlyozott B és P kereteket, valamint a CABAC-ot. Vannak olyan dekóderek, amelyek képesek kezelni a B kereteket, de a CABAC nem? , ha régi hardveres dekódereket kell megcéloznia. (fastdecode hasznos lehet, ha egy dekódolót használjon lassú CPU-n, de nem hardveres dekódert.) Fő B-keretekkel, de nincs deblocking vagy CABAC, de lehet, hogy nem is néz ki jobban, mint a deblocking-alapvonal. +1 a nem AVI ajánlásához a h.264 tárolásához. Az IIRC, a fő a B keret, de igen, az avi h.264 nem megfelelően szabványosított, és ‘ s hacky.
  • I ‘ d magas döntőt hív -crf 20. Megváltoztathatja ezt 22-re vagy akár 24-re, és valószínűleg rendben lesz, kivéve, ha ‘ nagy mozgású, mint egy sportesemény.

Válasz

Néhány dolgot tisztázni kell:

  • A formátum nem kodek; egy fájlt szeretne avi formátumban beszerezni kodek. Csak használja a -vcodec libx264 t és egy fájlnevet az .avi kifejezéssel. Az Ffmpegnek fel kell ismernie egy formátumot egy fájlkiterjesztés megtekintésével, de lehet, hogy konkrétan hozzáadja a -f avi t is. Ön határozottan nem akarja használni az mpeg1-et, mert az rosszabb minőséget ad, mint az mpeg2, vagy még rosszabb az mpeg4-hez képest, amit én ajánlok.
  • Az volt a problémád, hogy az ffmpeg csak a lehető legalacsonyabb minőséget használta, mert nem adtál meg semmit. Úgy tűnik, hogy a -sameq opció ritkán működik nekem. Valójában nagyon hasznos kézzel beállítani a bitrátát. Például adjon meg -vb 3000k t, ha olyan fájlt szeretne kapni, amelynek átlagos video bitrátája 3Mb / s, ami nagyon jó minőséget nyújt. Gondolom, ez még neked is elég lenne hogy 2Mb / s legyen az említett felbontáshoz.
  • A fájlméret csökkentésének kulcsa nem a felbontás, hanem a fent említett bitráta. Inkább ragaszkodnék az eredeti felbontáshoz, és csak manipulálnám a bitrátát.
  • Gondolom, a hangot konvertálás nélkül is meg akarja tartani (tehát minőségromlás nélkül), ezért használja az -acodec copy t.

Próbálja ki: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k alacsonyabb res.avi

megjegyzések

  • Az állandó bitsebesség a legrosszabb (a minőséget és a méretet tekintve) az összes sebességszabályozási mód közül x264 és kerülni kell. A -crf segítségével állítson be állandó minőségi módot.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük