Usando o wrapper PHP spatie/ffmpeg (pacote Composer) para controlo limpo e orientado a objetos do FFmpeg.
ffmpeg -version funciona na CLI).composer require spatie/ffmpeg<?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 "Conversão bem-sucedida. Saída: {$output->getPathname()}"; } catch (ConversionFailedException $e) { echo "Conversão falhou: {$e->getMessage()}"; // $e->getCommand() para debug } ?>
-c:v libx264: Codifica vídeo como H.264 (padrão MP4).-tune stillimage: Otimiza para imagem estática (capa de álbum) — ficheiro minúsculo, codificação rápida.-c:a aac -b:a 192k: Re-codifica áudio para AAC 192 kbps (padrão MP4).-pix_fmt yuv420p: Garante ampla compatibilidade de players.-shortest: Para quando o stream mais curto termina (áudio).$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', // manter áudio original '-pix_fmt', 'yuv420p', '-shortest', '-disposition:v', 'attached_pic' // marca como capa ]) ->convert();
max_execution_time do PHP ou usar assíncrono (queue/worker).ConversionFailedException; registar $e->getCommand().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(); // lança exceção em falha
Use o wrapper para manutenibilidade; Process bruto para microsserviços sem dependências.
Tecnologia Eletrônica © [www.351231.com]