СИТУАЦИЯ:
Мне нужно, чтобы объединить несколько видео в одно видео.
Я использую библиотеку PHP-FFMpeg .
Но мне не удается заставить его работать.
ВИДЕО:
Видео - это записи, сделанные с помощью MediaRecorder Web API .
Формат видео: video/webm;codecs=h264
Формат аудио: opus
.
recorder = new MediaRecorder(this.stream, {
mimeType: 'video/webm;codecs=h264'
})
CONCAT с использованием PHP-FFMPEG (с использованием saveFromSameCodecs):
Вот как я пытаюсь объединить их, используя saveFromSameCodecs
:
(я проверил пути и они верны)
$video = $ffmpeg->open( $path1 );
$video
->concat([$path1, $path2])
->saveFromSameCodecs($path_output, TRUE);
Но это не удалось со следующим сообщением об ошибке:
ffmpeg не удалось выполнить команду '/ usr / local / bin / ffmpeg' '-f' 'concat' '-safe' '0' '-i' '/ private / var / folder / dw / 919v2nds7s78pz_qhp7z9rcm0000gn / T /ffmpeg-concath1kHiX '' -c '' copy '' /Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/storage/app/public/videos/output.mp4'
ОБРАЩЕНИЕ С ИСПОЛЬЗОВАНИЕМ КОМАНДНОЙ СТРОКИ FFMPEG:
По предложению @RolandStarke и @LordNeckbeard Я попытался использовать командную строку ffmpeg , чтобы лучше понять, что такоепродолжается.
Если я использую следующую командную строку:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
Я получаю следующую ошибку, связанную с audio opus codec .
![enter image description here](https://i.stack.imgur.com/BZl7n.png)
Если я использую следующую командную строку, преобразование звука, закодированного в acc
:
ffmpeg -f concat -safe 0 -i mylist.txt -c:v copy -c:a aac output.mp4
Окончательное видеоправильно создан, как объединение других видео.
CONCAT, ИСПОЛЬЗУЮЩИЙ PHP-FFMPEG: (используя saveFromDifferentCodecs)
Кажется, проблема связана ТОЛЬКО с кодеком.Итак, я попытался использовать saveFromDifferentCodecs
:
$format = new FFMpeg\Format\Video\X264('libfdk_aac', 'libx264');
$result = $video1
->concat([$path1, $path2])
->saveFromDifferentCodecs($format, $output_path);
Но я все еще получаю ошибку:
ffmpeg не удалось выполнить команду '/ usr / local / bin / ffmpeg' '-i '' /Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/storage/app/public/videos/test1.mp4 '' -i '' / Пользователи / francescomussi / Рабочий стол / Приложения / cameraProject/back-end/camera-laravel/storage/app/public/videos/test2.mp4 '' -filter_complex '' [0: v: 0] [0: a: 0] [1: v: 0] [1:a: 0] concat = n = 2: v = 1: a = 1 [v] [a] '' -map '' [v] '' -map '' [a] '' -b: a '' 128k'' /Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/storage/app/public/videos/output.mp4'
CONCAT USING PHPFFMPEG (нос разными видео):
Если проблема связана только с кодеком, то используйте два разных видео с
видеокодеком: h264
и аудиокодеком aac
,
itдолжно работать, но это не так:
ffmpeg failed to execute command '/usr/local/bin/ffmpeg' '-f' 'concat' '-safe' '0' '-i' '/private/var/folders/dw/919v2nds7s78pz_qhp7z9rcm0000gn/T/ffmpeg-concatoJGhLt' '-c' 'copy' '/Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/storage/app/public/videos/output.mp4'
Но при использовании командной строки все работает гладко: ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
CONCAT USING shell_exec:
Я пробовал использовать shell_exec с первыми двумя видео (кодек opus):
echo shell_exec("/usr/local/bin/ffmpeg -f concat -safe 0 -i /Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/mylist.txt -c:v copy -c:a aac /Users/francescomussi/Desktop/Apps/cameraProject/back-end/camera-laravel/output.mp4 2>&1");
И все работает без сбоев.Окончательный вывод создается с помощью аудиокодека acc.
ИСПЫТАНИЕ БИБЛИОТЕКИ:
Чтобы проверить, работает ли php-mpeg, я проверяю его, выполнивбазовое изменение размера видео, и оно работало корректно.
РЕЗЮМЕ:
- С помощью командной строки ffmpeg все работает отлично
- Используя shell_exec всеотлично работает
- Используя php-ffmpeg я всегда получаю сообщение об ошибке
ffmpeg failed to execute command
ВОПРОС:
Как я могу объединить видео с помощью php-ffmpeg?
Проблема вызвана неправильной кодировкой?
Спасибо!