Dokončuji úpravy videa, takže mi odpusťte, pokud požádám o něco směšného.

Dostávám videoklipy ze set top rekordéru. Klipy jsou soubory AVI:

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

Rozlišení a FPS přesahují to, co požaduji, takže se pokouším spustit příkaz pro zmenšení velikosti věci:

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

Díky tomu jsem dosáhl požadovaného rozlišení, snímkové rychlosti a menší velikosti souboru, ale také to zhoršilo kvalitu více, než jsem čekal.

Podíval jsem se na nový soubor a zjistil jsem, že z nějakého důvodu FFmpeg převede použitý formát:

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

Není mi jasné, proč to nepoužil bych stejné výstupní formáty jako vstupní formáty. Snažil jsem se pomocí tohoto příkazu vynutit použití H.264:

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

Bohužel se to nezdařilo s následujícím výstupem:

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 

Nejsem si jistý, proč to nemohu udělat. Spuštění „ffmpeg -formats“ uvádí h264 jako jeden, který by mohl použít pro vstup i výstup.

Pokud by mě někdo dokázal nasměrovat správným směrem, velmi bych si toho vážil. Děkuji.

PS: Používám FFmpeg verze 0.7.3-4: 0.7.3-0 na Ubuntu 11.10.

EDITOVAT

Já našel řešení zaměřené na použití předvoleb. Po vyhledání informací o předvolbách jsem našel následující výukový program, který o nich diskutuje:

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

Potřeboval jsem specifikovat kodek a správné přednastavené nastavení takto:

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

Stále mám nějaké vylepšení, ale to je v podstatě to, co jsem chtěl. Děkujeme.

Komentáře

  • Určitě někteří lidé prostě chtějí vědět, jak převést soubory Avermedia .avi .mp4, aby mohli hrát na Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >

odpověď

I “ Snažím se pomoci. Nejprve nechápu, proč říkáte, že FFMPEG H.264 není vstupní formát?

Neznám dostatečně dobře příkazový řádek FFMPEG (existuje někdo, kdo dělá?;)). Musí existovat přepínač pro kódování více pasů. Vím, že existuje několik vestavěných předvoleb, které byste pravděpodobně mohli použít a dělat téměř jistě to, na co míříte. Obvykle se jim říká x264 přednastavení nebo x264 tune. Naleznete něco takového?

Komentáře

  • Děkuji. Vaše řeč o předvolbách mi pomohla najít pravděpodobné řešení. ‚ Upravím příspěvek tak, aby ukázal, co jsem udělal.
  • Pěkné řešení. Přidáno do mé sbírky úryvků. Děkujeme.
  • @BigBeagle: Když najdete odpověď na svou otázku, můžete ji zveřejnit jako odpověď. Úprava otázky se provádí, aby byla otázka jasnější. Jak jsem pochopil, odpovědi se nacházejí v sekci odpovědí.

Odpověď

ffmpeg odstranil své předvolby x264, takže Nastavení -vpre již nefunguje.

Nyní mám skript pro převod video souborů do formátu, který zvládne můj mobil.

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 

Vysvětlím každou možnost

-sws_flags lanczos+accurate_rnd tato možnost je algoritmus downscalingu, doporučuje se lanczos, protože produkuje nejméně artefaktů bez rozmazání, ale je pomalé.

-vf "scale=..." je samo o sobě určující výstupní rozlišení

-crf 20 toto je quality, 20 is a good final (don „t use it before editing) output setting, this is constant quality and is the best option when file size isn“ t tight and will produce better quality at smaller file size than anything else, otherwise use dva průchody pro maximální kvalitu při konkrétní velikosti souboru (jako je potřeba umístit jej na CD nebo DVD), pevný datový tok (např. ) by mělo být použito pouze při streamování, speciální případ je“ 0 „, který je bezztrátový a rozsah této možnosti je od 1 (nejvyšší kvalita) do 50 (nejnižší kvalita).

Dobrým testem je spustit kódování pomocí -crf 20, zaznamenat datový tok a poté jej použít jako nastavení -b pro 2. verzi souboru, oba by měly mít stejnou velikost souboru, porovnejte dva pro rozdíly v kvalitě.

-preset veryslow zvolíte, kolik CPU chcete použít, tím pomaleji je to menší velikost souboru a lepší kvalita.

-profile:v main toto je profil H.264 použít. high je nejefektivnější velikost souboru, ale ve srovnání s ostatními formáty používá k dekódování spoustu CPU, což je považováno za nejpopulárnější, protože většina mobilních telefonů má vestavěný hardwarový dekodér a flash player to podporuje, moje ne, takže musím použijte hlavní.

-tune fastdecode můj mobilní telefon nemá rád přehrávání souborů bez této možnosti, ale u videoher to obvykle může být prázdné nebo nastaveno na „film“ Hlavním důvodem, proč to používáte, je získat trochu extra kvality.

A poslední věc, kterou bych velmi doporučil použít moderní formát kontejneru .avi není navržen tak, aby obsahoval H.264 a podle toho, čemu tam rozumím “ s žádný standard pro ukládání H.264 nebo zvětšení souboru na více než 2 GB, většina implementací je hackování a může mít problémy, použijte mkv nebo mp4.

Komentáře

  • Předvolby pro libx264 jsou nyní specifikovány -preset jako v -preset slow
  • -tune fastdecode zakáže odblokování a vážené B a P rámce, stejně jako CABAC. Existují dekodéry, které zvládnou B rámce, ale ne CABAC? Navrhuji -profile:v baseline , pokud potřebujete cílit na staré hardwarové dekodéry. (fastdecode může být užitečné, pokud cílíte na softwu re dekodér na pomalém CPU, ale ne hardwarový dekodér.) Hlavní s B snímky, ale žádný deblocking nebo CABAC nemusí nebo nemusí vypadat lépe než baseline s deblockem. +1 za doporučení ne-AVI pro ukládání h.264. IIRC, hlavní jsou B snímky, ale jo h.264 v avi není dobře standardizovaný a je ‚ s hacky.
  • I ‚ d volejte -crf 20 vysoké finále. Můžete to změnit na 22 nebo dokonce 24 a pravděpodobně budete v pořádku, pokud to nebude ‚ s vysokým pohybem, jako je sportovní událost.

Odpověď

Je třeba objasnit několik věcí:

  • Formát je not kodek; chcete získat soubor ve formátu avi s videem kódovaným pomocí h264 kodek. Stačí použít -vcodec libx264 a název souboru s .avi . Ffmpeg by měl rozpoznat formát při pohledu na příponu souboru, ale můžete také specificky přidat -f avi . Určitě ne chcete použít mpeg1, protože poskytuje horší kvalitu než mpeg2 nebo ještě horší ve srovnání s mpeg4, který doporučuji.
  • Váš problém spočíval v tom, že ffmpeg právě používal nejnižší možnou kvalitu, protože jste žádnou nezadali. Zdá se, že volba -sameq pro mě zřídka funguje. Ve skutečnosti je velmi užitečné nastavit bitrate ručně. Přidejte například -vb 3000k , abyste získali soubor s průměrným datovým tokem videa 3 Mb / s, což dává docela dobrou kvalitu. Myslím, že by vám to stačilo mít 2Mb / s pro uvedené rozlišení.
  • Klíčem ke snížení velikosti souboru není rozlišení, ale bitrate zmíněný výše. Raději bych se držel původního rozlišení a manipuloval s bitrate.
  • Myslím, že si také chcete ponechat zvuk bez konverze (takže bez ztráty kvality), proto použijte -acodec copy .

Zkuste toto: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k nižší res.avi

Komentáře

  • Konstantní datový tok je nejhorší (z hlediska kvality vs. velikosti) ze všech režimů řízení rychlosti v x264 a je třeba se mu vyhnout. Místo toho použijte -crf režim stálé kvality.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *