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.