#video #ffmpeg
#Видео #ffmpeg
Вопрос:
Я пытаюсь автоматизировать некоторые шаги на работе. Мне было поручено добавить отказ от ответственности в начале наших лекционных видеороликов, обрезать лекционные видеоролики на несколько секунд в начале и в конце (с постепенным увеличением и уменьшением) и добавить логотип поверх наших лекционных видеороликов. Я могу это сделать, но, к сожалению, только отдельными шагами. Чего я хочу добиться, так это выполнить все шаги с помощью одной команды.
Я смог объединить некоторые команды, но не одну со следующей.
Я не знаю, ожидаю ли я слишком многого от FFmpeg.
Заранее спасибо за любые предложения.
Вот мой код:
Создание отказа от ответственности с постепенным увеличением и уменьшением
ffmpeg -i media/disclaimer.jpg -filter_complex "[0:v]fps=fps=30,loop=loop=450:size=30:start=0[v0];[v0]fade=t=in:st=0:d=1,fade=t=out:st=14:d=1" disclaimer.mp4
Добавьте пустую звуковую дорожку к отказу от ответственности
ffmpeg -i disclaimer.mp4 -f lavfi -i aevalsrc=0 -shortest -y disclaimer_final.mp4
Добавить логотип к видео лекции
ffmpeg -i lecture.mp4 -i logo.png -filter_complex "overlay=0:0" lecture_logo.mp4
Обрезать видео лекции
ffmpeg -ss 00:00:05 -i lecture_logo.mp4 -to 00:45:32 -async 1 lecture_out.mp4
Добавьте постепенное включение и выключение в видео лекции
ffmpeg -i lecture_out.mp4 -filter_complex "[0:v]fade=t=in:st=0:d=2,fade=t=out:st=2730:d=2;[0:a]afade=t=in:st=0:d=2,afade=t=out:st=2730:d=2" lecture_final.mp4
И, наконец, объедините видео с отказом от ответственности и лекцией
ffmpeg -i disclaimer_final.mp4 -i lecture_final.mp4 -filter_complex "[0:v][0:a][1:v][1:a] concat=n=2:v=1:a=1 [outv] [outa]" -map "[outv]" -map "[outa]" final.mp4
Комментарии:
1. В видео лекции по обрезке, поскольку вы установили поиск ввода на 5 секунд,
to
видео завершится на 45m37s источника. Это предназначено?2. Да, я привел это в качестве примера. Наши лекторы оставляют пробелы в начале и в конце, поэтому видео необходимо обрезать. Эти две временные метки будут меняться от лекции к лекции.
3. Я хочу сказать, что
to
значение в вашей команде trim не будет ссылаться на временную метку в исходном файле — надеюсь, вы об этом знаете.4. О, теперь я понимаю. В этом случае общая продолжительность будет равна 2727, и для того, чтобы применить затухание в 2 секунды, оно должно быть установлено на 2725 на моем пятом шаге. Спасибо, что указали на это. Есть надежда объединить все в одну?
Ответ №1:
Я решил это, но должен был пойти на компромисс. Вместо того, чтобы генерировать отказ от ответственности и добавлять фиктивную звуковую дорожку, как показано на первых двух шагах, я буду использовать ее вывод в формате mp4. Оставшиеся четыре шага были объединены в команду ниже:
ffmpeg -i lecture.mp4 -i logo.png -i disclaimer.mp4 -filter_complex
"[0:v]trim=start=5:end=2732,setpts=PTS-STARTPTS[v0];
[0:a]atrim=start=5:end=2732,asetpts=PTS-STARTPTS[a0];
[v0][1:v]overlay=0:0[vv0];
[vv0]fade=t=in:st=0:d=2,fade=t=out:st=2725:d=2[vvv0];
[a0]afade=t=in:st=0:d=2,afade=t=out:st=2725:d=2[aa0];
[2:v][2:a][vvv0][aa0]concat=n=2:v=1:a=1[vv][aa]"
-map [vv] -map [aa] output.mp4