2016-01-14 2 views
4

Я создаю приложение iOS, где требуется повторное кодирование и обрезка видео в фоновом режиме.Как обрезать файл с помощью FFMpeg программно? (libavformat, avutils, ...)

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

Из-за этой проблемы я переключился на FFMpeg и скомпилировал его (вместе с libx264) и интегрировал его в мое приложение iOS.

Подводя вещи, что мне нужно:

  1. Обрезка видео в течение первых 10 секунд
  2. Масштабирует видео

Через пару недель - и стучал часто ударял головой о стену - мне удалось:

  • Разделить видеоконтейнер на потоки (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?

ответ

-1

Я знаю, что вы можете сделать это одним вызовом FFmpeg:

ffmpeg -i input.MOV -filter_complex [0:v]trim=duration=10.0,scale=320:240[vid];[0:a]atrim=duration=10.0[aud] -map [vid] -map [aud] -c:v libx264 -preset ultrafast -c:a libvo_aacenc -b:a 128k -flags +aic+mv4 output.mkv 
Смежные вопросы