Les développeurs russophones ont toujours quelque chose à dire: partager certaines de leurs expériences et opinions uniques. Mais dans le format du blog vidéo, en raison de la grande complexité de l'enregistrement, seuls quelques-uns le font maintenant.
Sous la coupe, il a parlé de son chemin difficile vers l'enregistrement et le montage de vidéos à l'aide de logiciels gratuits, de scripts Ruby et d'outils improvisés.
Théorie
J'ai commencé par étudier la théorie de l'enregistrement de blogs vidéo sur des vidéos YouTube en anglais. Et à partir de documents en russe, ce cours s'est avéré trÚs utile (en particulier, le module sur les blogs vidéo et la premiÚre vidéo sur la construction d'un cadre à partir du module sur les rapports). Je me suis également familiarisé avec les fonctionnalités populaires des monteurs vidéo propriétaires afin d'aborder plus consciemment le choix d'un éditeur gratuit.
Je n'ai pas osé investir dans la lumiÚre: il n'y a pas assez de temps pour l'étudier et rechercher la meilleure option, et une étude superficielle des options bon marché parle de rùteaux potentiels comme le scintillement et le mauvais rendu des couleurs. Avec la lumiÚre du jour, je n'ai pas eu de grosses difficultés, ça suffit juste pour de courtes vidéos.
Editeur vidéo
Les outils de montage vidéo gratuits existants contiennent un certain nombre de problÚmes connus: des solutions infructueuses dans l'interface utilisateur et des blocages qui transforment le montage en infini, aux fuites de mémoire, aux plantages et aux artefacts inattendus qui n'apparaissent qu'aprÚs le rendu final.
Il y a beaucoup de problĂšmes et il a fallu du temps pour sĂ©lectionner un Ă©diteur vidĂ©o et Ă©tudier ses bugs, juste pour apprendre Ă gĂ©rer les choses de base. Finalement, il s'est arrĂȘtĂ© Ă Pitivi , simplement parce qu'il a passĂ© tellement de temps Ă chercher et Ă expĂ©rimenter.
Son de Flatpak
La méthode d'installation prise en charge pour Pitivi nécessite Flatpak. Pendant un moment, je l'ai contourné, car Je n'ai pas systemd et PulseAudio dans mon systÚme.
Il s'avÚre que systemd n'est plus nécessaire depuis longtemps. Eh bien, PulseAudio - J'ai dû installer et configurer, il était plus facile de modifier Flatpak . Mais il serait plus correct de mettre PulseAudio, c'est juste un peu fastidieux et il n'est pas clair s'il faut s'attendre à des problÚmes d'enregistrement du son sur du matériel existant ou non.
Installez Pitivi, supprimez les configurations PulseAudio, exécutez:
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo $ sudo flatpak install flathub org.pitivi.Pitivi $ sudo find {/var/lib,~/.local/share}/flatpak/runtime -type f -name '*pulseaudio*.conf' -delete $ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=pitivi org.pitivi.Pitivi
Il n'y a pas de son. Essayons d'exécuter quelque chose de plus simple, par exemple aplay
:
$ sudo find /var/lib/flatpak/app/org.pitivi.Pitivi/x86_64 -type d -path '*/files/bin' -exec cp `which aplay` {} \; $ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=aplay org.pitivi.Pitivi /dev/urandom ALSA lib dlmisc.c:162:(snd_dlsym_verify) unable to verify version for symbol _snd_pcm_empty_open ALSA lib dlmisc.c:283:(snd1_dlobj_cache_get) symbol _snd_pcm_empty_open is not defined inside [builtin] aplay: main:828: audio open error: No such device or address
Probablement alsa-lib
inclus dans Flatpak a été compilé avec --with-versioned
. Une solution rapide consiste Ă remplacer libasound.so
systĂšme:
$ sudo find /var/lib/flatpak -type f -name libasound.so.2.0.0 -exec cp /usr/lib64/libasound.so.2.0.0 {} \; $ find ~/.local/share/flatpak -type f -name libasound.so.2.0.0 -exec cp /usr/lib64/libasound.so.2.0.0 {} \;
Pour moi, cela ne suffisait pas:
$ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=aplay org.pitivi.Pitivi /dev/urandom ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.6-r1/work/alsa-lib-1.1.6/src/pcm/pcm_direct.c:1943:(snd1_pcm_direct_parse_open_conf) The field ipc_gid must be a valid group (create group audio) aplay: main:828: audio open error: Invalid argument
Besoin d'une autre configuration ALSA:
$ sudo find /var/lib/flatpak -type d -name etc -exec cp /etc/asound.conf {} \; $ find ~/.local/share/flatpak -type d -name etc -exec cp /etc/asound.conf {} \;
Enfin, vous pouvez utiliser Pitivi.
ParamÚtres de rendu pour Pitivi résultant- format de conteneur: MP4
- vidéo
- codec x264enc
- avancé
- passe / type d'encodage: quantificateur constant
- quantificateur constant: 18
- débit: 16384 kbit / s
- préréglage de la qualité de la vitesse: ultra-rapide
- préréglage de réglage psychovisuel: film
- audio
- à mes risques et périls, j'utilise "Ne jamais rendre à partir de fichiers proxy"
- tout le reste est la valeur par défaut
Autres effets
Je fais des effets d'animation pour le texte en utilisant le screencast des pages en plein écran, disposé en utilisant révéler.js et animate.css. Dans révéler.js pour certaines diapositives, j'ajoute un son de transition:
<section style="font-size: 5em"> <audio data-autoplay src="/path/to/sound.wav"></audio> #1 </section>
Il s'est avéré important d'enregistrer une capture d'écran avec 60 FPS si le texte est trÚs volumineux. Screencast fait ceci:
Dans mon cas, shared_input_loopback
est le périphérique de la configuration asound.conf .
Cet add- on sur ffmpeg
pour les transitions entre les clips était toujours utile.
Enregistrement vidéo
Ă portĂ©e de main Ă©tait un tĂ©lĂ©phone Meizu MX4, sur lequel j'ai dĂ©cidĂ© d'utiliser une camĂ©ra frontale et d'enregistrer en utilisant Open Camera. Il vous a fallu un certain temps pour vous entraĂźner Ă regarder la camĂ©ra et contrĂŽler votre position dans l'espace sans faire d'erreurs typiques, comme vous couper la tĂȘte. En mĂȘme temps, parlez assez clairement, fort, gesticulez et gĂ©nĂ©rez au moins une sorte d'expression faciale. Mais ce n'Ă©tait que le dĂ©but.
Qu'est-ce qui m'a poussĂ© Ă faire du dĂ©coupage vidĂ©o automatique, et mĂȘme au stade de l'enregistrement?
- Pitivi freine et corrige des bugs lors de l'édition, en particulier lors de l'utilisation de l'outil Ripple Move / Edit , ce qui oblige à redémarrer périodiquement Pitivi.
- Pour moi, le processus de dĂ©coupe manuelle de la vidĂ©o est l'une des choses les plus ennuyeuses. Il est clair qu'il n'est pas trĂšs possible d'automatiser complĂštement (au moins sans un scĂ©nario dans lequel les pauses nĂ©cessaires pour comprendre ce qui a Ă©tĂ© dit ne sont pas explicitement indiquĂ©es), mais au moins ce processus peut ĂȘtre optimisĂ©.
Voici les prérequis pour le futur vélo que je me suis fixé:
- Enregistrez des vidéos à l'aide d'un téléphone Android et du son à l'aide d'un ordinateur portable.
- ContrÎle de la mise au point de la caméra.
- PossibilitĂ© d'arrĂȘter l'enregistrement pour sauvegarder ou supprimer le dernier fragment enregistrĂ©.
- Téléchargez la vidéo du téléphone via USB, avec des tentatives répétées et reprenez , sans bloquer la possibilité d'enregistrer le fragment suivant.
- Synchronisation sonore.
- Déterminer la présence de la voix et lancer des pauses.
- La possibilité de lire rapidement les derniers clips vidéo enregistrés, avec des pauses déjà interrompues.
Pourquoi tant de contrÎle sur les appareils pendant la phase d'enregistrement? Pourquoi ne pas simplement commencer l'enregistrement pendant plusieurs heures d'affilée, puis le modifier? Il y a plusieurs raisons:
- Manque banal d'espace disque.
- La tendance du téléphone à surchauffer et à se décharger rapidement lors d'un enregistrement de longue durée.
- Dysfonctionnement de l'écran tactile dû au fait que le téléphone est dans l'eau. Mais vous devez en quelque sorte contrÎler la mise au point. Oui, et la prochaine pression créerait une vibration inutile de l'appareil.
- ProblĂšmes de tĂ©lĂ©chargement de fichiers volumineux en raison de la mauvaise alimentation du port USB sur mon ordinateur portable. En thĂ©orie, cela peut ĂȘtre rĂ©solu en utilisant un concentrateur USB avec une puissance supplĂ©mentaire. L'utilisation d'un rĂ©seau est trop lente.
- L'envie de revoir rapidement les derniers fragments enregistrés pour s'assurer qu'il n'y a pas d'erreurs et de les réécrire rapidement avant que la planÚte ne tourne au mauvais endroit devant le soleil.
- Le désir de jeter des doublons évidemment mauvais le plus tÎt possible afin de ne pas perdre de temps et d'espace disque sur eux à l'avenir.
- Besoin de synchroniser le long audio enregistré par téléphone et ordinateur portable. Cela peut entraßner un décalage avec la vidéo en raison du fait que les images des flux audio sont éjectées à la fois lors de l'enregistrement à partir d'un ordinateur portable ou lors de l'enregistrement à partir d'un téléphone (ce que vous pouvez probablement résoudre d'une maniÚre ou d'une autre, mais ne voulez pas le risquer et perdre du temps à expérimenter). Il est plus facile de synchroniser les petits fragments séparément, alors une désynchronisation possible ne sera pas perceptible.
- La nĂ©cessitĂ© de gĂ©rer une situation oĂč Open Camera redĂ©marre l'enregistrement en raison d'une taille vidĂ©o de 4 Gio. Vous devrez probablement modifier Open Camera. Si cette restriction sur 4 Gio ne peut pas ĂȘtre supprimĂ©e ou augmentĂ©e, vous devrez lancer un Ă©vĂ©nement sur l'ordinateur portable pour remarquer que l'enregistrement a Ă©tĂ© redĂ©marrĂ© Ă cet endroit.
Il est plus facile d'enregistrer en petits fragments et de rendre l'automatisation primitive de tout ce qui est possible. Ruby a été choisi comme langue principale pour développer un vélo. En fait, maintenant je choisirais probablement Python, mais à ce moment-là , j'apprenais juste Ruby, et je lance de nouvelles langues pour moi dans des expériences aussi étranges.
Découpage vidéo automatique
Les informations sur le réseau sur ce sujet sont peu nombreuses. à propos des recherches dont Stanford et Adobe se sont souvenus plus tard (ce qui n'est pas effrayant, j'ai toujours besoin d'une solution moins sophistiquée).
Le découpage se déroule en 2 étapes: au stade de l'enregistrement - grossier, au stade du rendu - plus précis, avec la possibilité de corriger manuellement trop de fragments coupés. Rough implémenté à l'aide de VAD de WebRTC. Plus précis - avec l'aide de Google Speech (plus précisément - avec l'aide d'une modification du projet de sous- automatique , pour générer des sous-titres pour la vidéo). Je suis sûr qu'il y aura des solutions plus efficaces, il s'est avéré que c'était le meilleur de ce que nous avons réussi à faire rapidement.
Si vous voulez développer quelque chose comme ça en utilisant ffmpeg
, respectez le principe de ne pas essayer d'en faire trop en un seul appel Ă ffmpeg
. Créez des fichiers intermédiaires et contrÎlez chaque étape afin de ne pas avoir à rechercher d'étranges bogues autres que Google, tels que des coupes incorrectes ou des effets non appliqués.
Je commence la disgrùce qui en résulte en quelque sorte comme ceci:
$ bin/vlog-recorder \ --project /path/to/project \ --debug true \ --sound-settings ' --device=usb_card --format=dat' # arecord r - (RE)START recording s - STOP and SAVE current clip S - STOP and SAVE current clip, don't use auto trimming d - STOP and DELETE current clip p - PLAY last saved clip f - FOCUS camera on center h - show HELP q / Ctrl+C - QUIT [ stopped ] [ battery: 100% / 36°C ]
J'ai besoin des arguments pour arecord
pour indiquer explicitement le périphérique afin d'éviter les problÚmes périodiques qui sont probablement dus au plugin dsnoop basé sur ALSA. Vous pouvez également ouvrir le journal pour contrÎler le processus de téléchargement de fichiers à partir du téléphone: tail -f /path/to/project/log.txt
.
Rendez-vous rapidement dans une vidéo pour un aperçu, vous pouvez le faire:
$ bin/vlog-render \ --project /path/to/project \ --language ru \ --video-filters 'hqdn3d,hflip,curves=psfile=/path/to/curves.acv,vignette' \ --speed 1.3 \ --fps 60 \ --preview true
L'argument --video-filters
sont les filtres passés à ffmpeg
. La vidéo s'ouvrira automatiquement dans le lecteur mpv
.
Vous pouvez également échanger ou éliminer les doublons inutiles restants en modifiant le fichier /path/to/project/render.conf
qui peut ĂȘtre dĂ©tectĂ© grĂące Ă la voix reconnue. L'idĂ©e, d'ailleurs, n'est pas nouvelle . LĂ , vous pouvez accĂ©lĂ©rer des fragments individuels et Ă©diter les coupures vidĂ©o infructueuses, le cas Ă©chĂ©ant. La prochaine fois, vlog-render
relira render.conf
et appliquera les modifications.
Pour préparer des fragments pour un éditeur vidéo, vous devez spécifier --preview false
. En plus des fragments qui se trouveront en output
, il les fusionnera néanmoins en un output.mp4
fichier output.mp4
, car au départ je n'étais pas sûr:
- vais-je utiliser de petits clips dans pitivi
- ou téléchargez une longue vidéo pour un découpage supplémentaire (afin que vous puissiez appliquer un certain nombre d'effets au «groupe» de clips).
J'utilise principalement la premiÚre option. La seconde a été utile dans une vidéo avec une faible luminosité: là , je n'ai utilisé qu'un morceau de output.mp4
. Pour la deuxiĂšme option, le script vlog-play-segments
peut Ă©galement ĂȘtre utile: avec lui, vous pouvez voir rapidement toutes les pauses entre les clips dans l'ordre dĂ©croissant de durĂ©e. Cela vous aidera Ă render.conf
plus précisément render.conf
et à gagner du temps plus tard sur l'édition de cette longue vidéo dans Pitivi.
Les petits clips rĂ©sultants peuvent ĂȘtre tĂ©lĂ©chargĂ©s une fois par ligne de temps dans Pitivi: sĂ©lectionnez tous les clips importĂ©s et faites-les glisser Ă l'aide du glisser-dĂ©poser.
Support de téléphone
Je ne voulais pas chercher un support de téléphone adapté, et mes mains me grattaient déjà le visage pour enregistrer au moins quelque chose. Nous prenons un morceau de carton qui vient à portée de main et découpons le support de téléphone pour nos besoins:
Le support est monté sur un écran d'ordinateur portable pour minimiser la distance entre le script et la caméra.
Enregistrement sonore
Un son acceptable est trÚs critique . à portée de main se trouvait un microphone Boya BY-M1. Bien qu'il soit annoncé comme un microphone omnidirectionnel, un bon son en pratique n'est obtenu que lorsque vous l'utilisez comme unidirectionnel.
Il est encore plus facile de faire tenir le microphone: nous prenons une bouteille de jus de grenade qui vient à portée de main, un rouleau de scotch et assemblons ce constructeur:
Vous pouvez Ă©galement mettre une serviette sous cette conception afin de supprimer une partie des vibrations de la table et en mĂȘme temps ajuster la hauteur.
Carte son
Dans mon cas, c'est ASUS Xonar U3. Il s'est avéré, cependant, qu'il n'est pas compatible avec un tel microphone: le microphone a une prise CTIA conçue pour les téléphones. Le problÚme a été résolu par l'adaptateur dans les fiches TRS pour microphone et casque. Et ce n'était pas facile: les fabricants de tels adaptateurs écrivent rarement des détails. Dans mon cas, un Cablexpert CCA-418W a aidé.
Un autre problĂšme avec cette carte est le dĂ©calage DC dans le canal droit lors de l'enregistrement. Ce qui n'interfĂšre pas, car J'enregistre quand mĂȘme en mono. Et pour les logiciels qui ne vous permettent pas de dĂ©finir mono, j'ai redirigĂ© un bon canal vers un mauvais canal en utilisant ALSA.
Cette carte a également peur de surchauffer. Vous devez le tenir éloigné de la glaciÚre, sinon il ralentira et enregistrera le son par à -coups.
Traitement du son
J'édite le son dans le casque (dans mon cas c'est le Pioneer SE-M390), à un volume supérieur à celui sur lequel j'écoute habituellement de la musique. L'algorithme est quelque chose comme ceci:
- En utilisant Pitivi, je rend sĂ©parĂ©ment le son (en utilisant tout de mĂȘme ALAC et MP4). Souvent, je crĂ©e plusieurs pistes distinctes, en choisissant des couches spĂ©cifiques dans Pitivi et en supprimant temporairement celles qui ne sont pas nĂ©cessaires.
- Si les fichiers reçus sont immédiatement téléchargés sur Audacity, nous perdrons l' étirement / la compression du flux audio, ce qui peut entraßner une désynchronisation de la vidéo et de l'audio. Ce qui n'est pas évident, cela ne se produit pas avec toutes les vidéos. Pour éviter que cela ne se produise, appliquez simplement ces étirements / compressions:
ffmpeg -async 1 -i input.mp4 output.flac
- Téléchargez toutes les pistes dans Audacity. Ajoutez de la musique de fond si nécessaire.
- Pour toutes les pistes, réglez le volume souhaité à l'aide de Gain.
- Pour la piste avec la voix, appliquez les effets de réduction du bruit (dans mon cas double), de compresseur et d'égalisation selon les conseils de cette vidéo .
- Nous égalisons et augmentons le volume de la piste avec la voix. L'un des moyens classiques est à nouveau Normalize, Amplify, Limiter et Normalize, mais avec cette approche, je n'ai pas encore pu obtenir la qualité sonore souhaitée.
J'agis temporairement comme ceci: je fais d'abord le gain de toute la piste pour que la partie la plus forte sonne sans surcharge, puis j'applique manuellement Amplify pour des fragments individuels. Mise Ă jour : Un autre moyen puissant est RMS Normalize, Limiter et normal Normalize. Les paramĂštres de normalisation et de limitation RMS peuvent ĂȘtre pris Ă partir d'ici . NĂ©anmoins, cette mĂ©thode ne m'a pas Ă©tĂ© utile, car Quoi qu'il en soit, j'ai dĂ©cidĂ© de passer Ă un autre microphone (Zoom H1n) avec le limiteur intĂ©grĂ©, ce qui me convient (donc avec le nouveau microphone, je dois trĂšs probablement ne faire que Normalize normal, au lieu de toutes ces choses). - Le microphone enregistre parfois le son avec quelques dĂ©fauts qui ressemblent Ă des clics. Ils peuvent ĂȘtre supprimĂ©s Ă l'aide de l'effet multi-outils d'Ă©dition spectrale. Le plus souvent, il est nĂ©cessaire de l'appliquer plusieurs fois de suite pour la zone sĂ©lectionnĂ©e, en utilisant Ctrl + R. Mise Ă jour : grĂące au nouveau microphone, j'ai dĂ©couvert que ces dĂ©fauts sont liĂ©s Ă quelque chose d'extĂ©rieur, probablement une combinaison de bruit dans la bouche et d'autres sons Ă©trangers.
- Nous exportons d'Audacity vers FLAC et fusionnons tout dans un seul fichier:
ffmpeg -i sound.flac -an -i video.mp4 -c copy output.mkv
- Au moins la premiÚre vidéo que j'ai testée sur différents volumes et différents appareils.
Résultat
Profitant de l'occasion pour assouplir les rĂšgles du jeu, je vous invite Ă visiter la chaĂźne YouTube qui en rĂ©sulte, oĂč je partage des idĂ©es sur l'Ă©tude efficace de la programmation et des disciplines connexes.
Bonne chance dans le développement de programmes et la création de blogs vidéo!
Mise Ă jour : traduit cet article pour son blog en anglais.