Ffmpeg - sauvegarde le fichier bmp sous une extension différente

0

Je veux enregistrer un bmpfichier en 1.mp4utilisant Ffmpeg, comment y parvenir?

La question est très simple. J'ai un fichier source, appelons-le source.pnget je veux l'encoder comme bmp, mais l'enregistrer en tant que fichier avec l'extension mp4. Bien sûr, une façon de le réaliser consiste à le sauvegarder en tant que fichier avec une bmpextension, puis à l’utiliser en ligne de commande pour le renommer mp4. Mais ce n'est pas ce que je veux. Je veux que ce soit enregistré directement sous mp4.

J'ai cherché sur internet et j'ai trouvé que pour y parvenir, il fallait spécifier un -fparamètre. Ceci est ma ligne de commande:

ffmpeg -hide_banner -i source.png -f bmp 1.mp4

Et bien sûr, j'ai une erreur Requested output format 'bmp' is not a suitable output format.. J'ai continué à chercher une solution et j'ai trouvé que l'appel de Ffmpeg avec paramètre -formatsaffiche tous les formats pris en charge. Je l'ai fait et je n'ai trouvé qu'un seul format contenant le mot bmp:

D  bmp_pipe        piped bmp sequence

Ensuite, j'ai remplacé -f bmp with-f bmp_pipe`, mais j'ai eu la même erreur. Alors, comment le faire correctement?

En général, ma question est la suivante: extension donnée (par exemple bmpdans ce cas), comment déterminer le mot qui doit être placé après -fpour pouvoir encoder de la même manière que cette extension est présente?


Peut-être que je n'étais pas assez clair dans la question. Je suis à la recherche d'un moyen de trouver le lien entre l' extension ( bmp, png, mp4, avi, etc.) et le paramètre Ffmpeg je dois passer pour encoder à cette extension.

Fondamentalement, je crée une application d'interface utilisateur où:

  1. L'utilisateur entre l'extension (par exemple mp4)
  2. L'utilisateur entre le nom du fichier de sortie (par exemple C:\1.exe(juste un exemple stupide))
  3. J'ai besoin de générer un processus ffmpeg qui encodera le fichier d'entrée comme le fichier de sortie se trouve dans l'extension spécifiée par l'utilisateur

J'espère que c'est plus clair maintenant.

Sathyajith Bhat
la source

Réponses:

1

Vous devrez passer par le multiplexeur parent pour les séquences d'images image2:

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

Exécutez ffmpeg -muxerspour obtenir une liste des -fvaleurs disponibles . Il n'y a pas de liste centrale des extensions liées aux multiplexeurs.

Gyan
la source
Hm .. Cela s'applique-t-il en général? Je veux dire, je cherche un moyen de demander à l'utilisateur une extension, puis d'encoder une image (ou une vidéo) à cette extension (mais le fichier de sortie est toujours nommé .mp4). Puis-je remplacer -c:v bmppar une autre extension et cela fonctionnera?
Pour les formats d'image, c'est la méthode. Pour les formats vidéo, ravitaillement-f ext
Gyan le
J'ai mis à jour la question. Donc, pour résumer, pour toutes les extensions d’image, j’ai besoin de passer -c:v ext -f image2et pour tous les formats vidéo, j’ai besoin de passer -f ext, non? Y a-t-il des exceptions?
1
Il n'y a aucun moyen de le faire automatiquement car ffmpeg n'est pas conçu pour se comporter comme si l'extension de sortie était un faux drapeau. C'est un cas d'utilisation très atypique et imprévu, d'autant plus que vous pouvez renommer le fichier par la suite.
Gyan
1
Si vous le diffusez en continu et que l'URI de sortie n'a pas d'extension, vous devez le spécifier -f. Exécuter ffmpeg -muxerspour obtenir une liste des -fvaleurs disponibles . Il n'y a pas de liste centrale des extensions liées aux multiplexeurs.
Gyan