Как обрезать начало И сделать затухание одновременно с помощью ffmpeg

Вопрос или проблема

Используя ffmpeg, есть предложения о том, как обрезать или как сделать затухание, но как можно сделать и то, и другое в одной команде?

Видео должно начинаться черным в 00:10:07 с затуханием в течение 1 секунды, так что в 00:10:08 оно должно быть полностью видимым.

  1. Можно ли обрезать и сделать затухание одновременно?
  2. Могу ли я сначала протестировать это (для больших видеофайлов это занимает часы). ffplay работает немного иначе, чем ffmpeg.
  3. И возможно ли сделать что-то подобное в конце (начать затухание в 01:28:57 с длительностью 1 секунда, а затем игнорировать остальное)?

Спасибо за любую помощь!

Гари

Это относительно просто с ffmpeg:

ffmpeg -i input -ss 00:10:07 -to 01:28:57 -vf "fade=in:start_time=00:10:07:duration=1,fade=out:start_time=01:28:57:duration=1" -c:a copy output

Добавьте опции кодировщика видео к вашей команде.


Обратите внимание, что это переработает все видео. Если вычислительная мощность является узким местом, вы можете (в теории) применить затухания по отдельности, а затем соединить основную часть. Предполагая, что ваш входной файл — это x264 в mp4 с 30 кадрами в секунду и I-кадрами каждые 10 секунд, и libx264 производит байтовый поток, который довольно совместим, вы можете попробовать следующее:

# сначала, найдите I-кадры
ffprobe -v error -skip_frame nokey -show_entries frame=pts_time -select_streams v -of csv=p=0 input.mp4 
# для затухания, я перемещаю конечное время сегмента к следующему I-кадру с помощью specifier to
ffmpeg -i input.mp4 -ss 7 -to 00:10:9.96666666 -vf "fade=in:start_time=00:10:07:duration=1" -c:v libx264 -crf 18 -c:a copy fade_in_part.mp4
# для затухания я использую точный поиск с ss после входного файла. to — это место, где затухание должно закончиться. время начала затухания является абсолютным.
ffmpeg -i input.mp4 -ss 01:28:50 -to 01:28:58 -vf "fade=out:start_time=01:28:57:duration=1" -c:v libx264 -crf 18 -c:a copy fade_out_part.mp4
# для основной части я использую I-кадры (с ss и to перед входным файлом)
ffmpeg -ss 00:10:10 -to 01:28:49.96666666 -i input.mp4 -c copy main_part.mp4
# теперь объединим три части
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4

Где file_list.txt содержит:

file 'fade_in_part.mp4'
file 'main_part.mp4'
file 'fade_out_part.mp4'

Таким образом, вы запишите основную часть дважды, делая I/O узким местом.

Я считаю этот метод прихотливым и трудным для исполнения.

Ответ или решение

Для выполнения одновременного обрезания видео и добавления эффекта плавного появления с помощью ffmpeg, потребуется использовать несколько параметров в одной команде. Давайте подробно рассмотрим этот процесс, а также ответим на дополнительные вопросы, поставленные вами.

1. Как обрезать и добавить эффект плавного появления одновременно?

Для того чтобы получить видео, которое начинается с черного экрана в 00:10:07 и плавно появляется на экране в течение одной секунды, используя команду ffmpeg, вам следует выполнить следующую команду:

ffmpeg -i input.mp4 -ss 00:10:07 -vf "fade=in:st=0:d=1" -c:a copy -to 01:28:57 output.mp4

Пояснение параметров:

  • -i input.mp4 — указывает входной файл.
  • -ss 00:10:07 — перемещает указатель времени к 10:07.
  • -vf "fade=in:st=0:d=1" — задает фильтр видео для эффекта плавного появления: st=0 указывает на начало отсчета времени эффекта, а d=1 задает его продолжительность в 1 секунду.
  • -c:a copy — копирует аудиодорожку без изменений.
  • -to 01:28:57 — указывает конечное время обработки видео.

2. Как протестировать команду на больших видеофайлах?

Чтобы избежать длительной обработки больших видеофайлов, вы можете использовать ffplay, который позволяет быстро и грубо контролировать срезы и эффекты:

ffplay input.mp4 -ss 00:10:07 -t 90

Пояснение параметров:

  • -ss 00:10:07 — задает начальную позицию воспроизведения.
  • -t 90 — указывает длительность воспроизведения (90 секунд в данном случае).

Таким образом, вы можете проверить основные аспекты вашего среза перед тем, как применять команду ffmpeg.

3. Можно ли делать что-то подобное в конце видео?

Да, в ffmpeg также возможно задать эффект плавного исчезновения в конце видео. Для этого вы можете добавить параметр fade=out в команду, как показано ниже:

ffmpeg -i input.mp4 -ss 00:10:07 -vf "fade=in:st=0:d=1, fade=out:st=01:28:57:d=1" -c:a copy -to 01:28:58 output.mp4

Здесь:

  • fade=out:st=01:28:57:d=1 — устанавливает эффект плавного исчезновения, который начинается в 01:28:57 и длится 1 секунду.

Заключение

Воспользовавшись приведенными командами, вы сможете одновременно обрезать начало вашего видео и добавлять эффекты плавного появления и исчезновения, что делает ваши видео более профессиональными и интересными. Если у вас появятся дополнительные вопросы или потребуется помощь — не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...