LINUX.ORG.RU

h264 --> h265 copy amd gpu

 ,


0

3

«2 часть.mp4» 1309M

С помощью cpu делаю: «2 часть_h265.mp4» 552084K

ffmpeg -i 2\ часть.mp4 -c:v libx265 -vtag hvc1 -c:a copy 2\ часть_h265.mp4

С помощью gpu: «output.mp4» 1112M

ffmpeg -vaapi_device /dev/dri/renderD128 -i 2\ часть.mp4 -vf 'format=nv12,hwupload' -c:v hevc_vaapi -c:a copy output.mp4

В первом случае битрейд был 3м/с, во втором 7м/с. Как бы сделать, чтобы не выставлять всякие -global_quality 30 или подобное, а чтобы всегда было максимально компактно по размеру(именно это конечная цель перекодирования)

★★★
Ответ на: комментарий от firkax

Ну а в первом примере оно автоматически выбирает битрейд. Вот примерно так же и нужно. По идее оно должно ужать на ~50% т.е выбрать автоматически около 4к. Хлопотно у каждого файла брать время и вычислять битрейд. Хотелось бы в автоматическом режиме это делать

serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

Ну а в первом примере оно автоматически выбирает битрейд.

Кодирование с CFR пытается подобрать битрейт для удержания заданного качества картинки (по умолчанию 28).

Как бы сделать, чтобы не выставлять всякие -global_quality 30 или подобное, а чтобы всегда было максимально компактно по размеру(именно это конечная цель перекодирования)

Ты кодируешь с потерями и задаешь желаемое качество изображения явно (global_quality + режим интеллектуального кодирования типа icq/cqp с vaapi) или не явно (дефолт у CFR при софтовом кодировании). Размер зависит от выбранного качества изображения и пресета кодирования.

Если просто хочешь сжимать в два раза и не обращать внимание на качество, то высчитываешь нужный битрейт и кодируешь в два прохода.

p.s.: качество cfr и global_quality подбирать придется вручную, а эффективность софтового/аппаратного кодировщика будет отличаться (качество картинки при том же размере файла).

altwazar ★★★★
()
Последнее исправление: altwazar (всего исправлений: 2)