LINUX.ORG.RU

Как пережать видео gstreamer-vaapi intel hd ?


0

3

Здравствуйте! Кто может помогите... Требуется пережимать видеофайл - h264, 1920х1080, fps 30 в видеофайл - h264, 480х240, fps 10. Контейнер не важен. Подскажите pipeline для gstreamer1.0 Хотелось бы использовать GPU и vaapi. Исходные данные: -железо ноут VPCZ21X9R Intel i5 (HD 3000). -ОС Xubuntu 14.04
выхлоп vainfo

libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.35 (libva 1.3.0)
vainfo: Driver version: Intel i965 driver - 1.3.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
выхлоп gst-inspect-1.0 | grep vaa
vaapi:  vaapidecode: VA-API decoder
vaapi:  vaapipostproc: VA-API video postprocessing
vaapi:  vaapisink: VA-API sink
Здесь похоже не хватает h264. Как установить?

Подскажите pipeline для gstreamer1.0

От балды. Чем не катит?

gst-launch-0.10 filesrc location=infile ! decodebin name=demux ! queue ! ffmpegcolorspace ! x264enc <параметры> ! mp4mux name=mux ! filesink location=outfile.mp4   demux. ! queue ! progressreport ! audioconvert ! audioresample ! <че у тебя там за аудио>enc ! mux.

Здесь похоже не хватает h264. Как установить?

Для декодирования: твой vaapidecode скорее всего умеет h264. Для кодирования: не знаю, скажи дистрибутив и версии пакетов.

t184256 ★★★★★ ()

Здесь похоже не хватает h264. Как установить?

HD 3000

Уверен что поддержка есть для _кодирования_? Я как-то железо подбирал, выбрал именно с HD 4000+ чтобы жать могло в H264...

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Уверен что поддержка есть для _кодирования_?

VAEntrypointEncSlice в выводе vainfo — это кодирование.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Точно :) Спасибо эксперту :) Я вспомнил что даже какие-то свежие репы подключал чтобы увидеть кодирование H264 даже на HD 4000, или более новые пакеты выкачивал...

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от jony_77

запускаю так gst-launch-1.0 filesrc location=1.MTS ! decodebin name=demux ! queue ! ffmpegcolorspace ! x264enc ! mp4mux name=mux ! filesink location=outfile.mp4 demux. ! queue ! progressreport ! mux.

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

еще вот так

gst-launch filesrc location=1.MTS ! decodebin name=demux ! queue ! ffmpegcolorspace ! x264enc ! mp4mux name=mux ! filesink location=outfile.mp4   demux. ! queue ! progressreport ! mux.
Установка конвейера в состояние PAUSED...
Подготовка конвейера (PREROLL)...
Отсутствует элемент: Декодер subpicture/x-pgs
Отсутствует элемент: Декодер H.264

jony_77 ()

как то так

gst-launch-1.0 -f   filesrc location=./rec_2014-11-05_215250.mkv ! matroskademux ! vaapiparse_h264  ! vaapidecode  ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 !  vaapiencode_h264 ! vaapiparse_h264  ! progressreport !  avimux ! filesink location=out.avi
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_36
libva info: va_openDriver() returns 0
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapidecode0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
progressreport0 (00:00:05): 106 / 156 seconds (67.9 %)
progressreport0 (00:00:07): 156 / 156 seconds (100.0 %)
Got EOS from element "pipeline0".
Execution ended after 0:00:07.513943781
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

для примера если программно

gst-launch-1.0 -f   filesrc location=./rec_2014-11-05_215250.mkv ! matroskademux ! h264parse  ! avdec_h264  ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 ! x264enc  ! h264parse ! progressreport !  avimux ! filesink location=out.avi
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
Redistribute latency...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
progressreport0 (00:00:05): 63 / 156 seconds (40.4 %)
progressreport0 (00:00:10): 122 / 156 seconds (78.2 %)
progressreport0 (00:00:14): 156 / 156 seconds (100.0 %)
Got EOS from element "pipeline0".
Execution ended after 0:00:14.200261842
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch

1.

jon@jonusb-VPCZ21X9R:~$ gst-launch-1.0 -f   filesrc location=1.MTS ! matroskademux ! vaapiparse_h264  ! vaapidecode  ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 !  vaapiencode_h264 ! vaapiparse_h264  ! progressreport !  avimux ! filesink location=out.avi
libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
WARNING: erroneous pipeline: no element "vaapiparse_h264"

2.

jon@jonusb-VPCZ21X9R:~$ gst-launch-1.0 -f   filesrc location=1.MTS ! matroskademux ! h264parse  ! avdec_h264  ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 ! x264enc  ! h264parse ! progressreport !  avimux ! filesink location=out.avi
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstMatroskaDemux:matroskademux0: GStreamer encountered a general stream error.
Additional debug info:
matroska-demux.c(4671): gst_matroska_demux_loop (): /GstPipeline:pipeline0/GstMatroskaDemux:matroskademux0:
stream stopped, reason error
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
:-(

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

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

gst-launch-1.0 -f filesrc location=1.MTS ! mpegtsdemux ! h264parse ! avdec_h264 ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=320,height=240 ! x264enc ! h264parse ! progressreport ! avimux ! filesink location=out.avi

а с vaapi у тебя явно прблемы, или нет плагинов или они в черном списке
покажи
gst-inspect-1.0 -b

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch
jon@jonusb-VPCZ21X9R:~$ gst-inspect-1.0 -b
Blacklisted files:

Total count: 0 blacklisted files
jony_77 ()
Ответ на: комментарий от jony_77

matroskademux

У вас же контейнер - не матрёшка. Нужно, видимо, tsdemux.

Sorcerer ★★★★★ ()
Ответ на: комментарий от Novell-ch
jon@jonusb-VPCZ21X9R:~$ gst-launch-1.0 -f filesrc location=1.MTS ! mpegtsdemux ! h264parse ! avdec_h264 ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=320,height=240 ! x264enc ! h264parse ! progressreport ! avimux ! filesink location=out.avi
WARNING: erroneous pipeline: no element "mpegtsdemux"

Может начать все сначала? Я поставлю чистую ОС Kubuntu14.04., поставлю mplayer-vaapi (он мне нужен). Скажите как поставить qstreamer-vaapi? Я ставил из стандартных реп убунты sudo apt-get install ....

jony_77 ()
Ответ на: комментарий от Sorcerer
gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! avdec_h264 ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=320,height=240 ! x264enc ! h264parse ! progressreport ! avimux ! filesink location=out.avi

программно работает с загрузкой цпу 90%. Как сделать аппаратно?

jony_77 ()
Ответ на: комментарий от Sorcerer
jon@jonusb-VPCZ21X9R:~$ gst-launch-1.0 -f   filesrc location=1.MTS ! tsdemux ! vaapiparse_h264  ! vaapidecode  ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 !  vaapiencode_h264 ! vaapiparse_h264  ! progressreport !  avimux ! filesink location=out.avi
libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
WARNING: erroneous pipeline: no element "vaapiparse_h264"
jony_77 ()
Ответ на: комментарий от jony_77

ну без vaapiparse_h264 можно и обойтись

gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! vaapidecode ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=480,height=240 ! vaapiencode_h264 ! h264parse ! progressreport ! avimux ! filesink location=out.avi

но vaapiencode_h264 не хочет работать так что его надо заменить на x264enc, может это бага самого gst-vaapi.
У самого x264enc есть куча свойств, мож там можно подкрутить и скорость будет еще лучше, типа x264enc speed-preset=ultrafast
плюс еще имеет апааратное декодирование

так что

gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! vaapidecode ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=480,height=240 ! x264enc speed-preset=ultrafast ! h264parse ! progressreport ! avimux ! filesink location=out.avi
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_36
libva info: va_openDriver() returns 0
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapidecode0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Redistribute latency...
Redistribute latency...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
progressreport0 (00:00:03): 46 / 46 seconds (100.0 %)
Got EOS from element «pipeline0».
Execution ended after 0:00:02.454256369
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...


против обычного котороя тож забагованое походу
gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! avdec_h264 ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=480,height=240 ! x264enc ! h264parse ! progressreport ! avimux ! filesink location=out.avi
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
Redistribute latency...
Redistribute latency...
progressreport0 (00:00:05): 13 / 46 seconds (28.3 %)
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
progressreport0 (00:00:10): 26 / 46 seconds (56.5 %)
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
progressreport0 (00:00:15): 40 / 46 seconds (87.0 %)
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
Redistribute latency...
progressreport0 (00:00:17): 46 / 46 seconds (100.0 %)
Got EOS from element «pipeline0».
Execution ended after 0:00:15.404307875
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

Novell-ch ★★★★★ ()
Последнее исправление: Novell-ch (всего исправлений: 1)
Ответ на: комментарий от Novell-ch
jon@jonusb-VPCZ21X9R:~$ gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! vaapidecode ! queue ! videorate ! video/x-raw,framerate=10/1 ! videoscale ! video/x-raw, width=480,height=240 ! x264enc speed-preset=ultrafast ! h264parse ! progressreport ! avimux ! filesink location=out.avi
libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
WARNING: erroneous pipeline: could not link queue0 to videorate0
jony_77 ()
Ответ на: комментарий от jony_77

а просто
gst-launch-1.0 -f filesrc location=1.MTS ! tsdemux ! h264parse ! vaapidecode ! vaapisink
пашет?

Novell-ch ★★★★★ ()
Ответ на: комментарий от Novell-ch

в общем vaapiencode_h264 заработал при добавлении vaapipostproc

time gst-launch-1.0 -f   filesrc location=1.MTS ! tsdemux ! vaapiparse_h264  ! vaapidecode  ! vaapipostproc ! queue  ! videorate ! video/x-raw,framerate=10/1  ! videoscale ! video/x-raw, width=640,height=320 !  vaapiencode_h264 ! vaapiparse_h264  ! progressreport !  avimux ! filesink location=out.avi
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_36
libva info: va_openDriver() returns 0
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapidecode0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
progressreport0 (00:00:03): 46 / 46 seconds (100.0 %)
Got EOS from element "pipeline0".
Execution ended after 0:00:02.704685151
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

real    0m2.898s
user    0m1.416s
sys     0m0.285s

Novell-ch ★★★★★ ()
Ответ на: комментарий от jony_77

может есть где то репа с новый gst? просто я для суси собираю и выклыдвавю гитовые версии, gst и плагинов, больше я не знаю чем помочь, задача реальна и решаема, вопрос скорее всего в версиях и руках меинтейнеров.

Novell-ch ★★★★★ ()
Ответ на: комментарий от jony_77

видны мигающие квадраты

Тоже сталкивался с этим, при проигрывании в vlc через vaapi. Пришлось отказаться от использования vaapi.

Попробуйте заменить декодировщик на программный (он всё равно много процессора не жрет), но кодировщик оставить vaapi.

Sorcerer ★★★★★ ()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от jony_77

Т.е.

вместо

vaapiparse_h264 ! vaapidecode ! vaapipostproc

или вместо

vaapiparse_h264 ! vaapidecode

сделать

h264parse ! avdec_h264

Sorcerer ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.