Care este cel mai bun mod de a converti un fișier mp4 în webm fără pierderi de calitate (folosind vp8 sau vp9) cu ffmpeg?

Dacă fac ffmpeg -i in.mp4 out.webm calitatea este foarte proastă. Pot specifica un bitrate țintă prin -b:v și modul de calitate constantă prin crf, adică

ffmpeg -i in.mp4 -crf 10 -b:v 1M out.webm

Acest lucru oferă o calitate mai bună. Cu toate acestea, pentru asta trebuie să caut bitrate-ul video de intrare (aici 1M).

De asemenea, am observat că, dacă specificați o valoare mult mai mare pentru rata de biți țintă decât rata de biți a intrării (aici de exemplu -b:v 100M), ffmpeg pare să utilizați aproximativ rata de biți de la videoclipul de intrare cu vp9 sau rata de biți puțin mai mare cu vp8. Cu toate acestea, această soluție nu pare a fi modalitatea intenționată de a face acest lucru.

Cum ați alege valoarea crf și de ce?

Există un parametru care alege automat rata de biți a fișierul de intrare și o valoare CRF adecvată pentru a obține aceeași calitate ca fișierul de intrare?

Comentarii

  • Setați rata de biți la 0. Și experimentați cu crf Dar metoda dvs. de o rată de biți mare funcționează și ea, deoarece valoarea acționează ca un plafon nu ca o țintă
  • @Mulvya: Rata de biți 0 înseamnă că nu există limită? Nu am făcut ' nu găsiți acest lucru în pagina manuală.
  • Cu rata de biți nu setată la zero, CRF este limitată de acea valoare. Cu zero, ' Nu este. Este ' o ciudățenie a codificatoarelor VPn.
  • Bine, dar dacă omit complet parametrul bitrate, calitatea devine foarte proastă, chiar și eu nu ' nu da o limită superioară pentru rata de biți.
  • Link pentru 200k (vezi prima optiune pe). Pentru WebM b: v 0, consultați această pagină .

Răspuns

Răspuns

Utilizați modul de calitate constantă în două treceri: ¹

ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 1 -an -f webm /dev/null ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 2 output.webm 

Explicație:

Setarea ratei de biți video la zero în timp ce se specifică și CRF (Constant Rate Factor) activează modul Constant Quality care vizează un anumit nivel de calitate perceptual. Pentru VP9, CRF poate varia de la 0 (cea mai bună calitate) la 63 (cea mai mică dimensiune a fișierului).

Este important să setați rata de biți video la zero. Dacă nu specificați o rată de biți video, aceasta va fi implicită la un nivel scăzut, ceea ce vă va aduce modul de calitate Constrâns , unde fiecare cadru are o rată de biți maximă. Deși acest lucru poate fi util pentru streaming, reduce calitatea în mod semnificativ, deoarece cadrele cu multă mișcare nu vor avea lățimea de bandă necesară pentru a arăta bine.

O altă parte a motivului pentru care pierdeți calitatea este că webm (VP9) preferă codificarea în două treceri pentru cele mai bune rezultate. Prima trecere compilează statistici despre videoclip, care este apoi utilizată în a doua trecere pentru a realiza un videoclip de calitate mai mică și mai bună.

Consultați documentația ffmpeg VP9 dacă doriți să aflați mai multe.

Un cuvânt despre transcodificare

Apropo, în general, formatele de transcodare (luarea unui videoclip comprimat și recomprimarea acestuia cu un codec diferit) este o idee proastă, deoarece nu numai că veți adăuga erorile normale din codificarea video cu pierderi, dar veți pierde biți în noul format încercând să păstrați artefactele din vechiul.

înseamnă „fără pierderi de calitate” literalmente

Opțiunea -lossless 1 a codificatorului VP9 ffmpeg permite modul de calitate fără pierderi, dar cu o creștere potențial enormă a dimensiunii fișierului.

Tot ce aveți nevoie este următorul:

ffmpeg -i input.mp4 -lossless 1 output.webm 

Când am încercat -lossless 1 pe un mp4, webm rezultat a fost de 100 × mai mare, ceea ce nu era un cc acceptabil pentru mine. Cu toate acestea, dacă fișierele dvs. mp4 sunt deja de foarte bună calitate, mă aștept ca diferența de dimensiune să nu fie atât de mare.


Nota de subsol 1: Dacă „folosiți Microsoft Windows în loc de UNIX, schimbați /dev/null în NUL.

Comentarii

  • Răspuns excelent mulțumesc
  • /dev/null? Ce înseamnă asta? Care ar fi echivalentul pentru utilizatorii de Windows? Suprascrieți input.mp4 la prima trecere? Acest răspuns are nevoie de mai multe explicații cu privire la ceea ce face exact fiecare componentă. Nu ' nu oferă utilizatorilor intermediari multe explicații despre cum funcționează.
  • Bună Iubire: Răspunsul meu include deja o secțiune lungă de explicații plus un link pentru mai multe informații, așa că ' prefer să nu-l fac mai lung. Ați văzut nota de subsol referitoare la Microsoft Windows care răspunde la întrebarea dvs. specifică? De asemenea, așa cum am menționat mai sus, prima trecere compi le statistici despre fișierul de intrare.Nu este nevoie să ne temem că ar putea suprascrie intrarea.
  • Am încercat să convertesc fișierul .MTS în .webm utilizând aceste două comenzi (Ubuntu 20.10, ffmpeg versiunea 4.2.2). Dar am erori: " Aspect de canal 5.1 nevalid (lateral) pentru familia de mapare specificată -1. Eroare la inițializarea fluxului de ieșire 0: 1 – Eroare la deschiderea codificatorului pentru fluxul de ieșire # 0: 1 – poate parametri incorecți, cum ar fi bit_rate, rata, lățimea sau înălțimea "
  • mulțumesc pentru răspuns. dacă transcodarea este în general o idee proastă, ce recomandăm în schimb dacă trebuie să convertiți videoclipuri mp4 în webm și videoclipuri webm în mp4?

Răspundeți

Pe Linux folosesc optimizeVideo , care este un wrapper în jurul ffmpeg care detectează automat acele setări conform Google .

Rezultatul este un videoclip despre care nu puteți spune diferența de calitate, dar de obicei ordine de mărime mai mici.

Sigla

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *