Перетворення відео з 1080p в 720p з найменшими втратами якості за допомогою ffmpeg


45

Я складаю свій високоякісний фільм: 1080p з 60 кадрів в секунду. Біда - це відставання під час гри.

Я намагався перетворити його на 720p за допомогою ffmpeg:

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

Але у мене є значні втрати якості, оскільки швидкість передачі бітів знизилася з 32,3 Мбіт / с до 2,8 Мбіт / с. Як я можу вказати правильну швидкість передачі бітів для відеопотоку та залишити всі інші потоки скопійованими незайманими?

Вхідний файл медіаінфо:

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

Відповіді:


93

Ось приклад, який повинен дати вам відео найвищої якості (я не кажу про розмір отриманого файлу). Зауважте, що це відео може не відтворюватися на всіх пристроях чи програвачах:

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

Щоб отримати якість "без зору", ви можете використовувати:

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

Тепер давайте подивимося, що ми маємо тут:

Відеофільтр масштабу для зміни розміру відео. Ви просто встановите один розмір - який є висота в цьому прикладі - і використовуєте -1для іншого вимір. ffmpeg автоматично перерахує правильне значення, зберігаючи співвідношення сторін.

Якість контролюється за допомогою -crfопції:

Діапазон шкали квантування становить 0-51: де 0 без втрат, 23 - за замовчуванням, а 51 - найгірше. Менше значення - це більш висока якість, а суб'єктивно здоровий діапазон - 18-28. Розглянемо 18 як візуально без втрат, чи майже так: він повинен виглядати таким же або майже таким же, як і вхідний, але технічно не є без втрат.

Діапазон експоненціальний, тому збільшення значення CRF +6 становить приблизно половину бітрейта, тоді як -6 - приблизно вдвічі більше бітрейта. Загальне використання полягає у виборі найвищого значення CRF, яке все ще забезпечує прийнятну якість. Якщо результат виглядає добре, то спробуйте більш високе значення, а якщо він виглядає погано, то виберіть нижнє значення.

Додаткову інформацію можна знайти в посібнику з кодування x264 .

Ви керуєте компромісом між швидкістю кодування відео та ефективністю стиснення за допомогою -presetпараметрів. Це ультрашвидкі, надшвидкі, дуже швидкі, швидкі, швидкі, середні, повільні, повільніші, дуже повільні . За замовчуванням середній . Опція veryslow пропонує найкращу ефективність стиснення (що призводить до меншого розміру файлу за однакову якість), але це дуже повільно - як говорить назва.

Аудіо буде потоково скопійовано безпосередньо з вхідного файлу у вихідний файл без будь-яких змін.


2
LordNeckbeard - дякую за редагування. У мене не вистачало часу, щоб набрати всі деталі
Микола Димитріевич

1
Ви, наприклад, встановлюєте висоту 720, а не ширину.
chovy

Чи можете ви зробити це назад video.stackexchange.com/questions/20439/…
William

2
Для копіювання субтитрів у mkv без перетворення можна додати -scodec copy.
Каспер

2
Я думаю , щоб отримати 720p ви повинні встановити ширину до 1280 , тобто не -vf scale=-1:720тільки -vf scale=1280:-1.
cdlvcdlv

0

Якщо вам подобається масштабування іншого розміру, існують деякі обмеження в розмірах масштабування FFMPEG. Він не приймає кожної висоти, ось невеликий список найкращих рекомендацій щодо розмірів.

Відео кодеки ефективніше, коли ширина і висота в пікселях кратні 16. Хоча ви можете використовувати будь-яку ширину і висоту в налаштуваннях кодування, неоптимальні розміри можуть призвести до низької якості зображення та зниження частоти кадрів. Для найкращої якості зображення та відтворення слід використовувати розміри ширини та висоти для відео, кратні 16; ваш наступний найкращий вибір - кратні 8, а після цього кратні 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.