Le Blog Utux

HTTP 200 GET /

Windows + Kdenlive + NVENC - Part 1: Nvidia H264 & H265 Hardware encoders

Rédigé par uTux Aucun commentaire

Kdenlive is a great software but I noticed a major drawback on the Windows version: render time that is really slow. For example, let's take a 45min H264 2560x1440 60fps video file and crop it to 1920x1080 ("Position and Zoom" effect on Kdenlive). Render time is about 1h15 on Kdenlive while it's only 15 minutes on Adobe Premiere Pro, the difference is insane. Why is the later so fast ? Spoiler: GPU rendering.

Logo kdenlive

Let's talk about how rendering works. Kdenlive use ffmpeg and MLT. The Windows version of Kdenlive is built with an embedded minimal ffmpeg that does not support GPU hardware acceleration, which is sad. Fortunately, it is possible to download the full version of ffmpeg and install it on Kdenlive, here is how to proceed.

Download

Installation

  • Run the kdenlive installer which is in fact a self-extracting archive. Extract the contents in a location, for example C:\Program Files\Kdenlive.
  • Extract ffmpeg-release-full-shared.7z to a temporary location, for example C:\Users\src386\Downloads.
  • Copy C:\Users\src386\Downloads\ffmpeg\bin\* to C:\Program Files\Kdenlive\bin\
  • Copy C:\Users\src386\Downloads\ffmpeg\presets\* to C:\Program Files\Kdenlive\presets\

Configuration

Start or restart Kdenlive then click Configuration > Run Config Wizzard. Check "Nvidia hardware acceleration" and make sure it is properly detected.

Kdenlive config wizard

The following render profiles show be available now:

  • NVENC H264 CBR
  • NVENC H264 VBR
  • NVENC H265 CBR
  • VAAPI Intel H264
  • VAAPI AMD H264

Try to render a project using one of these profiles and take a look at the Performance / GPU / Video Encode section in the Task Manager:

taskmgr

If the GPU Encode graph is low (20% or less) that means that Kdenlive is rendering Effects on the CPU (such as "Position and zoom"). See limitations below.

Limitations

  • Right now (Apr 2021) effects cannot be rendered by the GPU (at least on Windows). This may lead to frustrating situations where the GPU encoder only works at 20% and render is slow. I used to capture 1080p games in a 1440p desktop, then crop with the "Position and Zoom" effect, I changed that. Now I have set OBS Studio to record in 1080p, negating the need any transformation.
  • I could not make NVENC work for proxy clips, which is bad.
  • The Windows version of Kdenlive does not seems to support Movit aka "Experimental GPU processing" which add effects that can be rendered by the GPU. For example, instead of "Position and zoom" you can use "Pan and zoom (GPU)". You should try the Flatpak version (Linux).
Classé dans : Logiciels Mots clés : aucun

Backups in Azure with Duplicati

Rédigé par uTux Aucun commentaire

I need to backup my NAS to a remote and secure location, and because I am a Azure AZ-103 associate, I have decided to store my data on a Azure storage account. I will use Duplicati, a free backup software written in C# with the following features:

  • Native AES-256 encryption.
  • Wide variety of storage backends: Azure, S3, GCS, FTP, SSH, Onedrive...
  • Works well on Windows, Linux, FreeBSD.
  • Works on a headless server with a WebUI.

Storage account offers 3 tier storage with different pricing: hot, cool, archive. If you choose a hot tier, access is less charged, but storage is more expensive. This is the opposite for cool and archive, storage is cheap but access is expensive. Archive is the most interesting tier for backups but it has many constraints, such as the need to pick every object inside the container to move them. So I will use cool right now.

Create a Resource group and a Storage account

First you need to create a Resource group. Go to the Resource groups blade then click +Add. Take a look at Ready: Recommended naming and tagging conventions if you don't know how to name it. Select a region (does not really matters now).

Create a resourcegroup

Now you need to create a Storage account. Go to the Storage accounts blade then click +Add.

  • Subscription: your subscription.
  • Resource group: the one you just created
  • Storage account name: must be unique accross Azure and as many limitations, so I recommend using a short name + random id.
  • Location: Select the location of your choice (choose a close one with an interesting pricing, see Azure Calculator)
  • Account kind: StorageV2
  • Replication: LRS
  • Access tier: cool
Create storage account

Now open you new Storage account and go to the Containers blade then click +Container. This time the name is private and does not need to be unique. Make sure the Public level access is set to Private (no anonymous access).

Create container

Go to the Access keys blade and retrieve the value of key1 or key2. These key are private and should not be shared with anyone because they basically give full access to the storage account and the data inside.

Retreive access key

Configure Duplicati

Go into the Web UI then + Add backup > Configure a new backup.

Enter a name, a description and a very strong encryption passphrase. Do not lose it, personally I use Keepass + Syncthing to manage my passwords.

duplicati step 1

Select "Azure blob" for Storage type and set your credentials.

duplicati step 2

Click Test connection to make sure Duplicati can reach your Azure container.

duplicati step 2 test

Select the files you want to backup.

duplicati step 3

Schedule your backup. For me, monthly is enough.

duplicati step 4

Duplicati will not copy your files one by one but use "volumes". To select the size of each block, read this documentation. Smaller means more transactions but better de duplication. Bigger means less transactions but less optimized de duplication. If you have the bandwith, go for higher chunks. 1 Gbyte seems to be a good value for me. More is not good because it takes too much resources.

You can also set the retention, for me it's 6 months.

duplicati step 5

Et voila, just run your backup now!

Cost and Metrics

My Storage Account:

  • Location: North Europe
  • Performance/Access tier: Standard/Cool
  • Replication: Locally-redundant storage (LRS)
  • Account kind: StorageV2 (general purpose v2)

My Backups:

  • Data source: ~650 GB
  • Schedule: @Monthly
  • Volume size: 1 GB

Used capacity (512 GiB) :

Azure Metrics 1

Ingress and Egress (Last executions: 2020/10/10 and 2020/10/14):

Azure Metrics 2

Transactions (Last executions: 2020/10/10 and 2020/10/14):

Azure Metrics 3

I admit I'm not sure sure why I see transactions when there is no backups. I assume it's Azure stuff.

Last invoice:

Azure Metrics 4

Monthly billing is always around €5 which is not cheap but affordable. If you need more than 1TB of storage, it might be a good idea to take a look at Google One (Drive) or Dropbox.

Aperçu de NixOS en desktop

Rédigé par uTux 4 commentaires

Il y a un peu plus de 2 ans j'ai parlé de NixOS, distribution Linux atypique dans le sens où sa configuration se fait de manière déclarative à un unique emplacement.

NixOS logo

Mon ordinateur pro et ma machine gaming sont sous Windows, j'utilise donc très souvent des machines virtuelles Linux pour pouvoir travailler. Habituellement j'utilise Virtualbox + Debian + Mate, mais j'ai décidé d'expérimenter NixOS. Alors oui je sais qu'une machine virtuelle n'est pas représentative d'un cas d'usage réel, mais ça permet de se faire une première idée.

Installation

J'ai installé NixOS avec la configuration suivante:

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  # Use the GRUB 2 boot loader.
  boot.loader.grub.enable = true;
  boot.loader.grub.version = 2;
  # Define on which hard drive you want to install Grub.
  boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only

  # Networking
  networking.hostName = "nixos"; # Define your hostname.
  networking.networkmanager.enable = true;

  # Select internationalisation properties.
  i18n = {
    consoleFont = "Lat2-Terminus16";
    consoleKeyMap = "fr";
    defaultLocale = "fr_FR.UTF-8";
  };

  # Set your time zone.
  time.timeZone = "Europe/Paris";

  # Repositories
  nixpkgs.config.allowUnfree = true;

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    ansible
    dnsutils
    firefox-bin
    gimp
    git
    htop
    keepassxc
    libreoffice
    networkmanagerapplet
    parcellite
    p7zip
    sudo
    syncthing
    syncthing-gtk
    thunderbird-bin
    tree
    unzip
    vim
    vscode
    xarchiver
  ];

  # Enable CUPS to print documents.
  services.printing.enable = true;

  # Enable sound.
  sound.enable = true;
  hardware.pulseaudio.enable = true;

  # Mate
  services.xserver = {
    enable = true;
    layout = "fr";
    xkbOptions = "eurosign:e";
    desktopManager = {
      default = "mate";
      xterm.enable = false;
      mate.enable = true;
    };
  };

  # Docker
  virtualisation.docker.enable = true;
  
  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.utux = {
    isNormalUser = true;
    extraGroups = [ "wheel" "networkmanager" "docker" ];
  };

  # Nix Garbage Collector
  nix.gc = {
    automatic = true;
    dates = "weekly";
    options = "--delete-older-than 30d";
  };

  # This value determines the NixOS release with which your system is to be
  # compatible, in order to avoid breaking some software such as database
  # servers. You should change this only after NixOS release notes say you
  # should.
  system.stateVersion = "19.09"; # Did you read the comment?
  system.autoUpgrade.enable = true;

}

Environnement desktop

NixOS Mate

La gestion centralisée de la configuration s'applique au système, mais pas au $HOME de l'utilisateur. Les raccourcis, les thèmes de bureau, les profils se gèrent "à la main", ce qui m'amène à penser que NixOS perd un peu d'intérêt en usage desktop. Cependant, ce point pourrait bientôt changer avec Home-manager.

Lors de la rédaction de cet article, la version de Mate est la 1.22.1 donc très récente, un bon point. Dans la liste des paquets installés, notez firefox-bin et thunderbird-bin. Couplés à l'activation du repo unfree, cela permet d'installer les versions à jour et upstream. Les paquets firefox et thunderbird sont des versions ESR dépourvues du branding de Mozilla, un peu comme Iceweasel et Icedove pour Debian il y a quelques années.

La version de Keepassx fournie par Nix (0.4.4) est trop vieille pour être utilisable avec le format .kdbx, j'ai donc du installer keepassxc à la place. Vscode est disponible lui aussi grâce au repo unfree.

Python...

Globalement je retrouve donc mon environnement et mes applications favorites, mais je dois quand même parler de Python. Sur Debian, j'utilise généralement pip pour installer une version récente de Ansible et Molecule, mais sur NixOS je n'ai simplement pas compris comment ça marche :/ Il y a pourtant une documentation dédiée à Python mais elle a tendance à ne pas situer correctement les contextes ou ne pas donner assez d'exemples. Donc pas de pip pour le moment, j'ai utilisé le paquet NixOS de Ansible.

Performances

En ce qui me concerne, l'utilisation du bureau Mate dans Virtualbox sur NixOS n'est pas très fluide :/ que ce soit l'ouverture d'un onglet, le déplacement d'un fenêtre, le lancement d'un logiciel, tout accuse de saccades et de lags. Debian s'en sort mieux sur ce point, à configuration presque identique (2 vspus, 2Go de ram, vboxsvga, 32Mo vram), mais cette dernière utilise Mate 1.20.4 et pas 1.22.1.

Lorsque j'ai fait des tests sur une machine peu puissante, j'ai remarqué que nixos-rebuild arrive à mettre à genoux le système et les autres VMs, à cause des écritures sur le disque. Et à propos du disque, il faut parler de l'utilisation du stockage. Par nature, NixOS garde plusieurs versions de la configuration (overlays) et des paquets installés, pensez à des snapshots, donc on se doute que l'espace utilisé est important, très important. On peut facilement consommer 30 Go après quelques semaines, ce qui m'amène au point suivant.

Penser au nettoyage (garbage collector)

Heureusement il existe le Garbage collector qu'il faut régulièrement lancer en root:

[utux@nixos:~]$ sudo nix-collect-garbage -d
[...]
deleting '/nix/store/39s914agmm045fv7l3lz81zcvw86m3vb-xsltml_2.1.2.zip.drv'
deleting '/nix/store/5vy6k04dhrwn0951z7dnpkqyxp3r7ws0-jasper-2.0.16-bin'
deleting '/nix/store/p5c18w2cksfxw748d4f8l31rlfk8z1vg-font-adobe-100dpi-1.0.3'
deleting '/nix/store/mny4fywzpgb2yi54a0vz97f5kxlb8932-unit-systemd-modules-load.service.drv'
deleting '/nix/store/xbl8wj6293nfw3vziwqd5xmhrk5gdq6b-rand_hc-0.1.0.tar.gz.drv'
deleting '/nix/store/trash'
deleting unused links...
note: currently hard linking saves -0.00 MiB
8134 store paths deleted, 11574.19 MiB freed

Dans l'exemple ci-dessus, le système a nettoyé pas loin de 11,6 Go de paquets inutiles ! Il est possible d'automatiser ce nettoyage.

Documentation

NixOS a un manuel très détaillé et très instructif. On trouve aussi beaucoup d'informations sur des fils reddit et github. Il est tout de même fréquent de devoir aller lire le code pour savoir comment se configurer un logiciel pour NixOS, ce qui est intimidant au début mais on s'habitue.

Conclusion

Hé hé, un test ou un aperçu d'une distribution est un exercice que je n'ai pas fait depuis longtemps. Je vous encourage à tester NixOS, sur serveur ou en desktop. Cette distribution n'est pas comme toutes les autres que vous connaissez et elle vous plaira particulièrement si vous faites du devops et que vous cherchez une solution pour versionner les configurations de vos bécanes.

Je dois tout de même avouer que l'utilisation desktop est un peu laborieuse, surtout à cause des mauvaises performances dans Virtualbox (qui font que je reviens souvent à ma Debian) mais aussi à l'absence de gestion centralisée des $HOME (pour cela je testerai Home-manager.).

Utiliser NixOS met un peu de piment dans ma vie de Linuxien trop habitué à la Debian family et à la Red Hat family :)

En vrac 2: DownloadHelper, eMMC 32 Go, Athlon II, NextINpact, Alyx

Rédigé par uTux Aucun commentaire

Je suis un peu en retard, mais je découvre que Video DownloadHelper, célèbre extension pour Firefox / Chrome permettant de télécharger les flux vidéo que l'on regarde dans les pages web, requiert depuis fin 2017 l'installation d'un logiciel additionnel sur la machine de l'utilisateur (appelé "Companion App"). Comme beaucoup j'ai été tenté de crier à l'adware, mais il est expliqué que cela serait du à des changements dans l'API de Firefox >= 57. Bon point: le code source est disponible sous github. En ce qui me concerne, j'ai tout de même préféré basculer sur youtube-dl.

On m'a confié un ordinateur portable Asus qui fonctionne bien mais sur lequel "on peut rien copier, il n'y a pas de place du tout alors qu'il est tout neuf". Il s'agit d'un L402S, donc le stockage est assuré par... 32 Go de eMMC. Oui vous avez bien lu, Windows 10 est installé sur un C: de 32 Go, clin d’œil à Cyrille qui a déjà eu affaire à ce genre de machine.

ASUS LS402

On se doute qu'avec aussi peu d'espace disque, on ne peut pas faire grand chose, pas même installer les mises à jour du système. Heureusement Asus a eu le bon goût de proposer un emplacement 2,5" il est donc possible en théorie d'y mettre un SSD et installer Windows dessus (le bios est accessible).

J'ai récupéré un Samsung R525 qui dormait dans une armoire. On trouve des articles évoquant cette machine en 2010, on a donc affaire à quelque chose de pas très récent. Equipé d'un Athlon II X2 M320 et de 3 Go de RAM, on a clairement affaire à un produit d'entrée de gamme, à une époque où AMD était le choix du pauvre pour les laptop.

Samsung R525

La dalle LCD est cassée, je l'ai donc remplacée par une autre achetée sur eBay et en ai profité pour nettoyer la poussière, changer la pâte thermique et installer un SSD. Après avoir installé Windows 10 en 32 bit, la machine fonctionne mais redémarre brutalement de manière intempestive. Un memtest affiche du rouge, il y a donc une barrette défectueuse qu'il faudra remplacer. Au passage la température CPU qui varie de 84°c à 93°c, c'est monstrueux.

J'ai toujours été opposé au passage au 100% payant de NextINpact, j'avais même décidé de ne pas renouveler mon abonnement pour cette raison. Suite à un appel à l'aide lancé en Aout, j'ai choisi de me réabonner. A l'heure où j'écris cet article il y a 473 commentaires dont beaucoup émanant de mécontents qui critiquent la politique du site. Les principaux reproches: Trop de juridique (Hadopi), la promesse non tenue du magasine papier, la situation économique mauvaise et les appels à l'aide qui se répète tous les ans. Il y a certainement du vrai, mais si je refusais de m'abonner je ne ferai qu’aggraver la situation.

Valve ressort la licence Half Life de la cave avec Alyx, un spin-off qui se déroule entre les événements de Half Life 1 et Half Life 2, conçu pour être joué en VR car oui le but est de promouvoir le casque SteamVR. Je suis aigri car je fais partie des joueurs qui attendent depuis bientôt 13 ans une suite à Half Life 2 Episode 2, et par ailleurs je ne suis pas convaincu par les jeux en VR que je trouve lents et rapidement lassants un peu comme si on jouait à une super Wii. Une prise de risque minimale donc pour Valve qui rappelle une fois de plus à son public que la plateforme de vente rapporte plus que les jeux...

Monter ses partages à la demande avec Autofs

Rédigé par uTux 3 commentaires

Je me connecte régulièrement avec mon laptop à des partages Samba/CIFS de mon NAS. Pour cela j'utilise la commande suivante à chaque démarrage:

$ sudo mount -t cifs //192.168.1.1/partage /mnt/partage/ -o user=utux

J'aimerai que ce soit automatique. Le problème est que je ne peux pas utiliser le /etc/fstab car au moment où il est exécuté le réseau n'est pas prêt (wifi ou client openvpn). Il existe bien l'option _netdev mais elle n'a jamais fonctionné pour moi. Ce cas d'usage montre bien les limites des montages Linux qui ne sont pas adaptés à la mobilité et aux environnements dynamiques.

Bonne nouvelle, il existe une alternative: autofs qui s'appuie sur automount. Contrairement à mount, il connecte le partage lorsqu'on y accède (et pas au démarrage) et le déconnecte si on ne l'utilise pas. Il a aussi de nombreuses autres fonctionnalités:

  • Un système de templates utile quand on a de nombreux partages.
  • Support de plusieurs protocoles (cifs, nfs, raw...).
  • Auto-découverte des partages.
  • Consommation de ressources moindre (déconnecte les partages non utilisés)
  • Meilleure tolérance aux coupures réseau.

Installation sous Debian / Ubuntu:

$ sudo apt install autofs

Créer/éditer le /etc/auto.master:

/mnt	/etc/auto.nas --timeout 300 --browse

Créer/éditer le /etc/auto.nas:

partage -fstype=cifs,credentials=/home/utux/.autofs_creds,user=utux,uid=utux,rsize=8192,wsize=8192 ://192.168.1.1/partage

Créer le fichier /home/utux/.autofs_creds:

username=utux
password=secret

Mettre le /home/utux/.autofs_creds en chmod 0600:

$ chmod 0600 /home/utux/.autofs_creds

Mettre le /etc/auto.nas en chmod 0644

$ sudo chmod 0644 /etc/auto.nas

Démarrer le service:

$ sudo systemctl start autofs

Tester:

$ ls /mnt/partage

Si cela ne fonctionne pas:

$ sudo systemctl stop autofs
$ sudo automount -f –v

Notez que cela ne fonctionnera pas si le /etc/auto.nas est exécutable:

$ sudo chmod -x /etc/auto.nas

Autofs est génial et solutionne mes problèmes de montage de partages en mobilité.

EDIT 15/03/2020: Smb version 4, ajout uid pour corriger des problèmes de droits.

Fil RSS des articles de cette catégorie