Как создать видео максимально быстро с субтитрами и аудио на node.js + ffmpeg? - PullRequest
0 голосов
/ 12 сентября 2018

Intro:

Мы получаем с сайта несколько фрагментов текста. Pieces прибывают на node.js-сервер

На выходе нам нужно получить видео, объединенное из всех фрагментов.Текст, озвученный машинным голосом, с добавленными субтитрами и звуковой подложкой.Чтобы этот пользователь мог поделиться этим видео в социальных сетях.Формат MKV не поддерживается VK.com

Варианты, которые мы попробовали: 1. Получить весь текст одновременно, сгенерировать всю речь, создать файл с субтитрами, записать субтитры в видео .mp4(vk.com не поддерживает контейнер .mkv).Для 45-секундного видео на локальном компьютере потребовалось 12 секунд операций.2. Создайте аудио и видео файлы для каждого фрагмента текста (с добавленными субтитрами).Это заняло одну секунду для одного фрагмента текста.По последнему запросу мы объединяем все части вместе.Последний запрос (объединение) занял 2-3 секунды , что уже терпимо.

Второй вариант выглядит приемлемым с точки зрения скорости, но если вы одновременно запускаете 50 клиентов,затем компьютер (тестировался на MacBook PRO 2013, 2,4 ГГц i7, 8 ГБ 1600 МГц DDR3, SSD 256 ГБ) обрабатывал только 1 фрагмент из 1 клиента за 60 секунд ( 60 раз медленнее )затем компьютер завис.

Используемые нами команды:

  • Запись субтитров и обрезка до условных 6 секунд(в коде отправить unix timestamp)

ffmpeg -i import / back.mov -i export_0 / tmp.srt -scodec mov_text -t 6 export_0 / output.mov

  • Объединение всех аудио

ffmpeg -i audio1.mp3 .... -i audio15.mp3 merged.mp3

  • Наложение аудио-подложки на текст

ffmpeg -i merged.mp3 -i back.mp3 -filter_complex amerge -ac 2-c: a libmp3lame -q: a 4 -shortest audio.mp3

  • Объединение всех видео

ffmpeg -i video.txt -f concat -c copy video.mp4

  • Наложение аудио на видео

ffmpeg -i audio.mp3 -i video.mp4 -i test.mp4 -i export / output.mp3 -c: v copy -c: a aac -map 0: v: 0 -map 1: a: 0 -shortest output .mp4

Вопросы , которые мучают:

  1. Это быстрее?

  2. Могу ли я использовать другие кодекиили методы склейки без перекодирования?

  3. Попробуйте вызвать ffmpeg напрямую без обертки?(фактически это дает 50-100 мс скорости)

  4. Старайтесь не сохранять на диск, а записывать данные в Stream и объединять их вместе в конце?

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