Sunt „completă pentru editare video, așa că iartă-mă dacă îți cer ceva ridicol.
Primesc videoclipuri dintr-un set recorder box. Clipurile sunt fișiere AVI:
Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3)
Rezoluția și FPS depășesc cu mult ceea ce am nevoie, așa că încerc să execut o comandă pentru a reduce lucrurile:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
Acest lucru îmi oferă rezoluția dorită, framerate și o dimensiune mai mică a fișierului, dar a degradat calitatea calității mai mult decât mă așteptam.
M-am uitat la noul fișier și am constatat că, dintr-un anumit motiv, FFmpeg a convertit formatul utilizat:
Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2
Nu este clar de ce nu ar folosi aceleași formate de ieșire ca formatele de intrare. Am încercat să folosesc această comandă pentru a o forța să folosească H.264:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Din păcate, nu a reușit cu următoarea ieșire:
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
Nu „sunt sigur de ce nu pot face acest lucru. Rularea” ffmpeg -formats „listează h264 ca una pe care ar putea să o folosească atât pentru intrare, cât și pentru ieșire.
Dacă cineva ar putea să mă indice în direcția corectă, aș aprecia foarte mult. Mulțumesc.
PS: folosesc versiunea FFmpeg 0.7.3-4: 0.7.3-0 pe Ubuntu 11.10.
EDIT
Am ” a găsit o soluție privind utilizarea presetărilor. După ce am căutat informații despre presetări, am găsit următorul tutorial care le discuta:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
Trebuia doar să specific codecul și setarea corectă prestabilită astfel:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
Mai am de făcut câteva modificări, dar asta este practic ceea ce am vrut. Mulțumesc.
Comentarii
- Sigur că unii oameni doresc pur și simplu să știe cum să convertească fișierele .avi Avermedia .mp4, astfel încât să se joace pe Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >
Răspuns
I ” Încerc să vă ajut. Mai întâi, nu înțeleg de ce spuneți că FFMPEG H.264 nu este formatul de intrare?
Nu știu suficient de bine linia de comandă FFMPEG (există cineva care face? 😉 ). Trebuie să existe un comutator pentru codificarea multipass. Știu că există câteva presetări încorporate pe care probabil le-ați putea folosi și faceți cu siguranță ceea ce doriți. Acestea sunt numite în mod normal presetări x264 sau melodie x264. Puteți găsi așa ceva?
Comentarii
- Mulțumesc. Discuția dvs. despre presetări m-a ajutat să găsesc o soluție probabilă. ‘ voi edita postarea pentru a arăta ce am făcut.
- Soluție minunată. Adăugat la colecția mea de fragmente. Mulțumesc.
- @BigBeagle: Când găsiți un răspuns la întrebarea dvs., îl puteți posta ca răspuns. Editarea întrebării dvs. se face pentru a oferi mai multă claritate întrebării. După cum am înțeles, răspunsurile merg în secțiunea de răspunsuri.
Răspuns
ffmpeg și-a eliminat presetările x264, astfel încât -vpre setarea nu mai funcționează.
Acum, am un script pentru conversia fișierelor video într-un format pe care îl poate gestiona telefonul meu 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
Voi explica fiecare opțiune
-sws_flags lanczos+accurate_rnd
această opțiune este algoritmul de reducere a scalării, lanczos este recomandat deoarece produce cele mai puține artefacte fără estompare, dar este lent.
-vf "scale=..."
se explică de la sine specifică rezoluția de ieșire
-crf 20
acesta este calitate, 20 este o finală bună (nu o utilizați înainte de editare) setarea de ieșire, aceasta este o calitate constantă și este cea mai bună opțiune când dimensiunea fișierului nu este strânsă și va produce o calitate mai bună la cea mai mică dimensiune a fișierului decât orice altceva, altfel utilizați două treceri pentru o calitate maximă la o anumită dimensiune de fișier (cum ar fi necesitatea de a o monta pe un CD sau DVD), bitrate fix (ex. ) trebuie utilizat numai la redare, un caz special este„ 0 ”, fără pierderi, iar gama acestei opțiuni este de la 1 (cea mai înaltă calitate) la 50 (cea mai mică calitate).
Un test bun pentru acest lucru este să rulați prin codificare cu -crf 20 să luați notă de bitrate, apoi să utilizați ca setarea -b pentru a doua versiune a fișierului ambele ar trebui să aibă aceeași dimensiune a fișierului, comparați cele două pentru diferențe de calitate.
-preset veryslow
aceasta alege cât de mult CPU doriți să utilizați, cu atât mai lent este cu atât dimensiunea fișierului este mai mică și o calitate mai bună.
-profile:v main
acesta este profilul H.264 a folosi. Înalt este cea mai eficientă dimensiune a fișierului, dar folosește o mulțime de CPU pentru a decoda în comparație cu celelalte formate, ceea ce se spune că este cel mai popular, deoarece majoritatea telefoanelor mobile au un decodor hardware încorporat și flash player-ul îl acceptă, al meu nu trebuie, așa că folosiți main.
-tune fastdecode
telefonul meu mobil nu-i place să redăm fișierele fără această opțiune, dar de obicei acest lucru poate fi lăsat necompletat sau setat la „filmare” pentru jocuri video, principalul motiv pentru care îl folosiți este să obțineți un pic de calitate suplimentară.
Și ultimul lucru pe care l-aș recomanda cu încredere este să folosiți un format modern de container. nu există standard pentru stocarea H.264 sau pentru a face fișierul mai mare de 2 GB, majoritatea implementărilor sunt hack-uri și sunt predispuse la probleme, folosesc mkv sau mp4.
Comentarii
- Presetările pentru libx264 sunt acum specificate de
-preset
ca în-preset slow
-
-tune fastdecode
dezactivează deblocarea și cadrele B și P ponderate, precum și CABAC. Există decodoare care pot gestiona cadrele B, dar nu CABAC? Aș sugera-profile:v baseline
, dacă trebuie să vizați decodoarele hardware vechi. (fastdecode
ar putea fi util dacă vizați un softwa re decodor pe un procesor lent, dar nu un decodor hardware.) Principal cu cadre B dar fără deblocare sau CABAC ar putea sau nu să arate mai bine decât linia de bază cu deblocare. +1 pentru recomandarea not-AVI pentru stocarea h.264. IIRC, principalul este cadru B, dar da h.264 în avi nu este bine standardizat și este ‘ s hacky. - I ‘ d apelați
-crf 20
un final înalt. Puteți schimba acest lucru la 22 sau chiar 24 și, probabil, să fiți bine, cu excepția cazului în care ‘ este o mișcare ridicată, ca un eveniment sportiv.
Răspuns
Există câteva lucruri de precizat:
- Un format este nu un codec; doriți să obțineți un fișier în format avi format cu videoclip codificat cu h264 codec. Folosiți doar -vcodec libx264 și un nume de fișier cu .avi . Ffmpeg ar trebui să recunoască un format uitându-se la o extensie de fișier, dar poate fi specific și adăugând -f avi . Cu siguranță nu doriți să utilizați mpeg1, deoarece oferă o calitate mai slabă decât mpeg2 sau chiar mai slabă comparare cu mpeg4, pe care o recomand.
- Problema dvs. a fost că ffmpeg tocmai a folosit cea mai mică calitate posibilă, deoarece nu ați specificat niciuna. Opțiunea -sameq pare să funcționeze rar pentru mine. De fapt, este foarte puțin să setați rata de biți manual. Adăugați, de exemplu, -vb 3000k pentru a obține un fișier cu o rată de biți video medie de 3Mb / s, care oferă o calitate destul de bună. Cred că ar fi chiar suficient pentru dvs. să aibă 2Mb / s pentru rezoluția menționată.
- Cheia reducerii dimensiunii fișierului nu este rezoluția, ci rata de biți menționată mai sus. Aș prefera să rămân la rezoluția originală și să manipulez rata de biți.
- Cred că și tu vrei să păstrezi sunetul fără conversie (deci fără pierderi de calitate), așa că folosește -acodec copy .
Încearcă asta: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k mai mic res.avi
Comentarii
- Rata de biți constantă este cea mai proastă (în termeni de calitate vs. dimensiune) dintre toate modurile de control al ratei în x264 și trebuie evitat. Folosiți
-crf
pentru a seta un mod de calitate constantă.