Ffmpeg - сохранить файл bmp как другое расширение

546
Sathya

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

По сути, я создаю приложение с пользовательским интерфейсом, где:

  1. Пользователь вводит расширение (например mp4)
  2. Пользователь вводит имя выходного файла (например C:\1.exe(просто тупой пример))
  3. Мне нужно порождать процесс ffmpeg, который будет кодировать входной файл, как выходной файл в том расширении, которое указал пользователь

Надеюсь, теперь все понятно.

0

1 ответ на вопрос

1
Gyan

Вам придется пройти через родительский мультиплексор для последовательностей изображений image2:

ffmpeg -i in.png -c:v bmp -vframes 1 -f image2 out.mp4 

Запустите ffmpeg, -muxersчтобы получить список доступных -fзначений. Там нет центрального списка расширений, связанных с муксерами.

Хм .. Это относится вообще? Я имею в виду, я ищу способ запросить у пользователя расширение, а затем кодировать изображение (или видео) в это расширение (но выходной файл всегда называется `.mp4`). Итак, могу ли я заменить` -c: v bmp `с любым другим расширением, и оно будет работать? 6 лет назад 0
Для форматов изображений это метод. Для форматов видео укажите `-f ext` Gyan 6 лет назад 0
Я обновил вопрос. Итак, чтобы подвести итог, для всех расширений изображений мне нужно передать `-c: v ext -f image2` и для всех форматов видео мне нужно передать` -f ext`, верно? Есть ли исключения? 6 лет назад 0
Я имею в виду, нетрудно создать два отдельных списка: один с расширениями изображений, а другой с расширениями видео, но мне просто интересно, есть ли исключения? 6 лет назад 0
Не все расширения работают как `-f значения`. Например, MKV вызывает `-f matroska`. Для JPEG вы можете просто использовать `-f ​​singlejpeg`. Существуют десятки форматов, поэтому нельзя отметить все возможные исключения, но среди основных форматов это так. Gyan 6 лет назад 0
Извините, если мои вопросы скучны, но я все еще верю, что здесь должен быть простой способ сделать это. Например, если вы пропустите параметр `-f`, то Ffmpeg определит правильный формат в соответствии с расширением выходного файла, верно? Поэтому они используют некоторый алгоритм для этого. Я просто хочу, чтобы Ffmpeg вел себя так, как будто задано конкретное расширение, независимо от того, какое реальное расширение у выходного файла. 6 лет назад 0
Нет никакого способа сделать это автоматически, потому что ffmpeg не предназначен для того, чтобы вести себя так, как будто выходное расширение является ложным флагом. Это очень нетипичный и неожиданный сценарий использования, особенно если учесть, что впоследствии вы можете просто переименовать файл. Gyan 6 лет назад 1
* «ffmpeg не предназначен для того, чтобы вести себя так, как будто выходное расширение является ложным флагом». * - Но что, если я хочу передать его другому процессу (нашему выводу на стандартный вывод) в определенном формате? Например, я хочу кодировать данный файл с определенным расширением (используя ffmpeg), затем передавать его другому процессу, кодировать и сохранять его. Таким образом, ffmpeg не будет сохранять в файл, вместо этого он будет передавать данные другому процессу, и как с этим бороться? Где вы нашли, что `matroska` для` mkv` и `singlejpeg` для` jpg`? Где я могу найти эти шаблоны? Мне нужно сделать это автоматически. 6 лет назад 0
Если вы транслируете его, а выходной URI не имеет расширения, то вы должны указать `-f`. Запустите `ffmpeg -muxers`, чтобы получить список доступных значений` -f`. Там нет центрального списка расширений, связанных с муксерами. Gyan 6 лет назад 1

Похожие вопросы