Прежде чем устранить эту ошибку, нам нужно знать, что делает ffmpeg.
FFmpeg (Fast Forward MPEG) — это набор инструментов для обработки мультимедиа с открытым исходным кодом, который включает в себя библиотеки обработки аудио и видео, кодеры, декодеры, транскодеры и другие инструменты. Он может выполнять аудио- и видеокодек, преобразование форматов, обработку потокового мультимедиа, обработку изображений, редактирование и редактирование, обработку субтитров, обработку звука, обработку видео в реальном времени и т. д.
При создании миниатюр обычно используется следующий метод
fileTypeEnum = FileTypeEnums.getFileTypeBySuffix(fileSuffix);
if (FileTypeEnums.VIDEO == fileTypeEnum) {
cutFile4Video(fileId, targetFilePath);
//Эскиз создания видео
cover = month + "/" + currentUserFolderName + Constants.IMAGE_PNG_SUFFIX;
String coverPath = targetFolderName + "/" + cover;
// Обложка создания видео
ScaleFilter.createCover4Video(new File(targetFilePath), Constants.LENGTH_150, new File(coverPath));
} else if (FileTypeEnums.IMAGE == fileTypeEnum) {
//Создаем миниатюры
cover = month + "/" + realFileName.replace(".", "_.");
String coverPath = targetFolderName + "/" + cover;
Boolean created = ScaleFilter.createThumbnailWidthFFmpeg(new File(targetFilePath), Constants.LENGTH_150, new File(coverPath), false);
// Если создать миниатюру не удалось, используйте исходное изображение, чтобы переименовать его.
if (!created) {
FileUtils.copyFile(new File(targetFilePath), new File(coverPath));
}
}
public static Boolean createThumbnailWidthFFmpeg(File file, int thumbnailWidth, File targetFile, Boolean delSource) {
try {
BufferedImage src = ImageIO.read(file);
//thumbnailWidth Ширина миниатюры thumbnailHeight Высота миниатюры
int sorceW = src.getWidth();
int sorceH = src.getHeight();
//Меньше, чем Укажите высоту и ширину без сжатия
if (sorceW <= thumbnailWidth) {
return false;
}
compressImage(file, thumbnailWidth, targetFile, delSource);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void compressImage(File sourceFile, Integer width, File targetFile, Boolean delSource) {
try {
String cmd = "ffmpeg -i %s -vf scale=%d:-1 %s -y";
ProcessUtils.executeCommand(String.format(cmd, sourceFile.getAbsoluteFile(), width, targetFile.getAbsoluteFile()), false);
if (delSource) {
FileUtils.forceDelete(sourceFile);
}
} catch (Exception e) {
log.error("Сжатое изображение не удалось");
}
}
Этот код предназначен для создания миниатюр изображений или видео.。Имя миниатюры представляет собой имя исходного изображения плюс_
。
В cmd определен строковый шаблон, который должен генерировать команду ffmpeg. Объяснение следующее:
-i %s
: Входной файл.-vf scale=%d:-1
: Видеофильтр, укажите коэффициент масштабирования, ширина равна указанному значению, а высота рассчитывается автоматически.%s
: Выходной файл.-y
: Перезапишите выходной файл, если он существует.При реализации этого кода мы можем столкнуться со следующим исключением, выдаваемым консолью
Как решить это исключение?
Для демонстрации я использую устройство Windows.
Введите первыйFFmpegОфициальный сайт
После загрузки разархивируйте его в каталог без китайских иероглифов.
Вот оно установлено
Когда мы нажмем, мы обнаружим, что есть эти папки
существоватьbinВ каталоге будет три.exe
документ
Давайте нажмем здесь,копироватьэтот путь(Примечание: обязательно скопируйте в папку с bin)
Затемсуществовать Щелкните правой кнопкой мыши по этому компьютеру и свойствам.--->Расширенные настройки системы---->переменные среды
Найдите путь в системной переменной и нажмите «Изменить».
Просто вставьте каталог bin, который мы скопировали, в путь.
Последний шаг также является самым важным шагом,После подтверждения обязательно нажмите,Перезапуск! ! ! ! ! ! ! ! ! !