>> Technologie Électronique >  >> Audio personnel >> Lecteurs MP3

Convertir MP3 en MP4 avec PHP & FFmpeg (Exemple de Code)

Utilisation du wrapper PHP spatie/ffmpeg (package composer) pour contrôle FFmpeg propre et orienté objet.

Prérequis

  • PHP 8.0+
  • Composer
  • FFmpeg installé sur serveur (ffmpeg -version fonctionne en CLI).
  • Package composer : composer require spatie/ffmpeg

Script de Conversion Basique

<?php require 'vendor/autoload.php'; use Spatie\Ffmpeg\Ffmpeg; use Spatie\Ffmpeg\Exception\ConversionFailedException; try { $ffmpeg = Ffmpeg::create(); $output = $ffmpeg->input('/path/to/input.mp3') ->output('/path/to/output.mp4') ->addArguments(['-c:v', 'libx264', '-tune', 'stillimage', '-c:a', 'aac', '-b:a', '192k', '-pix_fmt', 'yuv420p', '-shortest']) ->convert(); echo "Conversion réussie. Sortie: {$output->getPathname()}"; } catch (ConversionFailedException $e) { echo "Échec conversion: {$e->getMessage()}"; // $e->getCommand() pour debug } ?> 

Arguments Clés Expliqués

  • -c:v libx264 : Encode vidéo en H.264 (standard MP4).
  • -tune stillimage : Optimise pour image statique (pochette album) — fichier minuscule, encodage rapide.
  • -c:a aac -b:a 192k : Ré-encode audio en AAC 192 kbps (standard MP4).
  • -pix_fmt yuv420p : Assure compatibilité lecteurs large.
  • -shortest : Stoppe quand flux le plus court se termine (audio).

Ajouter Pochette Album (Piste Vidéo)

$ffmpeg->input('/path/to/input.mp3') ->input('/path/to/cover.jpg') ->output('/path/to/output.mp4') ->addArguments([ '-map', '0:a', '-map', '1:v', '-c:v', 'libx264', '-tune', 'stillimage', '-c:a', 'copy', // garde audio original '-pix_fmt', 'yuv420p', '-shortest', '-disposition:v', 'attached_pic' // marque comme pochette ]) ->convert(); 

Considérations Production

  • Validez chemins : Assurez existence entrée, dossier sortie accessible en écriture.
  • Timeouts : Définissez PHP max_execution_time ou utilisez asynchrone (file d'attente/worker).
  • Sécurité : Assainissez noms fichiers ; ne passez jamais entrée utilisateur direct au shell.
  • Limites ressources : FFmpeg utilise CPU/RAM ; surveillez sur mutualisé.
  • Gestion erreurs : Attrapez ConversionFailedException ; loggez $e->getCommand().

Alternative : Symfony Process (Sans Wrapper)

use Symfony\Component\Process\Process; $process = new Process([ 'ffmpeg', '-y', '-i', '/path/to/input.mp3', '-c:v', 'libx264', '-tune', 'stillimage', '-c:a', 'aac', '-b:a', '192k', '-pix_fmt', 'yuv420p', '-shortest', '/path/to/output.mp4' ]); $process->mustRun(); // lance exception si échec 

Utilisez le wrapper pour maintenabilité ; Process brut pour microservices sans dépendance.

Lecteurs MP3