Фильтр рисования текста FFmpeg.wasm, вызывающий 20-минутное время кодирования – как оптимизировать? [закрыто]Javascript

Форум по Javascript
Ответить
Anonymous
 Фильтр рисования текста FFmpeg.wasm, вызывающий 20-минутное время кодирования – как оптимизировать? [закрыто]

Сообщение Anonymous »

Я реализую водяные знаки для видео в браузере с помощью FFmpeg.wasm. Фильтр drawtext вызывает серьезные проблемы с производительностью: обработка 20-секундного видео 1080p занимает 20 минут.
Мой код:

Код: Выделить всё

let ffmpeg, loaded = false;

async function processVideoWithFFmpeg(videoFile) {
if (!ffmpeg || !loaded) {
ffmpeg = new FFmpeg();
ffmpeg.setLogger(({ message }) => console.log(message));
await ffmpeg.load();
loaded = true;
}

console.time('Total Processing');

// Read video file
const uint8Array = new Uint8Array(await videoFile.arrayBuffer());
await ffmpeg.writeFile('input.mp4', uint8Array);

// Load font for drawtext filter
const fontResponse = await fetch('https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/fonts/roboto/Roboto-Bold.ttf');
const fontData = await fontResponse.arrayBuffer();
await ffmpeg.writeFile('Roboto-Bold.ttf', new Uint8Array(fontData));

// Execute FFmpeg command
await ffmpeg.exec([
'-i', 'input.mp4',
'-vf', `drawtext=fontfile=Roboto-Bold.ttf:text='Watermark':fontsize=48:fontcolor=white:x=(w-text_w)/2:y=h-th-10:borderw=2:bordercolor=black`,
'-c:v', 'libx264',
'-preset', 'ultrafast',
'-crf', '23',
'-threads', '0',
'-c:a', 'copy',
'output.mp4'
]);

console.timeEnd('Total Processing');

// Read output
const data = await ffmpeg.readFile('output.mp4');
const blob = new Blob([data.buffer], { type: 'video/mp4' });

// Cleanup
await ffmpeg.deleteFile('input.mp4');
await ffmpeg.deleteFile('output.mp4');
await ffmpeg.deleteFile('Roboto-Bold.ttf');

return blob;
}
Вывод на консоль:

Код: Выделить всё

frame= 1847 fps=1.2 q=28.0 size=    5120kB time=00:01:01.50 bitrate= 682.5kbits/s speed=0.04x
Это нормальное время обработки для FFmpeg.wasm? Судя по тому, что я прочитал, обработка в браузере должна быть медленнее, чем встроенный FFmpeg, но 20 минут для 20-секундного видео кажутся чрезмерными.
Что мне нужно
Способ сократить время обработки менее 1–2 минут для 20-секундного видео 1080p или подтверждение того, что это фундаментальное ограничение WASM, требующее обработки на стороне сервера.

Подробнее здесь: https://stackoverflow.com/questions/797 ... o-optimize
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»