2

Я пытаюсь создать видимость изображения в видеоизображении, используя несколько видеофайлов.

Я создал файл .mp4, используя FFMpeg. Видео правильно отображается в приложении Windows «Кино и ТВ». Он не отображается правильно в Chrome, Firefox, VLC Media Player или любом другом приложении, которое у меня есть. Я планирую показывать видео в браузере, поэтому для меня важна межбраузерная поддержка.

Видео было создано с помощью двух частей видеозвонка и выполнения следующих действий с FFMpeg:

  1. Поместите удаленное видео (remote.mp4) в фоновом режиме.
  2. Удаленное видео должно показывать первое изображение видео и отображаться в режиме паузы примерно до 2,501 секунды. Я сделал это с помощью itoffset.
  3. Удаленное аудио также должно начать воспроизводиться через 2,501 секунды. Установка itoffset, похоже, не достигла этого, поэтому я добавил опцию "adelay" в filter_complex.
  4. Размещаем локальное видео (local.mp4) в качестве наложения в правом нижнем углу.
  5. Местное видео и аудио должны начать воспроизводиться через 0 секунд (сразу после воспроизведения видео.)
  6. Повернул фоновое изображение на 90 градусов (оно было записано сбоку).
  7. Добавьте задержку звука к удаленному видео, чтобы он начал воспроизведение аудиопотока через 2,501 секунды после начала.
  8. Объедините аудио входы.
  9. Использовал кодек aac (поскольку он кажется популярным, я полностью готов переключиться, если это будет полезно.)
  10. Используйте видеокодек h264, опять же, потому что он кажется популярным.

Моя команда FFMpeg выглядит следующим образом:

ffmpeg -itsoffset 2.501 -i remote.mp4 -i local.mp4 \
     -filter_complex \
     " [1:v]scale=iw/4:-1:flags=lanczos[loc0]; \
     [0:v]transpose=1[rotate1]; \
     [rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10:eof_action=pass[rem0]; \
     [0:a]adelay=2501|2501[0adelay]; \
     [0adelay]apad[0a]; \
     [0a][1:a]amerge=inputs=2[a]" \
     -map "[rem0]" -map "[a]" \
     -ac 2 -vcodec libx264 \
     -ar 44100 -acodec aac \
     completed.mp4

Свойства видео:

  1. complete.mp4 (16 секунд, 480x640)
  2. local.mp4 (16 секунд, 640x480)
  3. remote.mp4 (14 секунд, 640x480, повернут в сторону)

Когда я смотрю законченное видео в браузере, вместо 16 секунд оно говорит 18 секунд. Когда я использую ffprobe в законченном видео, он говорит: Продолжительность: 00: 00: 16.68. Локальное аудио и видео также ожидает 2,501 секунды для воспроизведения в браузере.

Любая помощь будет замечательной. Я понятия не имею, почему браузер отображает его не так, как я намереваюсь. Спасибо!

1 ответ1

2

Со смещением временной метки ffmpeg будет влиять на это через списки редактирования в выходном MP4. Похоже, браузеры их не анализируют. Итак, нам нужен обходной путь.

ffmpeg -i remote.mp4 -i local.mp4 \
     -filter_complex \
     " [1:v]scale=iw/4:-1:flags=lanczos[loc0]; \
     [0:v]transpose=1,setpts='if(eq(N,0),PTS,PTS+2.501/TB)',fps=30[rotate1]; \
     [rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10:eof_action=pass[rem0]; \
     [0:a]adelay=2501|2501,apad[0a]; \
     [0a][1:a]amerge=inputs=2[a]" \
     -map "[rem0]" -map "[a]" \
     -ac 2 -vcodec libx264 \
     -ar 44100 -acodec aac \
     completed.mp4

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .