объединить несколько команд ffmpeg в одну строку, чтобы ускорить весь процесс

#unix #video #ffmpeg

#unix #Видео #ffmpeg

Вопрос:

Я хочу объединить несколько команд в одну, чтобы все время обработки было максимально быстрым. Что я делаю до сих пор, так это

  1. Видеофайл загружается из веб-формы и загружается с сервера во временный каталог.

      if (move_uploaded_file($_FILES[$param]['tmp_name'], $filePath)) {
    
    
           return $filePath;
         }
      
  2. добавьте черные границы вокруг видео (с помощью команды 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);
      
  3. оптимизация видео (команда ffmpeg) — видео снова загружается в каталог

       $cmd_new = "ffmpeg -i $video_file -c:v libx264 -crf 28 $optimizeResultFile";
      
  4. объединение загруженного файла с существующим видеофайлом, присутствующим в базе данных, в один и загрузка этого файла в каталог (с помощью команды 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";
      
  5. //добавить пользовательский звук в это окончательное объединенное видео

            $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 .