Я создаю приложение iOS, где требуется повторное кодирование и обрезка видео в фоновом режиме.Как обрезать файл с помощью FFMpeg программно? (libavformat, avutils, ...)
Я не могу использовать библиотеки iOS (AVFoundation), поскольку они полагаются на графический процессор, и ни одно приложение не может получить доступ к графическому процессору, если оно имеет фоновый рисунок.
Из-за этой проблемы я переключился на FFMpeg и скомпилировал его (вместе с libx264) и интегрировал его в мое приложение iOS.
Подводя вещи, что мне нужно:
- Обрезка видео в течение первых 10 секунд
- Масштабирует видео
Через пару недель - и стучал часто ударял головой о стену - мне удалось:
- Разделить видеоконтейнер на потоки (demuxing)
- копировать аудиопоток в выходной поток (без декодирования или кодирования)
- декодировать видеопоток, запускать необходимые фильтры на кадр, кодировать каждый результирующий кадр и передавать его в выходной поток (я декодирую h264, фильтр она, перекодировать его обратно в h264)
Если бы я был бежать FFmpeg через командную строку я бы запустить его так:
ffmpeg -i input.MOV -ss 0 -t 10 -vf scale=320:240 -c:v libx264 -preset ultrafast -c:a copy output.mkv
Моя забота, как обрезать видео? Хотя я мог подсчитать количество видеокадров, которые я кодирую/декодирует и на основе FPS решает, когда остановиться, я не могу сделать то же самое со звуком, так как я только демультиментирую и ремуксирую его.
В идеале - до масштабирования видео - я бы выполнил процесс обрезания видео, скопировав 10 секунд каждого потока (видео и аудио) в новый видеоконтейнер.
Как достичь этого через библиотеки AV?