Синхронизируйте ключевые моменты аудио и видео, добавляя автоматические c паузы - PullRequest
1 голос
/ 02 февраля 2020

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

Предположим, у вас есть аудио и видео клипы. Аудио имеет временные интервалы 0, 5 и 11 секунд, а видео имеет временные интервалы 0, 3 и 16 секунд. Это ключевое время находится в следующем TXT-файле:

Audio   Video
0s      0s        Audio and video playback starts.
5s      3s        (1)
11s     16s       (2)

Алгоритм принимает на вход аудиоклип, видеоклип и TXT-файл, я хочу (автоматически) вычислять паузы и синхронизировать c клипы в соответствии с следующее объяснение:

(1) В течение первых 5 секунд звука воспроизводятся первые 3 секунды видео. Поскольку видео длится меньше, чем аудио, после 3-й секунды видео должна быть вставлена ​​2-секундная пауза (для соответствия длине 5-секундного видео).

(2) Со второй 5-й до 11-й аудио во время воспроизведения с 3 до 16 видео будет воспроизводиться одновременно. Поскольку продолжительность звука будет 6 секунд, а продолжительность видео - 13 секунд, к видео следует добавить 7-секундную паузу.

Я много читал и искал по этому поводу, но у меня нет не нашел ничего, что поможет мне запустить этот алгоритм. Не могли бы вы мне помочь, пожалуйста?

Заранее извиняюсь, если это дублированный вопрос.

1 Ответ

0 голосов
/ 02 февраля 2020

Конкретный фильтр может помочь вам в этом.

Сначала разделите видео- и аудиопотоки в назначенных точках и сбросьте метки времени. Затем объедините их. Давайте используем временные характеристики в вашем примере.

 Audio   Video
0s      0s        Audio and video playback starts.
5s      3s        (1)
11s     16s       (2)

Итак,

ffmpeg -i video -i audio
-filter_complex "[0]split=2[v1][v2];
                 [1]asplit=2[a1][a2];
                 [v1]trim=0:3,setpts=PTS-STARTPTS[v1];
                 [v2]trim=3:16,setpts=PTS-STARTPTS[v2];
                 [a1]atrim=0:5,asetpts=PTS-STARTPTS[a1];
                 [a2]atrim=5:11,asetpts=PTS-STARTPTS[a2];
                 [v1][a1][v2][a2]concat=n=2:v=1:a=1"
output.mp4

Фильтр concat будет использовать самый длинный поток в каждой паре сегментов ([vn][an]) и удлинять более короткий поток с тишиной (аудио) или паузой (видео).

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