ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 29.01.24 20:26
Оценка:
Здравствуйте.

Надо сконвертировать mjpeg (mp4 файл, где одни jpeg'и). Исходный файл получен с помощью opencv, соотв. он пишет jpeg (mp4v),
т.е. либо минимальное сжатие, либо просто плюхает jpeg фреймы как есть. Судя по всему, h264 opencv не использует из-за лицензии.
Соотв. в пост-проценссинге уменьшаю файл. На данный момент в 20 секунд, 15 fps, имеет размер 50Мб, после этой команды

ffmpeg -i source_file.mp4 -pix_fmt yuv420p -b:v 2000k -c:v libx264 destination_file.mp4

файл уменьшается раз в 5, но очень долго, ~ 20 секунд.

Можно ли это как-то ускорить, т.е. команду выше? Или это норма?

Заранее благодарю.
Кодом людям нужно помогать!
Отредактировано 29.01.2024 20:29 Sharov . Предыдущая версия .
Re: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: andrey.desman  
Дата: 29.01.24 21:57
Оценка: 10 (1)
Здравствуйте, Sharov, Вы писали:

S>Можно ли это как-то ускорить, т.е. команду выше? Или это норма?


https://trac.ffmpeg.org/wiki/Encode/H.264

-preset ultrafast
Re: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 29.01.24 22:12
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>Можно ли это как-то ускорить, т.е. команду выше? Или это норма?


под какой OS вы пишите ? под вин ffmpeg для opencv уже прикомпилированный
под линук придеться собирать самому тынц

можно использовать флаг cv::CAP_FFMPEG при открытии VideoWriter writer;
есть в примерах к opencv

судя повсему аудио у вас нет
можно писать при помощи ffmpeg тынц
Re[2]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 29.01.24 22:39
Оценка:
Здравствуйте, andrey.desman, Вы писали:
S>>Можно ли это как-то ускорить, т.е. команду выше? Или это норма?
AD>https://trac.ffmpeg.org/wiki/Encode/H.264
AD>
AD>-preset ultrafast
AD>


Круто, благодарю. Раз в 5 быстрее (3-5 сек). А за счет чего такая скорость, что мы теряем?
Кодом людям нужно помогать!
Re[2]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 29.01.24 22:43
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>под какой OS вы пишите ? под вин ffmpeg для opencv уже прикомпилированный


Пока под вин, потом ubunta.
S>под линук придеться собирать самому тынц

S>можно использовать флаг cv::CAP_FFMPEG при открытии VideoWriter writer;

S>есть в примерах к opencv

Ну он там по умолчанию для mp4 файлов.

S>судя повсему аудио у вас нет

S>можно писать при помощи ffmpeg тынц

Аудио нету. А в чем смысл этой ссылки и кода? Кстати, я использую обертку на дотнет, возможно будут проблемы.
Кодом людям нужно помогать!
Re[3]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 29.01.24 22:46
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>Аудио нету. А в чем смысл этой ссылки и кода? Кстати, я использую обертку на дотнет, возможно будут проблемы.


это работающий пример как записыать mp4 при помощи avcodec
на которой собран ffmpeg
Re[3]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 30.01.24 00:20
Оценка:
Возможно вы правы , могу завтра посмотреть исходник opencv
но тогда надо объяснить почему opencv под linux не включает себя ffmpeg который по умолчанию
Re: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 30.01.24 04:49
Оценка: 1 (1) +1
Здравствуйте, Sharov, Вы писали:

S>т.е. либо минимальное сжатие, либо просто плюхает jpeg фреймы как есть. Судя по всему, h264 opencv не использует из-за лицензии.


Чтобы OpenCV мог h.264 под Windows, надо ему подложить openh264-1.8.0-win64.dll. Просто найти собранную, скачать и подложить рядом. Туда же opencv_ffmpeg*.dll, которая скачивается, когда делаешь cmake configure
Re[4]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 30.01.24 04:50
Оценка: 15 (1)
Здравствуйте, sergey2b, Вы писали:

S>Возможно вы правы , могу завтра посмотреть исходник opencv

S>но тогда надо объяснить почему opencv под linux не включает себя ffmpeg который по умолчанию

Я всегда сам собираю себе OpenCV и сам руками включаю поддержку ffmpeg и gstreamer.
Re[5]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 30.01.24 04:53
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Я всегда сам собираю себе OpenCV и сам руками включаю поддержку ffmpeg и gstreamer.


я Тоже
еще можно вклучить поддержку GPU в opencv
Re[2]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 30.01.24 09:05
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Чтобы OpenCV мог h.264 под Windows, надо ему подложить openh264-1.8.0-win64.dll. Просто найти собранную, скачать и подложить рядом. Туда же opencv_ffmpeg*.dll, которая скачивается, когда делаешь cmake configure


Что-то не получается, по итогу файл 0 длины. Содержимое папки x64:
openh264-2.4.0-win64.dll
OpenCvSharpExtern.dll
opencv_videoio_ffmpeg490_64.dll
Часть вывода Cv2.GetBuildInformation():

Video I/O:
DC1394: NO
FFMPEG: YES (prebuilt binaries)
avcodec: YES (58.134.100)
avformat: YES (58.76.100)
avutil: YES (56.70.100)
swscale: YES (5.9.100)
avresample: YES (4.0.0)
GStreamer: NO
DirectShow: YES
Media Foundation: YES
DXVA: YES


Пробовал как тут-- безрезультатно.
На SO где-то читал, что без специальной пересборки ffmpeg h264 не взлетит.
Кодом людям нужно помогать!
Re[4]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 30.01.24 09:07
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>Возможно вы правы , могу завтра посмотреть исходник opencv

S>но тогда надо объяснить почему opencv под linux не включает себя ffmpeg который по умолчанию

Вероятно, что бы был выбор между gst и ffmpeg. Там проблемы с проприетарным h264.
Кодом людям нужно помогать!
Re[3]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 30.01.24 09:11
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, Nuzhny, Вы писали:


N>>Чтобы OpenCV мог h.264 под Windows, надо ему подложить openh264-1.8.0-win64.dll. Просто найти собранную, скачать и подложить рядом. Туда же opencv_ffmpeg*.dll, которая скачивается, когда делаешь cmake configure


S>Что-то не получается, по итогу файл 0 длины. Содержимое папки x64:


Заметил в логах ошибку: [libopenh264 @ 000001db50aca840] Incorrect library version loaded
Может действительно надо 1.8.0 брать...

Update: не взлетело, также не может подгрузить . Очевидно надо как-то версии подбирать.
Пока не понимаю, как понять какую версию ffmpeg OpenCV использует. Может в этом дело?
OpenCV 4.9.0.
https://opencv.org/releases/ -- тут ничего не нашел.
Кодом людям нужно помогать!
Отредактировано 30.01.2024 9:28 Sharov . Предыдущая версия .
Re[3]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: andrey.desman  
Дата: 30.01.24 09:47
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>Круто, благодарю. Раз в 5 быстрее (3-5 сек). А за счет чего такая скорость, что мы теряем?


Качество, размер. Но это от контента зависит.
Re[4]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: andrey.desman  
Дата: 30.01.24 10:07
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Заметил в логах ошибку: [libopenh264 @ 000001db50aca840] Incorrect library version loaded

S>Может действительно надо 1.8.0 брать...

Версия, с которой был собран ffmpeg, лежит как статик переменная g_stCodecVersion внутри ffmpeg в libavcodec/libopenh264.c
Т.к. она статик, то наверное до нее не добраться без дебаг инфы...
https://github.com/cisco/openh264/blob/master/codec/api/wels/codec_ver.h

Но может каким-то образом в dll остался текстовый вариант. Можно поискать "OpenH264 version".
Re[5]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: Sharov Россия  
Дата: 30.01.24 11:25
Оценка:
Здравствуйте, andrey.desman, Вы писали:


AD>Версия, с которой был собран ffmpeg, лежит как статик переменная g_stCodecVersion внутри ffmpeg в libavcodec/libopenh264.c

AD>Т.к. она статик, то наверное до нее не добраться без дебаг инфы...
AD>https://github.com/cisco/openh264/blob/master/codec/api/wels/codec_ver.h
AD>Но может каким-то образом в dll остался текстовый вариант. Можно поискать "OpenH264 version".

Как понять какую версию ffmpeg ocv использует?
Выше список файлов.
Кодом людям нужно помогать!
Отредактировано 30.01.2024 11:29 Sharov . Предыдущая версия .
Re[6]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: andrey.desman  
Дата: 30.01.24 13:56
Оценка: 10 (1) +1
Здравствуйте, Sharov, Вы писали:

S>Как понять какую версию ffmpeg ocv использует?

S>Выше список файлов.

https://ffmpeg.org/download.html

avcodec: YES (58.134.100) -> ffmpeg 4.4.4
Re[3]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 30.01.24 14:13
Оценка:
Здравствуйте, Sharov, Вы писали:


S>Пробовал как тут-- безрезультатно.

S>На SO где-то читал, что без специальной пересборки ffmpeg h264 не взлетит.

оно точно работает с предкомпилированным ffmpeg
я могу выложить если у вас есть куда
Re[6]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: sergey2b ЮАР  
Дата: 30.01.24 14:15
Оценка:
Здравствуйте, Sharov, Вы писали:


выложите ваш код который читает mp4 и записывает
может там ошибка
Re[4]: ffmpeg из mjpeg в mp4 долго отрабатывает.
От: andrey.desman  
Дата: 30.01.24 14:29
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>оно точно работает с предкомпилированным ffmpeg

S>я могу выложить если у вас есть куда

Там с openh264 проблема. Подкладывать надо точно ту версию, с которой собирали сам ffmpeg. Надо либо у источника выяснить, либо перебором... Ну или самому всё пересобрать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.