Мне нужно закодировать последовательность кадров с помощью видеокодека без потерь и воспроизвести их в приложении Java. Меня не волнует размер файла. Выходные кадры должны точно соответствовать входным кадрам. Кодеки с потерями не делают этого даже при высоких скоростях передачи данных.
Ни один из этих хорошо известных видеокодеков без потерь, похоже, не поддерживается в JMF или FMJ:
Вы знаете какой-либо видеокодек без потерь, поддерживаемый в Java?
Другие варианты, которые я рассмотрел:
Обновлено: Я наконец решил довольствоваться (нестандартным) MotionJPEG JMF с высочайшим качеством. Это не совсем без потерь, но все же намного лучшее качество, чем MPEG4.




Что ж, поскольку вы говорите, что размер файла не является проблемой, gzip / bzip2 может быть быстрым и безболезненным вариантом. Это не даст максимального сжатия, но это может быть последний выход, если вы не найдете лучшего ответа.
Gzip-файлы можно прозрачно открывать с помощью java.util.zip.GZIPInputStream; аналогичные интерфейсы доступны для Bzip2.
Почему этот вариант будет медленнее? Я могу думать только о том, что ввод-вывод становится узким местом, в зависимости от таких особенностей, как разрешение видео. ЦП не будет узким местом, потому что вы сокращаете его работу, предоставляя ему данные, готовые к использованию. PS. Однажды я реализовал видеодекодер (MPEG4 FGS).
Я пробовал нечто подобное: я могу читать несжатые файлы BMP с приличной скоростью, но не файлы PNG, потому что они нуждаются в некотором декодировании. Таким образом, кажется, что узким местом является декодирование / распаковка, а не ввод-вывод.
FMJ поддерживает экспериментальный метод хранения / воспроизведения серии изображений PNG так же, как MJPEG представляет собой серию изображений JPEG. Один из них представляет собой экспериментальный формат файла XML, который кодирует PNG (довольно раздутый), а другой - это HTTP-формат x-multipart-mixed-replace, который FMJ поддерживает в формате файла, заканчивающемся расширением .mmr.
README сообщает, что воспроизведение фильмов в Linux еще не реализовано. :-(
Анимированные GIF-файлы: да, вы можете определить частоту кадров анимированных GIF-файлов (на самом деле вы можете установить задержку для каждого отдельного кадра)
отображение кадров вручную: зависит от оборудования, частоты кадров и размера изображений. Разрешение HD при 30 кадрах в секунду будет затруднено без аппаратной поддержки, размер эскизов не должен быть проблемой на любой платформе.
Другая альтернатива: в зависимости от того, что вы хотите сделать, вы можете рассмотреть возможность «удаленного управления» другим проигрывателем или фреймворком, возможно, с помощью некоторого нативного кода. Например, встроите mplayer в * nix / X11 или используйте COM для управления WMP или DirectShow в Windows.
По сути, это вариант опции «загрузить и отобразить отдельные кадры». Боюсь, что даже без сжатия это будет недостаточно быстро.