Преимущество скорости в сочетании фильтров FFmpeg? - PullRequest
1 голос
/ 04 мая 2020

В настоящее время я использую пять отдельных процессов FFmpeg для выполнения следующих действий:

  1. Обрезать и обрезать Vid B
  2. масштабировать Vid B до высоты Vid A
  3. объединить Vid B и Vid A
  4. добавить постепенное исчезновение / постепенное исчезновение в Combined Vid
  5. добавить наложение для постепенного появления / исчезновения VID

I чтобы все они были настроены на сверхбыстрое время, но это все равно занимает много времени - около 40 секунд, когда каждое видео длится ~ 10 секунд.

Сначала я исследовал объединение некоторых фильтров, но не смог заставить его работать в течение таймфрейма. Я имел в наличии. Я также не был уверен, что время, потраченное на выяснение того, как объединить все фильтры, окупится за более короткое время обработки.

Есть какие-нибудь мысли / идеи от вас, блестящие гуру FFmpeg? Ускорит ли это обработку, и если да, я должен объединить все команды вместе или есть некоторые, которые я должен объединить, а другие я должен оставить отдельно?

Вот мои текущие команды, все из которых работают:

// trimming 200ms off begining of vid B + cropping frame (note that I have previously retrieved dimensions and duration of both videos with ffprobe)
1. `ffmpeg -i vidB.mov -ss 200 -t ${vidB.duration} -async 1 -filter:v "crop=iw:${vidB.croppedHeight}:0:${vidB.offset}" -preset ultrafast -c:a copy croppedVidB.mov`

// scale Vid B up to Vid A's height
2. `ffmpeg -i croppedVidB.mov -vf scale=-2:${vidA.height} vidBScaled.mov`

// combine videos
3. `ffmpeg -i vidA.mov -i vidBScaled.mov -filter_complex "[0:v][1:v] hstack=inputs=2[v]; [0:a][1:a]amix[a]" -map "[v]" -map "[a]" -preset ultrafast -ac 2 combined.mov`

// add fade in & out
4. `ffmpeg -i combined.mov -sseof -1 -copyts -i combined.mov -filter_complex "[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v]; anullsrc,atrim=0:1[at];[0][at]acrossfade=d=1,afade=d=1[a]" -map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset ultrafast -shortest fadeInOut.mov`

// add overlay
5. `ffmpeg -i fadeInOut.mov -i overlay.png -filter_complex overlay=W-w-10:H-h-10 -codec:a copy -preset ultrafast -async 1 overlay.mov`

Заранее спасибо за ваши мысли!

1 Ответ

0 голосов
/ 04 мая 2020

Делайте все в одной команде:

ffmpeg -i vidA.mov -ss 200 -t ${vidB.duration} -i vidB.mov -i overlay.png -filter_complex "[1]crop=iw:${vidB.croppedHeight}:0:${vidB.offset},scale=-2:${vidA.height}[right];[0][right]hstack=inputs=2,fade=t=in:duration=1,fade=t=out:start_time=${vidB.duration - 1}:duration=1[bg];[bg][2]overlay=W-w-10:H-h-10:format=auto,format=yuv420p[v];[0:a][1:a]amix,afade=t=in:duration=1,afade=t=out:start_time=${vidB.duration - 1}:duration=1[a]" -map "[v]" -map "[a]" -c:v libx264 -preset ultrafast -c:a aac -ac 2 -movflags +faststart output.mp4

Обратите внимание на ${vidB.duration - 1}: это был мой ленивый способ показать, что вам нужно вычесть 1 секунду с bc или подобным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...