Я создаю 200 видеофайлов на основе аудиофайлов, созданных с помощью sox
, в сочетании с файлами изображений. Большинство клипов короче одной секунды, ни один не длиннее 6. Затем я объединяю эти файлы, и в конечном результате получается общая задержка около 2 секунд.
Я полагаю, что это может быть связано с тем, что аудио- и видеодорожки объединяются независимо.
Я могу узнать точную длительность видео и аудиодорожки (потока) с помощью ffprobe. В одном из коротких файлов я вижу, что длительность отличается:
ffprobe file001.webm
Input #0, matroska,webm, from 'file001.webm':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:00:00.92, start: 0.000000, bitrate: 211 kb/s
Stream #0:0: Video: vp8, yuv420p, 1100x140, SAR 1:1 DAR 55:7, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Metadata:
ENCODER : Lavc58.35.100 libvpx
DURATION : 00:00:00.923000000
Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
Metadata:
ENCODER : Lavc58.35.100 libvorbis
DURATION : 00:00:00.908000000
Как сделать так, чтобы видео и аудиодорожки в одном видеофайле были абсолютно одинаковой длительности?
Я использую vpx/vorbix/webm (так как не смог понять причину проблем с mpeg2ts), но я буду использовать любой формат, чтобы это сделать.
Я также могу добавить в аудиодорожку паузы, чтобы они совпадали по длительности.
решение1
По сути, это не стоит усилий. Аудиокадры имеют фиксированную длительность, зависящую от кодека и частоты дискретизации. Например, aac — это 1024/частота дискретизации. Например, 1024/48000 ~ 21,333 мс. Поэтому если вы передискретизируете свое видео до идеального кратного этому, это будет теоретически точно. Предполагая, что контейнер вообще не изменяет его. В противном случае вы можете изменить аудиокодер, чтобы контролировать количество используемых начальных выборок, что позволит вам получить частичный первый аудиокадр. Но, опять же, каждый кодек отличается. В противном случае вы можете использовать VFR и вручную установить длительность конечного кадра, если контейнер поддерживает это. Наконец, вы можете изменить список редактирования в mp4 и использовать проигрыватель, который может гарантировать поддержку.
Я не знаю, есть ли в продаже какие-либо готовые инструменты, способные выполнить хоть что-то из этого.