Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбить видео на изображения !? (https://javascript.ru/forum/misc/81542-razbit-video-na-izobrazheniya.html)

cubano 13.12.2020 17:06

Разбить видео на изображения !?
 
Здравствуйте !!!

Подскажите пожалуйста можно ли с помощью js разбить видео на определенное количество изображений.

voraa 13.12.2020 17:28

В смысле получить с видео отдельные стоп-кадры?
Теоретически возможно. Захватываете изображение с элемента <video> в <canvas> с помощью функции ctx.drawImage https://developer.mozilla.org/ru/doc...xt2D/drawImage, потом преобразуете в jpg в <img> или сразу пересылаете на сервер или сохраняете в файл. (например, функцией toBlob https://developer.mozilla.org/ru/doc...Element/toBlob)
Но практически все упрется в CORS. Такое будет возможно, если страница сайта и само видео передаются с одного сервера, или сервер, с которого передается видео дает в заголовках разрешение.
https://developer.mozilla.org/ru/doc..._enabled_image

cubano 13.12.2020 17:55

Спасибо большое за ответ, !
Мои знание js пока на уровне copypaste.:(

Мне нужно добиться следующего :
Если в папке появляется видеофайл например avi,mov,... то js должен сделать из него 100 изображений (jpg или png) и сохранить их в определенную папку.

voraa 13.12.2020 18:03

Цитата:

Сообщение от cubano
Если в папке появляется видеофайл например avi,mov,... то

А как страница сайта узнает, что в какой-то папке появился файл?
Это пользователь должен как то указывать странице какой файл взять. Сам js не имеет никакого доступа к файловой системе.
Будет ли это работать на странице с локального компьютера и если видео с него же - не знаю. Надо пробовать. Я подобными штуками занимался до того, как появились правила CORS, тогда работало везде, и с локального, и с серверов.
Опять же сохранять скорее всего придется вручную. Говорить куда сохранить каждое изображение. Сам js без разрешения пользователя ничего делать не сможет.

Думаю, возможно написать такое приложение на Electron (или чем то подобном). Это как бы сервер (Node.js), имеющий доступ к файловой системе и браузер, показывающий страницы, в одном флаконе. Но у меня такого опыта нет.

voraa 13.12.2020 18:21

Цитата:

Сообщение от cubano
avi,mov,...

Вот на счет этих форматов не уверен
Вот форматы, которые поддерживает Chrome (Edge, Opera, Яндекс). Firefox скорее всего те же самые. У Safari могут быть некоторые исключения дополнения.
http://www.chromium.org/audio-video

cubano 13.12.2020 18:41

Цитата:

Сообщение от voraa (Сообщение 531651)
А как страница сайта узнает, что в какой-то папке появился файл?
Это пользователь должен как то указывать странице какой файл взять.

Вариант с выбором файла вручную тоже подойдет.

laimas 13.12.2020 18:45

https://blog.pruffme.com/?p=542

voraa 13.12.2020 20:53

Цитата:

Сообщение от laimas
https://blog.pruffme.com/?p=542

Хоть там и не сказано, но подозревая, что FFMPEG может сохранять картинки.
Единственное, в чем я уверен, что просто указать тайм-коды для видео и автоматом получать картинки по этим кадрам - не самый удачный вариант. Очень многие будут не лучшего качества. В видео есть keyframes - которые идут через определенные промежутки времени - это действительно нормальное изображение. Между ними идут кадры, которые представляют собой постепенное изменение этого кадра. Они не всегда бывают удачными.

laimas 13.12.2020 21:36

Цитата:

Сообщение от voraa
подозревая, что FFMPEG может сохранять картинки

Он очень многое может.

cubano 13.12.2020 23:54

Цитата:

Сообщение от laimas (Сообщение 531654)

К сожалению такой вариант не подходит.
В интернете много конверторов которые из изображений делают видео файл, но мне нужно наоборот получить результат.

laimas 14.12.2020 03:51

Цитата:

Сообщение от cubano
К сожалению такой вариант не подходит.

Вы хотя бы нашли в сети документацию по ffmpeg прочли что это такое, прежде чем утверждать. Нет знаний в JS, но поисковиком пользоваться можем? В сети, думаю, можно найти пример и автоматизации этого процесса, ведь сама автоматизация это будет .bat файл как задача.

И коли устраивает "ручками", то какого же черта вы в браузер с его обрубленными возможностями воткнулись, установите любой видеоредактор из бесплатных (в Win есть и штатный), открывайте видео, на временной дорожке отметили нужное, сохранили как изображения.

Вы по своей воле обыденное превращаете в квест.

laimas 14.12.2020 03:54

Цитата:

Сообщение от voraa
автоматом получать картинки по этим кадрам - не самый удачный вариант. Очень многие будут не лучшего качества.

Видео вы смотрите же никак "кадры с намеком", а нормальное, потому как происходит обратное - декодирование.

voraa 14.12.2020 07:18

Цитата:

Сообщение от laimas
Видео вы смотрите же никак "кадры с намеком", а нормальное, потому как происходит обратное - декодирование.

Я просто по опыту говорю.
Мы делали когда то такую штуку на С-Билдере.
Одной конторе, которая оцифровывала свое видео нужны были стоп кадры для презентаций. Когда автоматом прогоняешь через равные промежутки, то далеко не все кадры получались хорошие. Но если взять кадр и сдвинуть тайм-код на 0.1-0.3 сек вперед-назад, то изображение получалось сильно лучше.

laimas 14.12.2020 07:35

Я не знаю что и чем вы делали, но это неверное представление о кодеках. Кстати, кодеков много, и у каждого свои особенности.

Допустим сцена, это стена, и эта статическая сцена длится 10 сек. Нет смысла сохранять 250 кадров этой сцены (для скорости 25 кадров в сек), можно сохранить один кадр указав его длительность 10 сек. Следующий кадр сохраненный будет отличаться от этого кадра, например, появляется мяч. При этом то, что этот кадр сохранен так как он отличается от кадра 250, не означает, что кадр 250 будет иметь качество 100, а 251 всего 50.

Качество для всего задается компрессором и выбранным битрейтом, чем выше битрейт, ты выше качество и размер на выходе, и наоборот, чем ниже, тем хуже, но и размер меньше.

Исходниками для видео конечного (для конечного формата) могут быть любые медиаданные, от картинок до видео, причем видео может быть любого формата, то есть, использовать любой кодек и компрессор.

В бытность свою, когда занимался видео довольно много, то сначала исходниками зачастую были записи VHS, а их оцифровка, это MotionJPEG. Конечный продукт, это MPEG2 - видео диски.

Естественно, что исходники и полученные их же кадры из MPEG2, это большая разница, так как они уже сжаты, то есть имеют потери. Причем получить кадры сложнее из MPEG2, вернее получить их не проблема, проблема была с наличием редакторов MPEG умеющих работать с таким видео покадрово. Но и такие нашлись.

voraa 14.12.2020 08:23

Оцифровка шла с кинопленок и S-VHS в mp4.
А эффекты получались такие - есть какое то движение. Человек машет рукой. На отдельных стоп-кадрах рука могла быть смазанная, какая то полупрозрачная. Но если сдвинуть тайм-код чуть вперед-назад - уже изображение четкое (причем само движение еще не закончилось).
Попадаешь по тайм-коду на key-frame или совсем рядом с ним - все хорошо. Если дальше от него, то могли быть искажения. Самое интересное, что если брать сами кадры кинопленки в этом месте, то там все изображения достаточно четкие.

laimas 14.12.2020 08:36

Цитата:

Сообщение от voraa
На отдельных стоп-кадрах рука могла быть смазанная, какая то полупрозрачная

S-VHS - это черезстрочная запись, надо было просто восстановить кадр, два полукадра в один. Опорный кадр к этому отношения не имеет.

voraa 14.12.2020 08:41

Так стоп-кадры то брались не с S-VHS, а уже из mp4. Там то опорные кадры есть.
Как делали оцифровку с пленок - не знаю. Скорее всего сначала перегоняли на S-VHS

laimas 14.12.2020 09:03

Цитата:

Сообщение от voraa
Так стоп-кадры то брались не с S-VHS

Причем тут стоп кадры. Если видно "полупрозрачные, смазанные ...", то это следствие черезстрочной развертки, и если ее не удалить для видео, которое не планируется для ТВ (причем старого формата), то не важно во что вы это упакуете, оно то никуда не денется. Вы это зрительно можете и не наблюдать, а вот просмотр кадров покажет такие "огрехи".

В Adobe Premiere есть инструмент, который удаляет черезстрочность, складывая четные и нечетные поля кадра в один. Вы либо этого не сделали, либо вообще не подозревали, что это надо сделать. :)

На ТВ, чтобы увеличить частоту развертки по вертикали, кадр передается двумя полями, через строку - четные и нечетные. Затем появились матричные экраны, сканирование которых, это совсем иное, поэтому в ТВ появилась "память на кадр", в которой формировался полный кадр, который уже потом отдавался на развертку экрана. Вот подобное если бы было вами сделано в редакторе, то никаких полупрозрачных рук вы бы не увидели. Ну а "смазанное", так такие огрехи встречаются и на фото, природа их иная, и в видео они никак не являются следствием применения опорных кадров.

voraa 14.12.2020 09:27

Цитата:

Сообщение от laimas
Вы либо этого не сделали, либо вообще не подозревали, что это надо сделать.

Мы так вообще ничего не делали. Мы только получили готовые mp4 файлы.
А те, кто цифровал... Ну не знаю - это их работа основная. Они только и занимаются, что перегоняют на SVHS и кинопленки хранящиеся у них материалы для ТВ, киностудий...

laimas 14.12.2020 09:42

Ну значит осталось как было, а вы принимаете это как огрехи кодека, в частности опорных кадров, хотя они к этому никакого отношения не имеют.

Был у меня товарищ, страстный любитель снимать на камеру. Объездил все наши "домашние курорты", от Таиланда до ... Австралии только не добрался. Сначала была у него VHS, затем появились mpeg на mini-CD, затем цифра на картах. Я столько видео его для него перелопатил.

Если есть среди знакомых диски видеокамер с MPEG2, возьмите такой и положите его на видеодоржку в Premiere. Как профессиональное оно конечно не годится, но как домашнее, оно качества отменного будет, при этом каждый кадр. Если при этом свести поля кадров, то огрехи могут встречаться только как следствие когда быстро менялась позиция камеры и автофокус не успел отработать или подобное. А подобного описываемого вами никак не будет, да и какой кадр видеоряда опорный, а какой нет, вы и знать не можете, это можно высчитать только углубившись в параметры видео, как и с какими параметрами оно было упаковано.

Vlasenko Fedor 14.12.2020 11:06

laimas,
Поделитесь опытом, вы использовали консольную обработку видео на сервере?
Что использовали при этом? Насколько я понимаю для того же склеивания файлов, тот же ffmpeg должен работать с одинаковыми файлами по разрешению, кодеку
Сейчас время меняется и тянут за уши обработку видео в веб
пример https://www.kapwing.com

laimas 14.12.2020 11:15

Нет, чего-то кардинального с видео на сервере не приходилось делать, не стояло передо мной таких задач. Что-то проще, как то принять видео и конвертировать его в формат, приготовить изображение кадра, такое было. Большие задачи с видео, это на видеохостингах, а у меня основное с чем часто связан, это торговля, услуги или нечто специфическое.

Vlasenko Fedor 14.12.2020 11:19

Спасибо! Не могу +

laimas 14.12.2020 11:32

Цитата:

Сообщение от Vlasenko Fedor
тот же ffmpeg должен работать с одинаковыми файлами по разрешению, кодеку

Мимо ушей как-то. ) Если мне память не изменяет, то соединить воедино можно любые форматы, дополнить видеорядом из картинок с добавлением к нему звуковой дорожки. ffmpeg имеет широкий набор команд для массы различных операций, которые будут выполнены последовательно. Он у меня есть и на локальном сервере, но как бы потребности нет и времени на эксперименты тоже, но можно и воспроизвести сложную задачу, для интереса.

Vlasenko Fedor 14.12.2020 12:14

не все там просто
есть гора либ(посредников, фреймсерверов ...) работающих с ним, да и ffmpeg сам может скомпилирован по разному (CUDA, VAAPI ...)
я спросил если работал, понятно это время и чтение докуменации, а иногда и в исходный код смотреть, спасибо, что не отказал
:)

laimas 14.12.2020 12:45

С видео монтажным столом когда либо работали? FFMPEG ничем не отличается от него по сути, разница только в том как, если первые, это графический интерфейс и шевелить мозгами, то второй, это командная строка и задаем желаемое параметрами. Кстати, если взять Adobe After Effects, то в нем помимо готовых фильтров и пресетов, можно ваять шедевры и посредством макросов, если знать язык, понимать среду с которой работаем, иметь вкус художественный и богатое воображение.

А на стол вы может поместить какие угодно видео данные, если в системе есть соответствующий кодек и редактор может декодировать поток, то это видео будет на дорожке. И как-то по барабану, под Win ли при этом ПО, или под Линукс, Мак, и т.д. Нет на данном этапе уже никаких иных кодеков, есть один формат.

Какая проблема это же сделать и из под командной строки. Вы открывая простое JPEG изображение в канве JS, или в GD, ImageMagick, задумываетесь над тем, что при этом происходит? Вряд ли. Но ведь при этом всегда будет происходить одно и тоже - малое по объему изображение на диске, скушает приличную память, как будто оно не сжатое и девственное. И не важно чем открывалось. А если копируем из в, то будет создан еще ресурс, ну и т.п. действия.

Так и любой редактор, не важно как выполняется, но обязательно будут последовательные операции, ибо все и сразу сделать нельзя. Так что не вижу никаких проблем. А если не может, то это компиляция какой-то урезанной по функциям приблуды, а не потому, что она в принципе такого не может делать.

Vlasenko Fedor 14.12.2020 12:59

Цитата:

Сообщение от laimas
С видео монтажным столом когда либо работали?

в этом то и проблема, что нет
кроме как
ffmpeg -ss 00:00:02 -i "file.mov" -f image2 -vframes 1 "file_out.jpg" -s 320x240

Вырезает первый кадр второй секунды из файла file.mov и сохранить её в файле file_out.jpg.
Никогда больше не работал сним. А мне нужна конкактенация, фильтры ...
Есть доки но там к единому формату надо сводить

laimas 14.12.2020 13:04

Если бы вместо Adobe Premiere и After Effects я занимался ffmpeg, то я бы слету дал ответ, но ... Я и редакторы то подзабываю уже, если не пользуемся, то из памяти стирается.
Но в сети море примеров и о соединении, вырезках, фильтрах, можно поискать.

Vlasenko Fedor 14.12.2020 13:13

да примеров много, но есть много но
эти проекты старые забытые, ну не буду я ставить 12 Ubuntu и докер не буду
https://github.com/avxsynth/avxsynth/wiki/System-Setup
или делают свое дело, но очень долго 30 мин 3 -х минутный ролик конкатенируют
https://github.com/mifi/editly
поскидываю может кому и пригодятся ссылки, решения


Часовой пояс GMT +3, время: 02:16.