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

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

Я столкнулся с проблемой записи видео с разрешением 640×640. (Приложение для Android android делает это)

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

Solutions Collecting From Web of "Захват видео с соотношением сторон 1: 1 на Android"

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

 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"}; 

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

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