Ffmpeg kullanarak videoyu en az kalite kaybıyla 1080p'den 720p'ye dönüştürme


45

Yüksek kaliteli filmimle: 1080p ile 60fps yığın yapıyorum. Oyun oynarken sorun kalıyor.

Ben ffmpeg ile 720p dönüştürmek için denedim:

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

Ancak önemli bir kalite kaybı var çünkü bit hızı 32,3 Mbps'den 2,8 Mbps'ye düştü. Video akışı için doğru bit hızını nasıl belirleyebilirim ve diğer tüm akışı kopyalanmış bozulmamış olarak bırakabilirim?

Mediainfo girdi dosyası:

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

Yanıtlar:


93

İşte size en yüksek kalitede video vermesi gereken bir örnek (Elde edilen dosya boyutundan bahsetmiyorum). Bu videonun tüm cihazlarda veya oynatıcılarda oynatılamayabileceğini unutmayın:

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

"Görsel olarak kayıpsız" bir kalite elde etmek için şunları kullanabilirsiniz:

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

Şimdi burada neyimiz olduğunu görelim:

Ölçek video filtresi videoyu boyutlandırma içindir. Sadece bir boyuta ayarladınız - bu örnekteki yükseklik - ve -1diğer boyut için kullanın . ffmpeg, en boy oranını koruyarak doğru değeri otomatik olarak yeniden hesaplar.

-crfSeçenekle kontrol edilen kalite :

Niceleyici ölçeğinin aralığı 0-51'dir: burada 0 kayıpsız, 23 varsayılandır ve 51 mümkün olan en düşüktür. Daha düşük bir değer daha yüksek bir kalitedir ve öznel olarak aklı başında bir aralık 18-28'dir. 18'in görsel olarak kayıpsız veya neredeyse böyle olduğunu düşünün: girdiyle aynı veya neredeyse aynı görünmelidir ancak teknik olarak kayıpsız değildir.

Aralık üssel olup, CR6 +6 değerini artırmak bit hızının yaklaşık yarısı kadardır; -6 bit hızının yaklaşık iki katıdır. Genel kullanım, hala kabul edilebilir bir kalite sağlayan en yüksek CRF değerini seçmektir. Çıktı iyi görünüyorsa, daha yüksek bir değer deneyin ve hatalı görünüyorsa daha düşük bir değer seçin.

Daha fazla bilgiyi x264 kodlama kılavuzunda bulabilirsiniz .

-presetSeçeneklerle video kodlama hızı ve sıkıştırma verimliliği arasındaki geçişi kontrol edersiniz . Bunlar ultra hızlı, süper hızlı, çok hızlı, daha hızlı, hızlı, orta, yavaş, daha yavaş, veryslow . Varsayılan orta . Veryslow seçeneği sunuyor (aynı kalite için daha küçük bir dosya boyutu ile sonuçlanan) en iyi sıkıştırma verimi ama çok yavaş - adından da anlaşılacağı gibi.

Ses olacak kopyalanan akışı herhangi bir değişiklik olmadan çıktı dosyasına doğrudan giriş dosyasından.


2
LordNeckbeard - düzenleme için teşekkürler. Tüm ayrıntıları yazmak için yeterli zamanım olmadı
Nikola Dimitrijevic

1
Örnek olarak yüksekliği 720 değil genişliğe ayarlıyorsunuz.
Chovy

Bunu geriye doğru yapabilir misin video.stackexchange.com/questions/20439/…
William

2
Ayrıca mkv'de altyazıları dönüştürmeden kopyalamak için ekleyebilirsiniz -scodec copy.
Casper

2
Sana 1280 yani değil genişliğini ayarlamak gerekir 720p almak düşünüyorum -vf scale=-1:720ama -vf scale=1280:-1.
cdlvcdlv

0

Farklı bir boyutta ölçeklendirmek istediğinizde, FFMPEG ölçeklendirme boyutlarında bazı sınırlamalar vardır. Her yüksekliği kabul etmiyor, işte boyutlar için en iyi önerilerin küçük bir listesi.

Video kodekleri, piksel cinsinden genişlik ve yükseklik 16'nın katları olduğunda daha iyi performans gösterir. Kodlama ayarlarınızda herhangi bir genişlik ve yüksekliği kullanabilirsiniz, ancak optimal olmayan boyutlar düşük görüntü kalitesine ve düşük kare hızına neden olabilir. En iyi görüntü kalitesi ve oynatma için, videonuzun 16 katları olan genişlik ve yükseklik boyutlarını kullanmalısınız; Bir sonraki en iyi seçiminiz, 8'in katları ve ondan sonra 4'ün katlarıdır.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.