#unix #video #ffmpeg
#unix #Видео #ffmpeg
Вопрос:
Я хочу объединить несколько команд в одну, чтобы все время обработки было максимально быстрым. Что я делаю до сих пор, так это
-
Видеофайл загружается из веб-формы и загружается с сервера во временный каталог.
if (move_uploaded_file($_FILES[$param]['tmp_name'], $filePath)) { return $filePath; }
-
добавьте черные границы вокруг видео (с помощью команды ffmpeg) — видео снова загружается в каталог
$command_new = "ffmpeg -i $filePath -vf 'scale=720:1280:force_original_aspect_ratio=decrease,pad=720:1280:(ow-iw)/2:(oh-ih)/2,setsar=1' $video_file"; exec($command_new);
-
оптимизация видео (команда ffmpeg) — видео снова загружается в каталог
$cmd_new = "ffmpeg -i $video_file -c:v libx264 -crf 28 $optimizeResultFile";
-
объединение загруженного файла с существующим видеофайлом, присутствующим в базе данных, в один и загрузка этого файла в каталог (с помощью команды ffmpeg)
$command_new = "ffmpeg -i $optimizeResultFile -i $second_video_path -filter_complex '[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]' -map [vid] -c:v libx264 -crf 23 -preset veryfast $videomerge";
-
//добавить пользовательский звук в это окончательное объединенное видео
$cmd_new = "ffmpeg -i $videomerge -i $audio -c:v copy -c:a aac -shortest -map 0:v:0 -map 1:a:0 $with_new_audio";
Возможно ли выполнить все одной командой, а не несколькими командами. Загрузка конечного файла занимает 1 минуту. хотите сделать это быстрее
Ответ №1:
ffmpeg -i $database -i $uploaded -i $audio -filter_complex "[1:v]scale=720:1280:force_original_aspect_ratio=decrease,pad=720:1280:-1:-1,setsar=1[right];[0:v][right]hstack,format=yuv420p[v]" -map "[v]" -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy -shortest -movflags faststart output.mp4
- Вместо pad overlay используется фильтр hstack.
- Предполагается, что
$database
имеет ту же высоту, что и$uploaded
. - Предполагается,
$audio
что это AAC. В противном случае измените-c:a copy
на-c:a aac
.