skip to Main Content

I need to Merge an audio (.mp3) and video (.mov) file and output an mp4 file using FFMpeg PHP library.

The following works:

$ffmpeg = FFMpegFFMpeg::create([
    'ffmpeg.binaries'  => 'C:/ffmpeg/bin/ffmpeg.exe',
    'ffprobe.binaries' => 'C:/ffmpeg/bin/ffprobe.exe'
]);

/* Open video file */
$video = $ffmpeg->open('sample.mov');

/* Resize video */
$video
    ->filters()
    ->resize(new FFMpegCoordinateDimension(320, 240))
    ->synchronize();

/* Take screenshot from video */
$video->frame(FFMpegCoordinateTimeCode::fromSeconds(10))
    ->save('screen.jpg');

However it’s not quite what I need.
The following command line code is exactly what I’m looking for but I can’t figure out how to convert it into the same format as the above ($ffmpeg version).

exec("ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4");

Question:
Anyone know how to convert the exec into PHP above?

Thanks guys.

2

Answers


  1. Can you try with full paths

    $cmd = 'C:\ffmpeg\bin\ffmpeg.exe -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4';
    exec($cmd, $output)
    

    Looks like its not implemented in PHP-FFMPEG package, you have to do it that way.

    https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues/346#issuecomment-292701054

    Login or Signup to reply.
  2. There is not an explicit PHP-FFMPEG function, but it is possible to build your custom command.

    Here an example to generate an MP4 video merging a PNG image and an MP3 file.

    $ffmpeg = FFMpegFFMpeg::create();
    $advancedMedia = $ffmpeg->openAdvanced(['image.png', 'audio.mp3']);
    $advancedMedia->map([], new FFMpegFormatVideoX264('aac', 'libx264'), 'output.mp4')->save();
    

    More details in the "AdvancedMedia" paragraph of the documentation.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search