Я пытаюсь наложить два видео с разным временем начала и смешать их аудио треки.
Эти входные файлы являются записями WebRTC, и каждый из них содержит одну аудио- или видеодорожку.
Входы:
RTc0.webm
: аудио, Opus 40k, время запуска 9,078 секRT5f.webm
: аудио, Opus 40k, время запуска 1,262 секRT8c.mkv
: видео, H.264, время запуска 9,078 секRTf7.mkv
: видео, H.264, время запуска 1,298 сек.
Я хочу нарисовать эти видео бок о бок и смешать их аудио.
Сначала попробуйте, используя -copyts
Первоначально я думал о том, чтобы использовать -copyts
и просто позволять всему выравниваться, используя общий общий тайм-код.
Моя командная строка выглядит так:
ffmpeg \
-copyts \
-ss 224.1 -i RTc0.webm -t 60 \
-ss 224.1 -i RT5f.webm -t 60 \
-ss 224.1 -i RTf7.mkv -t 60 \
-ss 224.1 -i RT8c.mkv -t 60 \
-filter_complex "
color=c=black:s=1280x480 [background];
[2:v] scale=640x480 [left];
[3:v] scale=640x480 [right];
[background][left] overlay [background+left];
[background+left][right] overlay=x=640 [vout];
[1:a][0:a] amix [aout]
" -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
-f matroska combined.mkv
Запустив это, я получаю вывод, где видео корректно (одно видео начинается в 0 секунд, другое начинается через 7 секунд), но обе звуковые дорожки начинаются в 0 секунд. Ожидаемое поведение - одна звуковая дорожка начинается через 0 секунд, а другая начинается через 7 секунд, синхронизируясь со второй видео дорожкой.
Вторая попытка, используя -itsoffset
и asetpts
Я также попытался использовать -itsoffset
для смещения видео дорожек. Это сработало, но -itsoffset
ничего не сделал для моих звуковых дорожек. Это имело странные эффекты, иногда говоря, что они сдвинули их во времени.
ffmpeg \
-ss 0.00000000 -itsoffset 0 -i RTf7.mkv -t 60 \
-ss 0.00000000 -itsoffset 7.781 -i RT8c.mkv -t 60 \
-ss 0.00000000 -itsoffset 7.816 -i RT5f.webm -t 60 \
-ss 0.00000000 -itsoffset 0 -i RTc0.webm -t 60 \
-filter_complex "
color=c=black:s=1280x480 [background];
[0:v] scale=640x480 [left];
[1:v] scale=640x480 [right];
[background][left] overlay=shortest=1 [background+left];
[background+left][right] overlay=shortest=1:x=640 [vout];
[2:a][3:a] amix=inputs=2:duration=longest [aout]
" -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
-f matroska combined.mkv
Затем я попытался использовать фильтр asetpts
чтобы сместить звуковую дорожку, чтобы сохранить выравнивание, но это не сработало. Команда asetpts=PTS+(7.816/TB)
была просто проигнорирована:
ffmpeg \
-copyts \
-ss 0 -i RTc0.webm -t 60 \
-ss 0 -i RT5f.webm -t 60 \
-ss 0 -itsoffset 0 -i RTf7.mkv -t 60 \
-ss 0 -itsoffset 7.781 -i RT8c.mkv -t 60 \
-filter_complex "
color=c=black:s=1280x480 [background];
[2:v] scale=640x480 [left];
[3:v] scale=640x480 [right];
[background][left] overlay [background+left];
[background+left][right] overlay=x=640 [vout];
[1:a] asetpts=PTS+(7.816/TB), [0:a] amix [aout]
" -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
-f matroska segment_0.mkv
Что я делаю неправильно?