Konwersja wideo z 1080p na 720p przy najmniejszej utracie jakości przy użyciu ffmpeg


45

Stosuję z moim wysokiej jakości filmem: 1080p przy 60 klatkach na sekundę. Problem polega na opóźnieniach podczas gry.

Próbowałem przekonwertować go na 720p za pomocą ffmpeg:

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

Ale mam znaczną utratę jakości, ponieważ przepływność spadła z 32,3 Mb / s do 2,8 Mb / s. Jak mogę określić właściwą szybkość transmisji dla strumienia wideo, a wszystkie pozostałe strumienie pozostawić nieskazitelne?

Plik wejściowy 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

Odpowiedzi:


93

Oto przykład, który powinien dać ci film najwyższej jakości (nie mówię o wynikowym rozmiarze pliku). Pamiętaj, że ten film może nie być odtwarzany na wszystkich urządzeniach lub odtwarzaczach:

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

Aby uzyskać „wizualnie bezstratną” jakość, możesz użyć:

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

Zobaczmy teraz, co mamy tutaj:

Filtr wideo skala jest do zmiany rozmiaru obrazu. Wystarczy ustawić jeden rozmiar - który jest wysokością w tym przykładzie - i użyć -1dla drugiego wymiaru. ffmpeg automatycznie przeliczy poprawną wartość, zachowując współczynnik kształtu.

Kontrolowana jakość z -crfopcją:

Zakres skali kwantyzatora wynosi 0-51: gdzie 0 jest bezstratne, 23 jest domyślne, a 51 jest najgorsze z możliwych. Niższa wartość oznacza wyższą jakość, a subiektywnie rozsądny zakres wynosi 18–28. Rozważ 18 jako wizualnie bezstratną lub prawie taką: powinna wyglądać tak samo lub prawie tak samo jak wejście, ale technicznie nie jest bezstratna.

Zakres jest wykładniczy, więc zwiększenie wartości CRF +6 stanowi mniej więcej połowę szybkości transmisji, podczas gdy -6 to około dwukrotności prędkości transmisji. Ogólne zastosowanie polega na wybraniu najwyższej wartości CRF, która nadal zapewnia akceptowalną jakość. Jeśli wynik wygląda dobrze, wypróbuj wyższą wartość, a jeśli wygląda źle, wybierz niższą wartość.

Więcej informacji można znaleźć w przewodniku kodowania x264 .

Za pomocą opcji kontrolujesz kompromis między szybkością kodowania wideo a wydajnością kompresji -preset. Są to ultraszybkie, superszybkie, bardzo szybkie, szybsze, szybkie, średnie, wolne, wolniejsze, bardzo wolne . Domyślnie jest średnia . Opcja Veryslow oferuje najlepszą wydajność kompresji (co powoduje mniejszy rozmiar pliku dla tej samej jakości), ale jest bardzo wolna - jak sama nazwa wskazuje.

Dźwięk zostanie skopiowany strumieniowo bezpośrednio z pliku wejściowego do pliku wyjściowego bez żadnych zmian.


2
LordNeckbeard - dzięki za edycję. Nie miałem czasu na wpisanie wszystkich szczegółów
Nikola Dimitrijevic

1
Przykładem jest ustawienie wysokości na 720, a nie na szerokość.
chovy

Czy możesz to zrobić wstecz wideo.stackexchange.com/questions/20439/...
William

2
Aby również skopiować napisy w mkv bez konwersji, możesz dodać -scodec copy.
Casper

2
Myślę, że aby uzyskać 720p, musisz ustawić szerokość na 1280, tzn. Nie, -vf scale=-1:720ale -vf scale=1280:-1.
cdlvcdlv

0

Jeśli chcesz skalować w innym rozmiarze, istnieją pewne ograniczenia dotyczące wymiarów skalowania FFMPEG. Nie akceptuje każdej wysokości, oto mała lista najlepszych zaleceń dotyczących wymiarów.

Kodeki wideo działają lepiej, gdy szerokość i wysokość w pikselach są wielokrotności 16. Podczas gdy w ustawieniach kodowania można użyć dowolnej szerokości i wysokości, nieoptymalne wymiary mogą powodować niską jakość obrazu i zmniejszoną liczbę klatek na sekundę. Aby uzyskać najlepszą jakość obrazu i odtwarzanie, należy użyć wymiarów szerokości i wysokości, które mają wielokrotności 16; Twój następny najlepszy wybór to wielokrotności 8, a następnie wielokrotności 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.