Intereting Posts
Как очистить задачу в Android и изменить корневую активность? Приложение принудительной остановки – также отменяет любые тревоги, которые он установил? Что такое единица значения параметра в методе onMeasure (int widthMeasureSpec, int heightMeasureSpec) класса View? Не удалось открыть редактор. Редактор Android XML не может обработать этот ввод Сбой приложения в эмуляторе при загрузке собственной общей библиотеки, но отлично работает на физическом устройстве Как я могу запустить Activity из класса non-Activity? Xamarin формирует положение элементов панели инструментов для android Гибкое пространство в Android Canvas Zoom переходит в точку (0,0) Google Play сервисы устарели. Требуется 5089000, но найдено 3136130 Сериализация настраиваемого объекта, который содержит объекты JodaTime в JSON ActionNext не работает с многострочным EditText в android Замените поставщика сигналов GPS по умолчанию на устройствах Android ScrollView setOverScrollMode в API <9 Добавить путь к файлу jar, добавленный в проект библиотеки в PROGUARD

Захват видео с соотношением сторон 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, путем обрезки ширины, а не растяжения по высоте?

Я, наконец, закончил с захватом на 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 пикселей по обе стороны видео, которые позже Обрезается. Таким образом, пользователь получает то, что видит на предварительном просмотре.