Вопрос или проблема
Используя ffmpeg, есть предложения о том, как обрезать или как сделать затухание, но как можно сделать и то, и другое в одной команде?
Видео должно начинаться черным в 00:10:07 с затуханием в течение 1 секунды, так что в 00:10:08 оно должно быть полностью видимым.
- Можно ли обрезать и сделать затухание одновременно?
- Могу ли я сначала протестировать это (для больших видеофайлов это занимает часы). ffplay работает немного иначе, чем ffmpeg.
- И возможно ли сделать что-то подобное в конце (начать затухание в 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 секунду.
Заключение
Воспользовавшись приведенными командами, вы сможете одновременно обрезать начало вашего видео и добавлять эффекты плавного появления и исчезновения, что делает ваши видео более профессиональными и интересными. Если у вас появятся дополнительные вопросы или потребуется помощь — не стесняйтесь задавать их.