Dateien von der Befehlszeile aus zu YouTube exportieren
Die Automatisierung Ihrer YouTube-Uploads kann Ihnen viel Zeit sparen. In diesem Tutorial erfahren Sie, wie Sie youtubeuploader – ein modernes, in Go geschriebenes CLI-Tool – nutzen, um Ihren Workflow zur Videoveröffentlichung effizient über die Befehlszeile zu steuern.
Wichtige Einschränkungen der YouTube-API
Bevor Sie mit der Umsetzung beginnen, beachten Sie diese entscheidenden Einschränkungen der YouTube-API:
- Neue API-Projekte dürfen nur private Videos hochladen, bis sie von Google verifiziert wurden.
- Prüfen Sie das Kontingent Ihres Projekts und die aktuellen Limits für Video-Uploads. Wartezeiten zwischen Uploads füllen ein Tageskontingent nicht wieder auf.
- Die OAuth-2.0-Zugangsdaten müssen korrekt konfiguriert sein.
- Bei nicht verifizierten Apps müssen Sie Testnutzer im OAuth-Zustimmungsbildschirm hinzufügen.
youtubeuploader installieren
Laden Sie die vorkompilierte youtubeuploader-Binärdatei für Ihre Plattform herunter und installieren Sie sie:
# 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
Unter Windows laden Sie die passende ZIP-Datei von der Releases-Seite herunter und entpacken sie.
Entpacken Sie das Archiv in einem neuen Verzeichnis und legen Sie die Binärdatei für die folgenden
Befehle in einem Verzeichnis in Ihrem PATH ab, oder rufen Sie sie als
./youtubeuploader auf. Führen Sie youtubeuploader -version aus, um Version 1.24.4
zu prüfen. Halten Sie client_secrets.json und die generierte Datei
request.token privat und außerhalb von Git.
OAuth-Authentifizierung einrichten
Konfigurieren Sie die OAuth-2.0-Zugangsdaten mit den folgenden Schritten:
- Rufen Sie die Google Cloud Console auf.
- Erstellen Sie ein neues Projekt oder wählen Sie ein vorhandenes aus.
- Navigieren Sie zu APIs & Dienste und aktivieren Sie die YouTube Data API v3.
- Konfigurieren Sie den OAuth-Zustimmungsbildschirm, indem Sie Anwendungsnamen, Support-E-Mail und erforderliche Berechtigungsumfänge festlegen und Testnutzer hinzufügen (bei nicht verifizierten Apps).
- Erstellen Sie OAuth-Zugangsdaten, indem Sie den Typ „Webanwendung“ auswählen und
http://localhost:8080/oauth2callbackals autorisierten Weiterleitungs-URI hinzufügen. - Laden Sie die daraus entstehende Datei
client_secrets.jsonherunter und legen Sie sie in Ihrem Arbeitsverzeichnis ab.
Grundlegende Upload-Befehle
Nachfolgend finden Sie praktische Beispiele, um Videos mit youtubeuploader hochzuladen:
# 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
Video-Metadaten verwalten
Erstellen Sie eine Datei metadata.json, um umfassende Videoinformationen anzugeben:
{
"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"
}
Laden Sie das Video mit Metadaten hoch, indem Sie Folgendes ausführen:
youtubeuploader -filename video.mp4 -metaJSON metadata.json
Skript für Batch-Uploads
Das folgende Bash-Skript lädt fertiggestellte Dateien nacheinander hoch und bricht beim ersten
Fehler ab. Die Metadaten-JSON überschreibt die Metadaten aus der Befehlszeile, legen Sie
privacyStatus daher in jeder Datei bewusst fest. Prüfen Sie nach einem unklaren
Netzwerkfehler, ob YouTube den Upload erhalten hat, bevor Sie es erneut versuchen; ein erneut
ausgeführter Upload kann ein doppeltes Video erzeugen.
#!/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
Machen Sie das Skript ausführbar mit:
chmod +x batch-upload.sh
Integration automatisierter Uploads
Rufen Sie dieses Node.js-Skript aus Ihrem Producer auf, nachdem dieser eine fertiggestellte
Videodatei geschlossen hat. Ein Watch-Ereignis des Dateisystems oder eine feste Wartezeit belegt
nicht, dass eine Datei vollständig geschrieben ist. Speichern Sie es als
upload.cjs und führen Sie node upload.cjs ./uploads/video.mp4 aus. Serialisieren Sie
Aufrufe, die denselben OAuth-Token-Cache verwenden.
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
})
Häufige Probleme beheben
Ratenbegrenzung und Bandbreitensteuerung
Steuern Sie die Upload-Bandbreite, um Netzwerküberlastung zu vermeiden:
# 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
Authentifizierungsprobleme
Wenn Authentifizierungsprobleme auftreten:
- Prüfen Sie den Pfad des Token-Caches (standardmäßig
request.tokenoder das Argument-cache). - Vergewissern Sie sich, dass
client_secrets.jsonzum vorgesehenen Projekt und zum vorgesehenen Weiterleitungs-URI gehört. - Führen Sie den Befehl zur erneuten Autorisierung mit einem neuen Pfad für
-cacheaus und schließen Sie die Authentifizierung im Browser ab. - Stellen Sie sicher, dass im OAuth-Zustimmungsbildschirm Testnutzer hinzugefügt sind, falls Ihre App weiterhin nicht verifiziert ist.
Netzwerk- und API-Fehler
Bei sporadischen Fehlern:
- Prüfen Sie, ob eine fehlgeschlagene Anfrage bereits ein Video erstellt hat, bevor Sie einen neuen Upload starten.
- Überwachen Sie die Nutzung des API-Kontingents in der Google Cloud Console.
- Steuern Sie die Bandbreite mit dem Flag
-ratelimit. - Stoppen Sie, wenn das Kontingent erschöpft ist, und fahren Sie fort, sobald es zurückgesetzt oder Ihr Kontingent erhöht wurde.
Fazit
youtubeuploader bietet eine robuste Lösung, um YouTube-Uploads über die Befehlszeile zu automatisieren. Seine Funktionen für Metadatenverwaltung, Ratenbegrenzung und Batch-Verarbeitung machen es zu einem idealen Werkzeug für Entwicklerinnen und Entwickler, die ihren Workflow zur Videoveröffentlichung optimieren möchten.
Wenn Sie vor dem Upload zu YouTube anspruchsvollere Videoverarbeitung benötigen, nutzen Sie den Video-Encoding-Service von Transloadit, um Ihre Videos für optimale Qualität und Kompatibilität vorzubereiten.
