Exporter des fichiers vers YouTube en ligne de commande
Automatiser vos téléversements sur YouTube peut vous faire gagner un temps considérable. Dans ce tutoriel, vous apprendrez à utiliser youtubeuploader, un outil moderne en ligne de commande écrit en Go, pour gérer efficacement votre flux de publication vidéo.
Restrictions importantes de l’API YouTube
Avant de passer à la mise en œuvre, prenez connaissance de ces restrictions essentielles imposées par l’API YouTube :
- Les nouveaux projets d’API ne peuvent téléverser que des vidéos privées tant que Google ne les a pas validés.
- Vérifiez le quota de votre projet et les limites actuelles de téléversement de vidéos. Attendre entre les téléversements ne reconstitue pas un quota quotidien.
- Les informations d’identification OAuth 2.0 doivent être correctement configurées.
- Pour les applications non validées, vous devez ajouter des utilisateurs de test dans l’écran de consentement OAuth.
Installer youtubeuploader
Téléchargez et installez le binaire précompilé de youtubeuploader adapté à votre plateforme :
# For Linux 64-bit
wget https://github.com/porjo/youtubeuploader/releases/download/v1.24.4/youtubeuploader_1.24.4_Linux_amd64.tar.gz
tar xf youtubeuploader_1.24.4_Linux_amd64.tar.gz
# For macOS on Intel (use Darwin_arm64 for Apple silicon)
wget https://github.com/porjo/youtubeuploader/releases/download/v1.24.4/youtubeuploader_1.24.4_Darwin_amd64.tar.gz
tar xf youtubeuploader_1.24.4_Darwin_amd64.tar.gz
Sous Windows, téléchargez le fichier zip approprié depuis la page des versions et extrayez-le.
Extrayez l’archive dans un nouveau répertoire et placez le binaire dans un répertoire de votre
PATH pour les commandes ci-dessous, ou appelez-le avec
./youtubeuploader. Exécutez youtubeuploader -version pour vérifier la
version 1.24.4. Gardez client_secrets.json et le fichier généré
request.token privés et hors de Git.
Configurer l’authentification OAuth
Configurez les informations d’identification OAuth 2.0 en suivant ces étapes :
- Accédez à la Google Cloud Console.
- Créez un projet ou sélectionnez un projet existant.
- Accédez à APIs & Services et activez YouTube Data API v3.
- Configurez l’écran de consentement OAuth en renseignant le nom de votre application, l’adresse e-mail d’assistance et les champs d’application requis, puis en ajoutant des utilisateurs de test (pour les applications non validées).
- Créez des informations d’identification OAuth en sélectionnant le type « Web application » et en
ajoutant
http://localhost:8080/oauth2callbackcomme URI de redirection autorisée. - Téléchargez le fichier
client_secrets.jsonobtenu et placez-le dans votre répertoire de travail.
Utiliser les commandes de téléversement de base
Voici des exemples pratiques pour téléverser des vidéos avec youtubeuploader :
# Simple video upload
youtubeuploader -filename video.mp4 -title "My Video"
# Upload with metadata from parameters and a JSON file
youtubeuploader -filename video.mp4 \
-title "My Video" \
-description "Video description" \
-privacy "private" \
-tags "tag1,tag2" \
-metaJSON metadata.json
# Upload with rate limiting (1000 kbps)
youtubeuploader -filename video.mp4 \
-title "My Video" \
-ratelimit 1000
Gérer les métadonnées vidéo
Créez un fichier metadata.json pour renseigner les informations détaillées de la vidéo :
{
"title": "My Video",
"description": "Video description\nWith multiple lines",
"tags": ["tag1", "tag2"],
"privacyStatus": "private",
"madeForKids": false,
"embeddable": true,
"license": "creativeCommon",
"publicStatsViewable": true,
"categoryId": "22",
"recordingdate": "2024-02-05"
}
Téléversez la vidéo avec ses métadonnées en exécutant :
youtubeuploader -filename video.mp4 -metaJSON metadata.json
Script de téléversement par lots
Le script Bash suivant téléverse les fichiers terminés un par un et s’arrête au premier échec.
Les métadonnées JSON remplacent celles de la ligne de commande : définissez donc explicitement
privacyStatus dans chaque fichier.
Après un échec réseau au résultat incertain, vérifiez si YouTube a reçu le téléversement avant de
réessayer ; relancer un téléversement peut créer une vidéo en double.
#!/bin/bash
set -euo pipefail
shopt -s nullglob
VIDEO_DIR="./videos"
METADATA_DIR="./metadata"
RATE_LIMIT=1000 # Kbps
upload_video() {
local video=$1
local metadata=$2
if [ -f "$metadata" ]; then
youtubeuploader -filename "$video" \
-metaJSON "$metadata" \
-ratelimit "$RATE_LIMIT"
else
youtubeuploader -filename "$video" \
-title "$(basename "$video" .mp4)" \
-privacy "private" \
-ratelimit "$RATE_LIMIT"
fi
}
for video in "$VIDEO_DIR"/*.mp4; do
filename=$(basename "$video")
name="${filename%.*}"
metadata="$METADATA_DIR/$name.json"
echo "Processing $filename"
if upload_video "$video" "$metadata"; then
echo "Successfully uploaded $filename"
else
echo "Upload failed for $filename; check the result before retrying" >&2
exit 1
fi
done
Rendez le script exécutable avec :
chmod +x batch-upload.sh
Intégrer le téléversement automatisé
Appelez ce script Node.js depuis votre programme de production vidéo après qu’il a fermé un fichier
vidéo terminé. Un événement de surveillance du système de fichiers ou un délai fixe ne prouve pas
qu’un fichier est entièrement écrit. Enregistrez ce script sous upload.cjs et
exécutez node upload.cjs ./uploads/video.mp4. Sérialisez les appels qui partagent le même cache de jetons OAuth.
const { execFile } = require('node:child_process')
const { mkdtemp, rm, writeFile } = require('node:fs/promises')
const { tmpdir } = require('node:os')
const path = require('node:path')
const { promisify } = require('node:util')
const execFileAsync = promisify(execFile)
const RATE_LIMIT = 1000 // Kbps
async function processAndUpload(videoPath) {
const directory = await mkdtemp(path.join(tmpdir(), 'youtube-upload-'))
try {
const metadata = {
title: path.basename(videoPath, path.extname(videoPath)),
description: `Uploaded on ${new Date().toISOString()}`,
tags: ['auto-upload'],
privacyStatus: 'private',
madeForKids: false,
embeddable: true,
publicStatsViewable: true,
}
const metadataPath = path.join(directory, 'metadata.json')
await writeFile(metadataPath, `${JSON.stringify(metadata, null, 2)}\n`, { flag: 'wx' })
const { stdout, stderr } = await execFileAsync('youtubeuploader', [
'-filename',
path.resolve(videoPath),
'-metaJSON',
metadataPath,
'-ratelimit',
String(RATE_LIMIT),
])
if (stderr) {
console.error(`Upload stderr: ${stderr}`)
}
console.log(`Upload successful: ${stdout}`)
} finally {
await rm(directory, { recursive: true, force: true })
}
}
async function main() {
const videoPath = process.argv[2]
if (!videoPath) throw new Error('Usage: node upload.cjs <completed-video>')
await processAndUpload(videoPath)
}
main().catch((error) => {
console.error(`Upload failed: ${error.message}`)
process.exitCode = 1
})
Résoudre les problèmes courants
Limitation du débit et contrôle de la bande passante
Contrôlez la bande passante de téléversement pour éviter la congestion du réseau :
# Limit upload speed to 1000 kbps
youtubeuploader -filename video.mp4 -ratelimit 1000
# Limit bandwidth during business hours
youtubeuploader -filename video.mp4 -ratelimit 1000 -limitBetween 9:00-17:00
Problèmes d’authentification
Si vous rencontrez des problèmes d’authentification :
- Vérifiez le chemin du cache de jetons (
request.tokenpar défaut, ou l’argument-cache). - Confirmez que
client_secrets.jsoncorrespond au projet et à l’URI de redirection prévus. - Pour renouveler l’autorisation, exécutez la commande avec un nouveau chemin
-cacheet suivez la procédure d’authentification dans le navigateur. - Vérifiez que des utilisateurs de test ont été ajoutés dans l’écran de consentement OAuth si votre application n’est toujours pas validée.
Erreurs réseau et API
En cas d’échecs intermittents :
- Vérifiez si une requête ayant échoué a créé une vidéo avant de lancer un nouveau téléversement.
- Surveillez l’utilisation du quota de l’API dans la Google Cloud Console.
- Utilisez l’option
-ratelimitpour gérer la bande passante. - Arrêtez les téléversements lorsque le quota est épuisé et reprenez après sa réinitialisation ou son augmentation.
Conclusion
youtubeuploader offre une solution robuste pour automatiser les téléversements sur YouTube en ligne de commande. Ses fonctionnalités de gestion des métadonnées, de limitation du débit et de traitement par lots en font un outil idéal pour les développeurs qui souhaitent simplifier leur flux de publication vidéo.
Pour des besoins avancés de traitement vidéo avant le téléversement sur YouTube, envisagez d’utiliser le service d’encodage vidéo de Transloadit afin de préparer vos vidéos pour une qualité et une compatibilité optimales.
