Захват видео с соотношением сторон 1:1 на Android

Я пытаюсь разработать приложение для android, которое будет записывать видео 15sec 640x640 с помощью MediaRecorder, извлекать все кадры с помощью ffmpeg, применять некоторые художественные фильтры с помощью gpuimage, а затем объединять кадры обратно в видео с помощью ffmpeg.

Я сталкиваюсь с проблемой при записи видео с разрешением 640x640. (Instagram android приложение делает это)

Я попытался использовать setVideoSize MediaRecorder(640, 640), а выходное видео-640x640, но видео выглядит как 640x480 видео растянуто вертикально, чтобы сделать его 640x640. Я думаю, это потому, что 640x640 не является разрешением, возвращаемым поддерживаемым списком разрешений видеозахвата устройства. Есть ли способ сказать media recorder поддерживать соотношение сторон при таком масштабировании, чтобы я получил видео, которое было масштабировано от 640x480 до 640x640, обрезая ширину, а не растягивая высоту ?

1 ответов


Я, наконец, закончил с захватом в 640x480, обрезая его до 480x480 при разделении на кадры с помощью ffmpeg, а затем, когда кадры объединяются обратно в видео с помощью ffmpeg, он масштабируется до 640x640.

String[] ffmpegCommand = {"/sdcard/frames/ffmpeg",
    "-i", "/sdcard/frames/test.3gp",
    "-vf", "crop=480:480:80:0,transpose=1",
    "-r", "30", "-an", "-qscale:v", "2", "-vsync", "1", "-threads", "4",  "/sdcard/frames/image%03d.jpg"};

транспонирование=1 требуется, когда приложение работает в портретном режиме.

Примечание: при захвате, чтобы показать только часть видео, которое будет включено в окончательное обрезанное видео, я добавил две черные полосы 80 пикселей поверх предварительного просмотра дисплей, чтобы скрыть 80 пикселей с обеих сторон видео, которое позже обрезается. Таким образом, пользователь получает то, что он видит на предварительном просмотре.