Konversi video dari 1080p ke 720p dengan kehilangan kualitas terkecil menggunakan ffmpeg


45

Saya menumpuk dengan film berkualitas tinggi saya: 1080p dengan 60fps. Masalahnya adalah keterlambatan saat bermain.

Saya mencoba mengubahnya menjadi 720p dengan ffmpeg:

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

Tapi saya ada kehilangan kualitas yang signifikan karena laju bit menurun dari 32,3 Mbps menjadi 2,8 Mbps. Bagaimana saya bisa menentukan bit rate yang tepat untuk streaming video, dan meninggalkan semua aliran lainnya disalin murni?

Masukkan file 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

Jawaban:


93

Berikut adalah contoh yang akan memberi Anda video kualitas tertinggi (saya tidak berbicara tentang ukuran file yang dihasilkan). Perhatikan bahwa video ini mungkin tidak dapat diputar di semua perangkat atau pemain:

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

Untuk mendapatkan kualitas "tanpa kehilangan visual", Anda dapat menggunakan:

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

Sekarang mari kita lihat apa yang kita miliki di sini:

The filter video skala adalah untuk mengubah ukuran video. Anda cukup menetapkan satu ukuran - yang merupakan ketinggian dalam contoh ini - dan gunakan -1untuk dimensi lainnya. ffmpeg akan menghitung ulang nilai yang benar secara otomatis sambil mempertahankan rasio aspek.

Kualitas dikontrol dengan -crfopsi:

Kisaran skala quantizer adalah 0-51: di mana 0 adalah lossless, 23 adalah default, dan 51 adalah kemungkinan terburuk. Nilai yang lebih rendah adalah kualitas yang lebih tinggi dan kisaran yang secara subyektif waras adalah 18-28. Anggap 18 sebagai lossless visual atau hampir seperti itu: ia harus terlihat sama atau hampir sama dengan input tetapi secara teknis tidak lossless.

Rentangnya eksponensial, jadi meningkatkan nilai CRF +6 kira-kira setengah dari bitrate sedangkan -6 kira-kira dua kali bitrate. Penggunaan umum adalah untuk memilih nilai CRF tertinggi yang masih memberikan kualitas yang dapat diterima. Jika output terlihat bagus, maka coba nilai yang lebih tinggi dan jika terlihat buruk maka pilih nilai yang lebih rendah.

Anda dapat menemukan info lebih lanjut di panduan penyandian x264 .

Anda mengontrol pertukaran antara kecepatan encoding video dan efisiensi kompresi dengan -presetopsi. Mereka sangat cepat, sangat cepat, sangat cepat, lebih cepat, cepat, sedang, lambat, lebih lambat, sangat lambat . Default adalah sedang . The veryslow pilihan penawaran yang terbaik efisiensi kompresi (menghasilkan ukuran file yang lebih kecil untuk kualitas yang sama) tapi sangat lambat - seperti namanya.

Audio akan disalin secara langsung dari file input ke file output tanpa perubahan.


2
LordNeckbeard - terima kasih sudah mengedit. Saya tidak punya cukup waktu untuk mengetik semua detail
Nikola Dimitrijevic

1
Misalnya Anda mengatur ketinggian ke 720 tidak lebar.
chovy

Bisakah Anda melakukan ini mundur video.stackexchange.com/questions/20439/…
William

2
Untuk juga menyalin teks film dalam mkv tanpa mengonversi, Anda dapat menambahkan -scodec copy.
Casper

2
Saya pikir untuk mendapatkan 720p Anda harus mengatur lebar 1280 yaitu tidak -vf scale=-1:720tapi -vf scale=1280:-1.
cdlvcdlv

0

Jika Anda ingin skala dalam ukuran yang berbeda, ada beberapa batasan pada dimensi skala FFMPEG. Tidak menerima setiap ketinggian, berikut adalah daftar kecil rekomendasi terbaik untuk dimensi.

Codec video berkinerja lebih baik ketika lebar dan tinggi dalam piksel adalah kelipatan 16. Meskipun Anda dapat menggunakan lebar dan tinggi dalam pengaturan penyandian Anda, dimensi yang tidak optimal dapat menghasilkan kualitas gambar yang buruk dan mengurangi frame rate. Untuk kualitas dan pemutaran gambar terbaik, Anda harus menggunakan dimensi lebar dan tinggi untuk video Anda yang merupakan kelipatan 16; pilihan terbaik Anda berikutnya adalah kelipatan 8, dan setelah itu, kelipatan 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.