Conversione di video da 1080p a 720p con la minima perdita di qualità usando ffmpeg


45

Stack con il mio film di alta qualità: 1080p con 60fps. Il problema sono i ritardi durante il gioco.

Ho provato a convertirlo in 720p con ffmpeg:

ffmpeg -i MyMovie.mkv -r 60 -s hd720 MyMovie_720p.mkv

Ma ho una significativa perdita di qualità perché il bit rate è diminuito da 32,3 Mbps a 2,8 Mbps. Come posso specificare la velocità in bit corretta per lo streaming video e lasciare tutti gli altri stream copiati incontaminati?

File di input mediainfo:

ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4.2
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 2h 58mn
Bit rate                                 : 32.3 Mbps
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 59.940 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.260
Stream size                              : 40.2 GiB (92%)
Writing library                          : x264 core 116 r2019 9cc407d
Encoding settings                        : cabac=1 / ref=4 / deblock=1:-2:-1 / analyse=0x3:0x113 / me=umh / subme=10 / psy=1 / psy_rd=0.80:0.20 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-3 / threads=6 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=6 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=0 / crf=14.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=50000 / vbv_bufsize=62500 / crf_max=0.0 / nal_hrd=none / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:0.60
Language                                 : English
Default                                  : Yes
Forced                                   : No
Matrix coefficients 

                 : BT.709-5, BT.1361, IEC 61966-2-4 709, SMPTE RP177

Risposte:


93

Ecco un esempio che dovrebbe darti il ​​video di massima qualità (non sto parlando della dimensione del file risultante). Tieni presente che questo video potrebbe non essere riproducibile su tutti i dispositivi o lettori:

ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 0 -preset veryslow -c:a copy MyMovie_720p.mkv

Per ottenere una qualità "visivamente senza perdita", è possibile utilizzare:

ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 18 -preset veryslow -c:a copy MyMovie_720p.mkv

Ora vediamo cosa abbiamo qui:

Il filtro video in scala serve per ridimensionare il video. Basta impostare una dimensione - che è l'altezza in questo esempio - e utilizzare -1per l'altra dimensione. ffmpeg ricalcola automaticamente il valore corretto preservando le proporzioni.

Qualità controllata con l' -crfopzione:

L'intervallo della scala del quantizzatore è 0-51: dove 0 è senza perdita di dati, 23 è l'impostazione predefinita e 51 è la peggiore possibile. Un valore inferiore è una qualità superiore e un intervallo soggettivamente sano è 18-28. Considera 18 visivamente senza perdita o quasi: dovrebbe apparire uguale o quasi uguale all'input ma non è tecnicamente senza perdita.

L'intervallo è esponenziale, quindi l'aumento del valore CRF +6 è circa la metà del bitrate mentre -6 è circa il doppio del bitrate. L'utilizzo generale è scegliere il valore CRF più elevato che offra comunque una qualità accettabile. Se l'output ha un bell'aspetto, prova un valore più alto e se ha un bell'aspetto scegli un valore più basso.

Puoi trovare maggiori informazioni nella guida alla codifica x264 .

Puoi controllare il compromesso tra la velocità di codifica video e l'efficienza di compressione con le -presetopzioni. Questi sono ultraveloci, superveloci, molto veloci, veloci, veloci, medi, lenti, più lenti, molto bassi . L'impostazione predefinita è media . L' opzione veryslow offre la migliore efficienza di compressione (con conseguente riduzione delle dimensioni del file per la stessa qualità) ma è molto lenta - come dice il nome.

L'audio verrà copiato in streaming direttamente dal file di input nel file di output senza alcuna modifica.


2
LordNeckbeard - grazie per la modifica. Non ho avuto abbastanza tempo per digitare tutti i dettagli
Nikola Dimitrijevic,

1
L'esempio sta impostando l'altezza su 720 e non su larghezza.
Chovy


2
Per copiare anche i sottotitoli in mkv senza convertire, puoi aggiungere -scodec copy.
Casper

2
Penso che per ottenere 720p sia necessario impostare la larghezza su 1280, cioè non -vf scale=-1:720ma -vf scale=1280:-1.
cdlvcdlv,

0

Nel caso in cui desideri ridimensionare in una dimensione diversa, ci sono alcune limitazioni sulle dimensioni di ridimensionamento di FFMPEG. Non accetta ogni altezza, ecco un piccolo elenco dei migliori consigli per le dimensioni.

I codec video funzionano meglio quando la larghezza e l'altezza in pixel sono multipli di 16. Sebbene sia possibile utilizzare qualsiasi larghezza e altezza nelle impostazioni di codifica, dimensioni non ottimali possono comportare una scarsa qualità dell'immagine e una frequenza dei fotogrammi ridotta. Per la migliore qualità dell'immagine e riproduzione, è necessario utilizzare le dimensioni di larghezza e altezza per il video che sono multipli di 16; la tua prossima scelta migliore è multipli di 8 e, successivamente, multipli di 4.

Recommended width and height for videos with 16:9 aspect ratios:

Best Choice:     2nd Best:        3rd Best:
Multiples of 16  Multiples of 8   Multiples of 4
1920 x 1080      1792 x 1008      1856 x 1044
1280 x 720       1152 x 648       1216 x 684
1024 x 576        896 x 504       1088 x 612
 768 x 432        640 x 360        960 x 540
 512 x 288        384 x 216        832 x 468
 256 x 144        128 x 72         704 x 396
                                   576 x 324
                                   448 x 252
                                   320 x 180
                                   192 x 108
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.