LINUX.ORG.RU

Как оптимизировать запрос при конвертации dav в mp4?

 


0

1

Камера снимает в dav h265 (изменить нельзя) и мне нужно конвертировать видео в любой формат, который телеграм воспринимает как видео (mp4, avi и т.д.). В сети есть похожий вопрос, где решение:

ffmpeg -y -i input-file.dav -c:v libx264 -crf 24 output-file.mp4

однако данный код при конвертации 16-и секундного видео на 6и ядерном xeon выполняется за 13 секунд, а на 4ёх ядерном ARM Ampere 23 секунды. И можно было бы говорить, что я упираюсь в производительность серверов, однако при декодинге высвечиваются такие параметры видео:

Input #0, dhav, from '111.dav':

Video: hevc (Main), yuv420p(tv), 1920x1080, 25 fps, 100 tbr, 1k tbn

и конвертируются они вот в это

Output #0, mp4, to '111.mp4':

Video: h264 (libx264) (avc1 / 0x31637661),yuv420p, 1920x1080, q=-1--1, 100 fps, 12800 tbn, 100 tbc

То есть с нифига он берёт и меняет параметры видео. Если я в запросе изменю fps со 100 до родных 25, то получу на Ampere уже 9 секунд вместо 23. FPS это базовое и примитивное, что бросается в глаза, но также здесь есть параметры tbn, tbc и ещё наверняка что-то, о чём я не знаю, но оно зачем-то изменилось. FFMPEG как-то не очень оптимально использует ресурсы, которые у него есть.

Поэтому вопрос: как можно оптимизировать запрос, чтобы получить максимально быстрый результат? p.s. меня не столько волнует размер файла, сколько время его кодирования.

Камера снимает в dav h265 (изменить нельзя) и мне нужно конвертировать видео в любой формат, который телеграм воспринимает как видео (mp4, avi и т.д.).

Почитай матчасть. h265 это кодек, а mp4 это контейнер. Внутри mp4 может быть видео, закодированное h265 с таким же успехом, как и h264. Все, что нужно - запихнуть в новый контейнер без перекодирования.

ffmpeg -i input.dav -c copy output.mp4

Только имей ввиду, что mp4 не поддерживает несколько дорожек.

anonymous
()

Изменение параметров само по себе тут не замедляет ничего, медленно было из-за того что фпс просто большой. Поставь 10фпс - станет ещё быстрее.

А ещё можно подстраивать качество сжатия:

1) увеличвать -crf вплоть до 51 (качество будет всё хуже, скорость всё выше, и размер роликов будет меньше)

2) убрать -crf и использовать фиксированный битрейт и его можно уменьшать (например -b:v 2000k). сам по себе -b:v это не улучшение по сравнению с -crf а просто альтернативный метод управления качеством

3) использовать пресеты: -preset medium стандартный, есть более быстрые fast faster veryfast но качество будет сильно страдать (при том же битрейте)

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от accountnujen

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

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.