Я хочу сохранить bmpфайл, 1.mp4используя Ffmpeg, как этого добиться?
Вопрос очень прост. У меня есть какой-то исходный файл, давайте его назовем, source.pngи я хочу его закодировать bmp, но сохранить как файл с расширением mp4. Конечно, один из способов добиться этого - сохранить его как файл с bmpрасширением, а затем использовать командную строку для его переименования mp4. Но это не то, что я хочу. Я хочу, чтобы он был сохранен как mp4.
Я искал в интернете и обнаружил, что для этого нужно указать -fпараметр. Это моя командная строка:
ffmpeg -hide_banner -i source.png -f bmp 1.mp4
И, конечно, я получил ошибку Requested output format 'bmp' is not a suitable output format.. Я продолжил поиск решения и обнаружил, что вызов Ffmpeg с параметром -formatsотображает все поддерживаемые форматы. Я сделал это, и я нашел только один формат, содержащий слово bmp:
D bmp_pipe piped bmp sequence
Затем я заменил -f bmp with-f bmp_pipe`, но снова получил ту же ошибку. Итак, как правильно это сделать?
В общем, мой вопрос: заданное расширение (например, bmpв этом случае), как определить слово, которое необходимо поместить после -fтого, чтобы кодировать, как это расширение присутствует?
Может быть, я не был достаточно ясен в этом вопросе. Я ищу способ, чтобы найти связь между расширением ( bmp, png, mp4, aviи т.д.) и параметр FFmpeg мне нужно пройти, чтобы закодировать для этого расширения.
По сути, я создаю приложение с пользовательским интерфейсом, где:
Пользователь вводит расширение (например mp4)
Пользователь вводит имя выходного файла (например C:\1.exe(просто тупой пример))
Мне нужно порождать процесс ffmpeg, который будет кодировать входной файл, как выходной файл в том расширении, которое указал пользователь
Надеюсь, теперь все понятно.
1 ответ на вопрос
1
Gyan
Вам придется пройти через родительский мультиплексор для последовательностей изображений image2:
Запустите ffmpeg, -muxersчтобы получить список доступных -fзначений. Там нет центрального списка расширений, связанных с муксерами.
Хм .. Это относится вообще? Я имею в виду, я ищу способ запросить у пользователя расширение, а затем кодировать изображение (или видео) в это расширение (но выходной файл всегда называется `.mp4`). Итак, могу ли я заменить` -c: v bmp `с любым другим расширением, и оно будет работать?
7 лет назад
0
Для форматов изображений это метод. Для форматов видео укажите `-f ext`
Gyan 7 лет назад
0
Я обновил вопрос. Итак, чтобы подвести итог, для всех расширений изображений мне нужно передать `-c: v ext -f image2` и для всех форматов видео мне нужно передать` -f ext`, верно? Есть ли исключения?
7 лет назад
0
Я имею в виду, нетрудно создать два отдельных списка: один с расширениями изображений, а другой с расширениями видео, но мне просто интересно, есть ли исключения?
7 лет назад
0
Не все расширения работают как `-f значения`. Например, MKV вызывает `-f matroska`. Для JPEG вы можете просто использовать `-f singlejpeg`. Существуют десятки форматов, поэтому нельзя отметить все возможные исключения, но среди основных форматов это так.
Gyan 7 лет назад
0
Извините, если мои вопросы скучны, но я все еще верю, что здесь должен быть простой способ сделать это. Например, если вы пропустите параметр `-f`, то Ffmpeg определит правильный формат в соответствии с расширением выходного файла, верно? Поэтому они используют некоторый алгоритм для этого. Я просто хочу, чтобы Ffmpeg вел себя так, как будто задано конкретное расширение, независимо от того, какое реальное расширение у выходного файла.
7 лет назад
0
Нет никакого способа сделать это автоматически, потому что ffmpeg не предназначен для того, чтобы вести себя так, как будто выходное расширение является ложным флагом. Это очень нетипичный и неожиданный сценарий использования, особенно если учесть, что впоследствии вы можете просто переименовать файл.
Gyan 7 лет назад
1
* «ffmpeg не предназначен для того, чтобы вести себя так, как будто выходное расширение является ложным флагом». * - Но что, если я хочу передать его другому процессу (нашему выводу на стандартный вывод) в определенном формате? Например, я хочу кодировать данный файл с определенным расширением (используя ffmpeg), затем передавать его другому процессу, кодировать и сохранять его. Таким образом, ffmpeg не будет сохранять в файл, вместо этого он будет передавать данные другому процессу, и как с этим бороться? Где вы нашли, что `matroska` для` mkv` и `singlejpeg` для` jpg`? Где я могу найти эти шаблоны? Мне нужно сделать это автоматически.
7 лет назад
0
Если вы транслируете его, а выходной URI не имеет расширения, то вы должны указать `-f`. Запустите `ffmpeg -muxers`, чтобы получить список доступных значений` -f`. Там нет центрального списка расширений, связанных с муксерами.
Gyan 7 лет назад
1