Convertendo vídeo de 1080p para 720p com menor perda qualiti usando ffmpeg

31

Eu acumulo com meu filme de alta qualidade: 1080p com 60fps. O problema está atrasado durante o jogo.

Eu tentei convertê-lo para 720p com ffmpeg:

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

Mas há uma perda significativa de qualidade porque a taxa de bits diminuiu de 32,3 Mbps para 2,8 Mbps. Como posso especificar a taxa de bits correta para o fluxo de vídeo e deixar todos os outros fluxos copiados como novos?

Arquivo de entrada mediainfo:

ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
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
    
por atomAltera 10.02.2014 / 12:41

1 resposta

70

Aqui está um exemplo que deve fornecer a você a mais alta qualidade de vídeo (não estou falando sobre o tamanho do arquivo resultante). Tenha em atenção que este vídeo pode não ser reproduzido em todos os dispositivos ou jogadores:

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

Para obter uma qualidade "visualmente sem perdas", você pode usar:

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

Agora vamos ver o que temos aqui:

O filtro de vídeo em escala é para redimensionar o vídeo. Você acabou de definir um tamanho - que é a altura neste exemplo - e usa -1 para a outra dimensão. O ffmpeg irá recalcular o valor correto automaticamente enquanto preserva a proporção.

Qualidade controlada com a opção -crf :

The range of the quantizer scale is 0-51: where 0 is lossless, 23 is default, and 51 is worst possible. A lower value is a higher quality and a subjectively sane range is 18-28. Consider 18 to be visually lossless or nearly so: it should look the same or nearly the same as the input but it isn't technically lossless.

The range is exponential, so increasing the CRF value +6 is roughly half the bitrate while -6 is roughly twice the bitrate. General usage is to choose the highest CRF value that still provides an acceptable quality. If the output looks good, then try a higher value and if it looks bad then choose a lower value.

Você pode encontrar mais informações no guia de codificação x264 .

Você controla a compensação entre velocidade de codificação de vídeo e eficiência de compactação com as opções -preset . Esses são ultra-rápidos, super-rápidos, muito rápidos, rápidos, médios, lentos, mais lentos, mais baixos . O padrão é médio . A opção veryslow oferece a melhor eficiência de compactação (resultando em um tamanho de arquivo menor para a mesma qualidade), mas é muito lenta - como o nome diz.

O áudio será fluxo copiado diretamente do arquivo de entrada para o arquivo de saída sem nenhuma alteração.

    
por 10.02.2014 / 14:06