LINUX.ORG.RU

ffmpeg кодирование видео из источников разного разрешения через vaapi.

 ,


0

1

Добрый день!

Есть проблемка, которую не могу никак решить. Задача стоит в том, что необходимо кучу Jpeg картинок разного разрешения сконвертировать в видеоряд. При использовании софтверного кодирования делал так и было все ок:

ffmpeg -f concat -safe 0 -i «/home/service/images.list» -vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease -vcodec libx264 -b 2M -an -pix_fmt yuv420p -f mp4 /home/video.mp4

В файле список скринов с паузами между ними для concat:

file '/home/screenshots/1.jpg'

duration 0.04

file '/home/screenshots/2.jpg'

duration 0.04

... и т.д

Все было ок, картинки интерполировались к указанному разрешению и на выходе получал нужный видео-файл. Решил использовать аппаратное кодирование на видеоядре. Команда:

ffmpeg -f concat -safe 0 -i «/home/service/images.list» -vf «format=vaapi|nv12,hwupload,scale_vaapi=w=1920:h=1080» -vcodec h264_vaapi -b 2M -an -f mp4 /home/video.mp4

На выходе я получаю видеофайл лишь в том случае, если разрешение картинок одинаковое. Т.е. если все скрины в 640x480, то все успешно интерполировалось до FullHD. Но если скрины разные по разрешению, то вываливается ошибка:

Impossible to convert between the formats supported by the filter 'Parsed_scale_vaapi_2' and the filter 'auto_scaler_1'

Error reinitializing filters!

Failed to inject frame into filter network: Function not implemented

Error while processing the decoded data for stream #0:0

Conversion failed!

Может кто сталкивался или имеет опыт в чем-то подобном? Буду рад любым наводкам.

Impossible to convert between the formats supported by the filter 'Parsed_scale_vaapi_2' and the filter 'auto_scaler_1'

вот и ответ

надо сначала поток прогнать через auto_scaler_1 и уже результат - жать

anonymous ()
Ответ на: комментарий от lasthappy

в два прохода

первый - масштабируешь сырцы, сливаешь всё в файл с loseless кодированием или вообще raw если место позволяет

второй - этот промежуточный файл уже транскодишь в нужный формат

оба прохода ессно с vaapi. теоретически можно вроде бы сквозной поток организовать, типа пайпа, но тут не подскажу - скила по ffmpeg не хватает, давно им не пользовался да и пользовался честно говоря топорно

еще как вариатн - отдать перемасшабирование avsynt-у, насколько я помню ffmpeg с еим дружит и может поток avsynt всосать как входной файл

anonymous ()
Ответ на: комментарий от anonymous

Т.е. настолько ущербен свободный vaapi? Например, все таже интеловская libmfx (из Intel Media SDK) тоже работает через vaapi, но при этом прекрасно работает с изменением размера на лету. Единственный минус, из-за которого не могу ее пока использовать, - отсуствие кодирования в VP9.

lasthappy ()