Audio mit cURL und Open-Source-Tools codieren
Audio-Encoding auf der Kommandozeile kann leistungsstark und effizient sein, wenn Sie cURL mit Open-Source-Tools kombinieren. Dieser Leitfaden zeigt Ihnen, wie Sie robuste Workflows zur Audioverarbeitung mit cURL und FFmpeg erstellen.
Ihre Umgebung einrichten
Stellen Sie zunächst sicher, dass die erforderlichen Tools installiert sind. Sie benötigen cURL
(auf den meisten Systemen bereits vorinstalliert), Bash und FFmpeg für die Audioverarbeitung. Die
Beispiele für MP3 und Opus erfordern einen FFmpeg-Build mit libmp3lame bzw. libopus.
FFmpeg installieren:
# macOS
brew install ffmpeg
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install ffmpeg
# Fedora
sudo dnf install ffmpeg
# Arch Linux
sudo pacman -S ffmpeg
# Windows
winget install Gyan.FFmpeg
Grundlegendes Audio-Encoding mit FFmpeg und cURL
Beginnen wir mit einem einfachen Beispiel zum Herunterladen und Codieren einer Audiodatei:
# Download an audio file
set -euo pipefail
mkdir audio-example
curl -fsSL -o audio-example/input.mp3 https://example.com/audio.mp3
# Encode AAC audio in an M4A container
ffmpeg -nostdin -n -i audio-example/input.mp3 -map 0:a:0 -c:a aac -b:a 192k audio-example/output.m4a
# Upload the encoded file
curl -fsS -F "file=@audio-example/output.m4a" https://example.com/upload
Ein Skript für das Audio-Encoding erstellen
Speichern Sie dies als encode_audio.sh und führen Sie es mit Bash aus. Es akzeptiert aac, m4a, mp3 oder opus als
Ausgabeformat und wählt den entsprechenden Encoder und Container. Jeder Aufruf erstellt ein
eindeutiges Ausgabeverzeichnis, sodass gleichzeitige Durchläufe und wiederholte URLs frühere
Ergebnisse nicht überschreiben können.
#!/bin/bash
set -euo pipefail
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <input_url> <output_format> <output_bitrate>"
echo "Example: $0 https://example.com/audio.mp3 aac 192k"
exit 1
fi
INPUT_URL=$1
OUTPUT_FORMAT=$2
BITRATE=$3
case "$OUTPUT_FORMAT" in
aac) CODEC=aac; CONTAINER=adts ;;
m4a) CODEC=aac; CONTAINER=ipod ;;
mp3) CODEC=libmp3lame; CONTAINER=mp3 ;;
opus) CODEC=libopus; CONTAINER=ogg ;;
*) echo "Unsupported output format: $OUTPUT_FORMAT" >&2; exit 1 ;;
esac
if [[ ! "$BITRATE" =~ ^[1-9][0-9]*k$ ]]; then
echo "Bitrate must be a positive integer followed by k, such as 192k" >&2
exit 1
fi
WORK_DIR=$(mktemp -d ./audio-encode.XXXXXX)
INPUT_FILE="$WORK_DIR/input.audio"
OUTPUT_FILE="$WORK_DIR/output.$OUTPUT_FORMAT"
# Successful runs retain their output; failed runs leave no empty work directory.
trap 'rm -f -- "$INPUT_FILE"; rmdir -- "$WORK_DIR" 2>/dev/null || true' EXIT
# Download the input file
echo "Downloading input file..."
if ! curl -fsSL --retry 3 --proto '=http,https' --proto-redir '=http,https' \
-o "$INPUT_FILE" -- "$INPUT_URL"; then
echo "Error: Failed to download input file" >&2
exit 1
fi
# Encode the audio
echo "Encoding to ${OUTPUT_FORMAT} format..."
if ! ffmpeg -nostdin -n -xerror -i "$INPUT_FILE" -map 0:a:0 -vn \
-c:a "$CODEC" -b:a "$BITRATE" -f "$CONTAINER" "$OUTPUT_FILE"; then
echo "Error: Failed to encode audio" >&2
rm -f -- "$OUTPUT_FILE"
exit 1
fi
echo "Successfully encoded to: ${OUTPUT_FILE}"
Stapelverarbeitung von Audiodateien
Speichern Sie dieses Batch-Skript neben encode_audio.sh und führen Sie es aus diesem Verzeichnis aus.
Jede nicht leere Zeile der Liste enthält eine URL, ein Ausgabeformat und eine Bitrate, getrennt
durch Leerzeichen. Verwenden Sie für Leerzeichen in URLs die Prozentcodierung. Downloads werden vor
dem Encoding abgeschlossen, damit FFmpeg innerhalb der Eingabedatei springen kann.
#!/bin/bash
set -euo pipefail
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <input_file_list.txt>"
echo "File list format: <input_url> <output_format> <bitrate>"
exit 1
fi
INPUT_LIST=$1
failed=0
while IFS=' ' read -r url format bitrate extra || [[ -n "$url" ]]; do
[[ -z "$url" ]] && continue
echo "Processing: ${url}"
if [[ -n "$extra" || -z "$format" || -z "$bitrate" ]]; then
echo "Invalid list entry: $url" >&2
failed=1
elif bash ./encode_audio.sh "$url" "$format" "$bitrate"; then
echo "Success: ${url}"
else
echo "Failed: ${url}" >&2
failed=1
fi
done < "${INPUT_LIST}"
exit "$failed"
Sicherheitsüberlegungen
Beim Arbeiten mit entfernten Dateien und APIs:
# Use environment variables for sensitive data
export API_TOKEN="your_secret_token"
curl -H "Authorization: Bearer ${API_TOKEN}" https://api.example.com/upload
# Verify SSL certificates
curl --cacert /path/to/certificate.pem https://api.example.com/audio
# Rate limiting for batch operations
sleep 1 # Add delay between requests
Fehlerbehandlung und Validierung
Implementieren Sie in Ihren Workflows eine sorgfältige Fehlerprüfung:
# Check audio file validity
if ! ffmpeg -nostdin -v error -xerror -i input.mp3 -map 0:a:0 -f null -; then
echo "Audio validation failed" >&2
exit 1
fi
# Verify successful upload
if ! HTTP_STATUS=$(curl -sS -o /dev/null -w "%{http_code}" \
-F "file=@output.m4a" https://example.com/upload); then
echo "Upload request failed" >&2
exit 1
fi
if [ "$HTTP_STATUS" -lt 200 ] || [ "$HTTP_STATUS" -ge 300 ]; then
echo "Upload failed with status: ${HTTP_STATUS}"
exit 1
fi
Fazit
Die Kombination von cURL und FFmpeg bietet eine leistungsstarke Grundlage für Workflows zur Audioverarbeitung. Mit diesen Tools erstellen Sie effiziente, automatisierte Lösungen für Aufgaben rund um das Audio-Encoding.
Für fortgeschrittenere Möglichkeiten der Audioverarbeitung können Sie den Robot /audio/encode von Transloadit erkunden, der ähnliche Funktionen mit zusätzlichen Features und Skalierbarkeit bietet.
