This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

VAAPI-Encoding (Linux/Arch)
#1
Hi Selur,

Die Linux-User, ich z.B. mit Arch, haben ja immer noch das Nachsehen das kein Intel-Hardware-Encoding gemacht werden kann. Das funktioniert scheinbar mit keinem Videotool unter Linux ... soweit mir bekannt ist.
Gäbe es nicht die Möglichkeit VAAPI-Encoding in Hybrid einzubauen ?

Ich hab mich stundenlang mit VAAPI beschäftigt und mittlerweile sieht das richtig gut aus. Die Resultate sind mindestens so gut, wie mit "qvsenc" unter Windoof.

Man muß lediglich von ffmepg nach ffmpeg pipen.So sieht das z.B. mit ffmpeg aus:

ffmpeg -threads 6 -hide_banner \
-i "input" -s 1920x1080 -r 24000/1001 \
-vf crop=1920:800:0:140,pad=1920:1080:0:140 \
-f yuv4mpegpipe pipe:1 | ffmpeg -threads 1 -hide_banner \
-vaapi_device /dev/dri/renderD128 \
-i pipe:0  \
-vf 'format=nv12,hwupload' \
-c:v h264_vaapi -b:v 8M -g 24 -profile:v high -level 41 -quality 1 -compression_level 1 -bf 3 \
output.m2v

Das ffmpeg-Decoding braucht mehr Power/Threads da es ja nur über die CPU läuft. Für´s Encoding ist nur 1 Thread notwendig, läuft ja über die GPU.
Wie in Hybrid üblich, müssen Video und Audiobearbeitung getrennt ausgeführt werden. Und mit mkvmerge wird gemuxt.
Sogar Transcoding via vaapi müßte funktionieren. Ich mach da auch noch einige Tests.

Gruß ggrub
Reply
#2
Kann ich mir mal die Tage angucken.
Zu klären ist:
a. Gibt's irgendwo ne Übersicht was für Encodingparameter mit VAAPI unterstützt werden?
b. Woher weiß Hybrid welches device in /dev/dri/ es nutzen soll?
c. Kann man das auch nutzen wenn man GPU decoding qsv&co verwendet?

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply
#3
1. https://ffmpeg.org/ffmpeg-codecs.html#VAAPI-encoders

2.
ls -al /dev/dri/
   
vainfo --display drm --device /dev/dri/renderD128

3. Ja.

Ich kann auch mit meiner GTX1070 decoden und via INTEL-GPU encoden. Transcoding funktioniert ebenso, allerdings gibt es auch Formateinschränkungen.

Bin momentan auch zeitlich sehr begrenzt. Aber ich bleib am Ball, denn die Aussichten sind sehr gut. Wink

EDIT:

Auch sehr nützlich mit Beispielen: https://trac.ffmpeg.org/wiki/Hardware/VAAPI
Reply
#4
Quote:ls -al /dev/dri/
Frage ist welche Devices die da gelistet sind, gehören zu welcher GPU.

Quote:vainfo --display drm --device /dev/dri/renderD128
vainfo ist bei den meisten Distributionen nicht automatisch installiert.


Quote:https://ffmpeg.org/ffmpeg-codecs.html#VAAPI-encoders
Keine min/max Werte,... :/
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply
#5
"vainfo" ist in "libva-utils" (arch) enthalten und auch im offiziellen Repository.

Mit "sudo cat /sys/kernel/debug/dri/128/name" wäre es möglich, aber dann muß man Rootrechte haben. Mal sehen ob ich was finde ohne sudo ...

Klar, die settings sind nicht ganz so umfangreich wie bei "qsvenc", aber trotzdem sind hier die Resultate ansehnlich.
Reply
#6
Lösung ohne 'sudo' wäre hilfreich. Smile

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply
#7
"arch" hat hier tatsächlich die Eigenart, die Device-Zuornung nach einem Reboot zu ändern. Mal ist es "/dev/dri/renderD128" bei nächsten Reboot ist es "/dev/dri/renderD128". Weiß der Deibel warum.
Deswegen hab ich in meinem ffmpeg-Script einfach eine primitive Abfrage eingebaut:
for var in 128 129 130
do
  vainfo --display drm --device /dev/dri/renderD$var &>/dev/null
    if [ $? -eq 0 ]
      then
        devi=$var
        break
    fi
done
Ist ja unwarscheinlich das jemand mehr als 3 Grafikkarten im Rechner hat. Und es fängt immer mit "128" an.
Klappt natürlich nur mit INTEL-Device.

Wie wäre es denn wenn der User die kompletten Encoding-settings selbst in einem Hybrid-custom-encoder eintragen könnte, per Kommandozeile ?

Nur so ne Idee.
Reply
#8
Quote:Wie wäre es denn wenn der User die kompletten Encoding-settings selbst in einem Hybrid-custom-encoder eintragen könnte, per Kommandozeile ?
Dann sehe ich keinen Grund den Encoder in Hybrid zu integrieren. Smile
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply
#9
Aber ja doch Smile

Man könnte die komplette Hybrid Audiobearbeitung verwenden, crop resize usw. und übergibt dann nach "custom-encoder" den man selber konfiguriert. Für mich wäre das in Hinblick auf vaapi ideal. Einzig "-f raw" müßte gegen "-f yuv4mpegpipe" ausgetauscht werden.

Ist halt experimentell und nur für user gedacht die wissen was sie tun. Und sonst, wie immer, ... man kommt halt einfach nicht von Windoof weg .
Reply
#10
Experimentell mit Usern die Wissen was sie tun. Klappt einfach nicht.
Komplette Commandlines eingeben wird es in Hybrid nicht geben, denn dann kommt wieder User XY der aus einem YouTube Video oder sonst wo ne Command line hat und rumstänkert warum es denn nicht geht.
-> Nein, danke. Hab so schon genug Emails&Co mit Leuten die offensichtlich nicht wissen was sie tun. Smile
---
Quote:Mal ist es "/dev/dri/renderD128" bei nächsten Reboot ist es "/dev/dri/renderD128".
Wo ist da jetzt der Unterschied?

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)