Kirjoittaja Aihe: Rautakoodaus ffmpeg:ssä. [Oli: Githubin käyttö. Kuinka?]  (Luettu 3410 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Yritän saada Intelin rautakoodekkeja toimimaan ffmpeg:ssä. Ohje neuvoo kloonaamaan tarvittavat softat Githubista ja kääntämään ne. Ongelma on nyt se, että en saa ladatuksi softia, kun en pääse Githubiin, koska siellä ei enää sallita tunnuksella ja salasanalla kirjautumista vaan vaaditaan jotain hiton tokeneita... Luin ohjeet kahteen kertaan, enkä vieläkään ymmärtänyt...

Miksi softien lataaminen on tehty näin vaikeaksi? Olisiko helppiä?

Koodia: [Valitse]
$ cd ~/vaapi
git clone https://github.com/01org/libva
cd libva
./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvvv
Cloning into 'libva'...
Username for 'https://github.com': ajarmala
Password for 'https://ajarmala@github.com':
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/01org/libva/'
bash: cd: libva: No such file or directory
bash: ./autogen.sh: No such file or directory
make: *** No targets specified and no makefile found.  Stop.
« Viimeksi muokattu: 14.04.23 - klo:17.10 kirjoittanut jarmala »
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16426
    • Profiili
Vs: Githubin käyttö. Kuinka?
« Vastaus #1 : 27.03.23 - klo:19.24 »
Yritän saada Intelin rautakoodekkeja toimimaan ffmpeg:ssä. Ohje neuvoo kloonaamaan tarvittavat softat Githubista ja kääntämään ne. Ongelma on nyt se, että en saa ladatuksi softia, kun en pääse Githubiin, koska siellä ei enää sallita tunnuksella ja salasanalla kirjautumista vaan vaaditaan jotain hiton tokeneita... Luin ohjeet kahteen kertaan, enkä vieläkään ymmärtänyt...

Miksi softien lataaminen on tehty näin vaikeaksi? Olisiko helppiä?

Koodia: [Valitse]
$ cd ~/vaapi
git clone https://github.com/01org/libva

Nykyinen repositorio on https://github.com/intel/libva

Koodia: [Valitse]
git clone https://github.com/intel/libva
GitHub ei vaadi kirjautumista avoimen lähdekoodin projektien lataamiseen.


Toisaalta et myöskään tarvitse lähdekoodista käännettyä libva-ajuria. Kaikki palikat saa valmiina binääreinä Ubuntun lähteistä. Jos haluat viimeisimmän FFmpeg 6.x-version, voit kääntää sen itse tai ottaa käyttöön sopivan PPA:n.

Uusimmilla Intelin 12. sukupolven integroiduilla näytönohjaimilla paras ajuri videoenkoodaukseen on oneVPL. Sinulla taisi kuitenkin olla vanhempi 10. sukupolven näytönohjain, jolloin oneVPL:n sijaan on käytettävä edellistä iHD + MediaSDK-ajuria eli libmfx:ää.

Katso libmfx:n asennusohje:
https://github.com/Intel-Media-SDK/MediaSDK/wiki/Intel-media-stack-on-Ubuntu

FFmpegin ohje:
https://trac.ffmpeg.org/wiki/Hardware/QuickSync
« Viimeksi muokattu: 27.03.23 - klo:19.41 kirjoittanut nm »

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Githubin käyttö. Kuinka?
« Vastaus #2 : 28.03.23 - klo:19.04 »

Katso libmfx:n asennusohje:
https://github.com/Intel-Media-SDK/MediaSDK/wiki/Intel-media-stack-on-Ubuntu

FFmpegin ohje:
https://trac.ffmpeg.org/wiki/Hardware/QuickSync

Tein libmfx:n ohjeen mukaan, mutta edes esimerkkikomento ei toimi:

Koodia: [Valitse]
$ /usr/share/mfx/samples/sample_encode h264   -w 176 -h 144 -f 30 -b 3000   -i mot.mkv -o encoded_AUD_MW_E.264
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0

[ERROR], sts=MFX_ERR_UNSUPPORTED(-3), AllocFrames, Query (for encoder) failed at ./samples/sample_encode/src/pipeline_encode.cpp:966

[ERROR], sts=MFX_ERR_UNSUPPORTED(-3), ResetMFXComponents, AllocFrames failed at ./samples/sample_encode/src/pipeline_encode.cpp:2076

[ERROR], sts=MFX_ERR_UNSUPPORTED(-3), Init, ResetMFXComponents failed at ./samples/sample_encode/src/pipeline_encode.cpp:1857

[ERROR], sts=MFX_ERR_UNSUPPORTED(-3), main, pPipeline->Init failed at ./samples/sample_encode/src/sample_encode.cpp:1787
Frame number: 0
Encoding fps: -0


Ja ffmpeg väittää osaavansa qsv:n, mutta ei siltikään suostu toimimaan ohjeessa annetulla esimerkkikomennolla:

Koodia: [Valitse]
$ ffmpeg -hide_banner -encoders | grep -E "h264|hevc"
 V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
 V....D h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... h264_omx             OpenMAX IL H.264 video encoder (codec h264)
 V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
 V..... h264_v4l2m2m         V4L2 mem2mem H.264 encoder wrapper (codec h264)
 V....D h264_vaapi           H.264/AVC (VAAPI) (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... libx265              libx265 H.265 / HEVC (codec hevc)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V....D hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
 V..... hevc_v4l2m2m         V4L2 mem2mem HEVC encoder wrapper (codec hevc)
 V....D hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)

Koodia: [Valitse]
$ ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -i mot.mkv -vf hwupload=extra_hw_frames=64,format=qsv -c:v h264_qsv -b:v 5M -maxrate 5M output.mp4
Input #0, matroska,webm, from 'mot.mkv':
  Metadata:
    ENCODER         : Lavf58.76.100
  Duration: 00:00:23.94, start: 0.000000, bitrate: 2612 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, top coded first (swapped)), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
    Metadata:
      ENCODER         : Lavc58.134.100 libx264
      DURATION        : 00:00:23.941000000
  Stream #0:1(fin): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      ENCODER         : Lavc58.134.100 aac
      DURATION        : 00:00:23.029000000
File 'output.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_qsv))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[h264_qsv @ 0x55736f32cf40] Selected ratecontrol mode is unsupported
[h264_qsv @ 0x55736f32cf40] Low power mode is unsupported
[h264_qsv @ 0x55736f32cf40] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[aac @ 0x55736f36dbc0] Qavg: 7619.162
[aac @ 0x55736f36dbc0] 2 frames left in the queue on closing
Conversion failed!

Enpä vaan taida osata tätä rautakoodausta...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16426
    • Profiili
Vs: Githubin käyttö. Kuinka?
« Vastaus #3 : 29.03.23 - klo:01.12 »
Tein libmfx:n ohjeen mukaan, mutta edes esimerkkikomento ei toimi:

Koodia: [Valitse]
$ /usr/share/mfx/samples/sample_encode h264   -w 176 -h 144 -f 30 -b 3000   -i mot.mkv -o encoded_AUD_MW_E.264

sample_encode ei osaa purkaa MKV-tiedostoja, vaan hyväksyy vain raakamuotoista videota, oletuksena YUV420-väriavaruudessa. Muitakin väriavaruuksia on mahdollista käyttää, mutta olennaista on, että mikään monimutkaisempi säiliömuoto ei käy, vaan tiedoston täytyy olla raakavideota. Kokeile ohjeen ensimmäisen esimerkin mukaisesti:

Lainaus
Koodia: [Valitse]
export LIBVA_DRIVER_NAME=iHD
wget https://github.com/lu-zero/fate-samples/raw/master/h264-conformance/AUD_MW_E.264

/usr/share/mfx/samples/sample_decode h264 -i AUD_MW_E.264 -o AUD_MW_E.yuv -i420

/usr/share/mfx/samples/sample_encode h264 -w 176 -h 144 -f 30 -cqp -qpi 30 -qpp 30 -qpb 30 -qsv-ff -i AUD_MW_E.yuv -o encoded_AUD_MW_E.264

Voisit myös näyttää vainfon listauksen, niin katsotaan, että ajuri on kunnossa.

Koodia: [Valitse]
vainfo
Tarkka dokumentaatio Media SDK:n sample_encodesta on tässä dokumentissa: https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/samples/readme-encode_linux.md


Ja ffmpeg väittää osaavansa qsv:n, mutta ei siltikään suostu toimimaan ohjeessa annetulla esimerkkikomennolla:

Koodia: [Valitse]
$ ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -i mot.mkv -vf hwupload=extra_hw_frames=64,format=qsv -c:v h264_qsv -b:v 5M -maxrate 5M output.mp4

Olennaiset virheet:

Koodia: [Valitse]
[h264_qsv @ 0x55736f32cf40] Selected ratecontrol mode is unsupported
[h264_qsv @ 0x55736f32cf40] Low power mode is unsupported

Ilmeisesti low power mode ei nyt ole käytettävissä. Johtuu mahdollisesti siitä, ettei kernelin ajuri lataa oletuksena tarvittavaa HUC-firmwarea: https://github.com/Intel-Media-SDK/MediaSDK/issues/2970#issuecomment-1205561199

Tuolla suositellaan kytkemään low power mode pois käytöstä, mutta on myös mahdollista pakottaa kernelin ajuri lataamaan HUC-firmware.

Ratecontrol mode is unsupported -virhe saattaa johtua low power mode -virheestä tai päin vastoin. Kokeile seuraavaksi vivulla -low_power 0:

Koodia: [Valitse]
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -i mot.mkv -vf hwupload=extra_hw_frames=64,format=qsv -low_power 0 -c:v h264_qsv -b:v 5M -maxrate 5M output.mp4
Tässä pyydetään ffmpegiä käyttämään CBR-enkoodausta (vakiobitratea), koska maksimiksi oli asetettu sama 5M kuin keskimääräiseksi bitrateksi (-b:v 5M -maxrate 5M). Se voi myös aiheuttaa osaltaan ongelmia, joten CBR:n sijaan kannattaa kokeilla myös CQP-tilaa (-qscale:v 25):

Koodia: [Valitse]
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -i mot.mkv -vf hwupload=extra_hw_frames=64,format=qsv -low_power 0 -c:v h264_qsv -qscale:v 25 output.mp4
Jos herjaa taas low power modesta, lisää valitsin -low_power 0


Edit: Myös Ubuntu 22.04:n alkuperäisessä 5.15-sarjan kernelissä taitaa olla bugeja, jotka estävät QSV:n toiminnan osittain tai kokonaan. Varmista, että käytössä on vähintään kernelin versio 5.19 (joka on ollut saatavilla hwe-päivityksenä Ubuntu 22.04.2:n julkaisusta lähtien).

Katso: https://www.reddit.com/r/jellyfin/comments/usiur9/ubuntu_2204_qsv_setup/

Käytössä olevan kernelin version voi tarkistaa komennolla:

Koodia: [Valitse]
uname -r
« Viimeksi muokattu: 29.03.23 - klo:16.23 kirjoittanut nm »

jarmala

  • Käyttäjä
  • Viestejä: 789
    • Profiili
Vs: Githubin käyttö. Kuinka?
« Vastaus #4 : 14.04.23 - klo:17.09 »

Voisit myös näyttää vainfon listauksen, niin katsotaan, että ajuri on kunnossa.

Ratecontrol mode is unsupported -virhe saattaa johtua low power mode -virheestä tai päin vastoin. Kokeile seuraavaksi vivulla -low_power 0:

Koodia: [Valitse]
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -i mot.mkv -vf hwupload=extra_hw_frames=64,format=qsv -low_power 0 -c:v h264_qsv -b:v 5M -maxrate 5M output.mp4
Käytössä olevan kernelin version voi tarkistaa komennolla:


Kiitoksia ohjeesta. Nyt toimii h264_qsv. MUtta enpä oikein osaa sanoa, onko se yhtään nopeampi kuin softakoodaus presetillä ultrafast... Voi se olla hieman laadukkaampi kuin tuo ultrafast.

Vielä jos olisi saatavissa hinttiä, miten rautakoodauksen saisi toimimaan myös hevc:illä... Suoraan korvaamalla h264 hevc:llä ei näytä toimivan. Mistä saisi tietää sen kanssa toimivat parametrit? Kun kuitenkin tarkoitukseni on koodata videot hevc:llä, koska sitä on tullut jo käytettyä vuosikausia - tosin softaversiona.

Ja vielä pyydetyt vainfo ja uname -r:

Koodia: [Valitse]
$ vainfo
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.14 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1 ()
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSliceLP
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSliceLP
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile1            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD
      VAProfileVP9Profile3            : VAEntrypointVLD
      VAProfileHEVCMain422_10         : VAEntrypointVLD
      VAProfileHEVCMain444            : VAEntrypointVLD
      VAProfileHEVCMain444            : VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10         : VAEntrypointVLD
      VAProfileHEVCMain444_10         : VAEntrypointEncSliceLP
ari@ari-JL:~/avi$ uname -r
5.19.0-38-generic
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB