Вы должны иметь возможность создавать и редактировать видео, используя только веб-браузер. Должно быть возможно предоставить пользовательский интерфейс, похожий на Screenflow, который позволяет создавать выходное видео, которое объединяет несколько видео, изображений и аудио в одно видео, которое может быть загружено на такие сервисы, как YouTube.
Этот пост - это просто заявление о намерениях. Я собираюсь начать долгий процесс разработки того, что есть и недоступно на платформе, и посмотреть, как далеко мы можем сегодня добраться.
Во время некоторых мыслей по этому проекту у меня был момент Карла Сагана - поэтому вместо того, чтобы изобретать вселенную для создания яблочного пирога, мне нужно, по крайней мере, создать все инструменты, необходимые для создания видеоредактора, особенно если я хочу записать процесс его выполнения. Тот факт, что эта почта существует, состоит в том, что я знаю, что у меня есть некоторые части на месте и готовы к работе.
Я не думаю, что я собираюсь создать один массовый монолитный «видеоредактор», который может быть бизнесом для кого-то другого, но я планирую попробовать все части, которые необходимы, чтобы я мог облегчить создавать отличные видеоролики в Интернете и, надеюсь, показать много людей, что возможно в Интернете.
Ниже приведен мой примерный одностраничный проект:
** Используйте случаи, которые у меня есть: **
- Мне обычно приходится записывать все демонстрации устройств для ввода / вывода Google и Chrome DevSummit и добавлять наложения и т. Д. Все участники команды должны быть в состоянии сделать это.
- Команда часто записывает скринкасты, и я бы хотел, чтобы они быстро сделали это с простого веб-сайта и смогли очистить конечный результат.
- Мне нужно построить некоторые продукты, чтобы они были острыми. ;)
** Входной сигнал: **
- [p0] Запись звука с микрофона
- [p0] Запись видео с веб-камеры [сделано - см. ниже]
- [p0] Встроенные внешние видеоролики, размещенные в Интернете
- [p0] Запись рабочего стола
- [p1] Запись удаленного потока
- [p1] Записать a & lt; canvas & gt; элемент
- [p0] Загрузите файл с локального устройства
- [p1] Поделитесь файлом с локального устройства (намерение поделиться с Android)
** манипуляция: **
- [p1] Добавить водяные знаки
- [p1] Добавить эффекты фильтра к изображению
- [p0] Добавить в пользовательские изображения в виде слоев
- [p0] Очередь видео и наложение
- [p0] Наложение отдельных дорожек аудио и видео
- [p1] Наложение текста в определенное время
- [p0] Обрезать видео до размера
- [p0] Включить позиционирование и изменение размера видео
- [p0] Обрезать видео / аудио
- [p0] Сплит-видео / аудио
Вывод:
- [p0] Видеофайл в формате webm
- [p1] Информация о MTB
- [p1] Видеофайл в формате xyz
const init = () => {  
  let blobs;  
  let rec;  
  let stream;  
    
  captureBtn.onclick = async () => {  
    stream = await navigator.mediaDevices.getUserMedia({video: { width: 1280, 
height: 720 }, audio: true});
    videoElement.srcObject = stream;  
    let opts = {mimeType: 'video/webm; codecs=vp9,opus'};  
    blobs = [];  
    download.style.display = 'none'
    rec = new MediaRecorder(stream, opts);  
    rec.ondataavailable = (e) => blobs.push(e.data);  
    rec.onstop = async () => {  
      let blob = new Blob(blobs, {type: 'video/webm'});  
      let url = window.URL.createObjectURL(blob);  
      download.href = url;  
      download.download = 'test.webm';  
      download.style.display = 'block';  
    };  
    startBtn.disabled = false;  
    captureBtn.disabled = true;  
  };
  startBtn.onclick = () => {  
    startBtn.disabled = true;  
    stopBtn.disabled = false;  
    rec.start();  
  };
  stopBtn.onclick = () => {  
    captureBtn.disabled = false;  
    startBtn.disabled = true;  
    stopBtn.disabled = true;
    rec.stop();  
    stream.getTracks().forEach(s=>s.stop())  
    videoElement.srcObject = null  
    stream = null;  
  };  
};
window.addEventListener('load', init);  

 
  



