web-dev-qa-db-fra.com

Utilisation de ffmpeg pour obtenir des informations vidéo - pourquoi dois-je spécifier un fichier de sortie?

J'utilise ffmpeg pour obtenir des informations sur un fichier vidéo et je ne veux pas enregistrer les informations dans un fichier. ffmpeg retourne toutes les informations vidéo, mais cela revient comme une erreur car je ne spécifie pas de fichier de sortie. La commande que j'utilise est:

 ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4

L'erreur que j'obtiens est "Au moins un fichier de sortie doit être spécifié"

J'appelle cela dans ColdFusion en utilisant <cfexecute>, et la sortie est stockée dans une variable locale, c'est pourquoi je ne veux pas spécifier un fichier ... Je n'ai simplement pas besoin de le stocker dans un fichier.

Si cela fait une différence, je l'exécute sous Windows.

31
Redtopia

Cela donne une erreur car FFmpeg nécessite qu'un fichier de sortie soit spécifié. L'utiliser uniquement pour obtenir des informations sur un fichier n'est pas son utilisation prévue.

Option 1: Ignorez l'erreur. FFmpeg imprime d'abord les informations sur le fichier, vous pouvez donc simplement obtenir les informations dont vous avez besoin et ignorer l'erreur.

Option 2: Utilisez plutôt ffprobe FFprobe est un autre outil généralement fourni avec FFmpeg qui est conçu pour obtenir des informations sur les fichiers multimédias. Il peut même afficher les informations dans une variété de formats faciles à analyser, vous n'avez donc pas à vous soucier de l'analyse de la sortie de FFmpeg.

44
blahdiblah

J'ai fini par utiliser ffprobe à la place. Voici mon code de test ColdFusion ... gardez à l'esprit que cela pourrait être mieux écrit. À ce stade, je ne suis intéressé que par la largeur/hauteur/durée.

<cfset fsVideoFile = "C:\videos\test.mp4">
<cfset width = 270>
<cfset height = 480>
<cfset duration = 0>

<cfexecute
   name="ffmpeg\bin\ffprobe.exe"
   arguments="#fsVideoFile# -v quiet -print_format json -show_format -show_streams"
   timeout="60"
   variable="jsonInfo"
   errorVariable="errorOut" />

<cfif IsJSON (jsonInfo)>
   <cfset videoInfo = DeserializeJSON (jsonInfo)>
   <cfdump var="#videoInfo#">
   <cfset duration = videoInfo.format.duration>
   <cfloop array="#videoInfo.streams#" index="stream">
      <cfif stream.codec_type EQ "video">
         <cfset width = stream.width>
         <cfset height = stream.height>
         <cfbreak />
      </cfif>
   </cfloop>
</cfif>
3
Redtopia

Il est possible de le faire avec ffmpeg et si vous ne souhaitez pas enregistrer les informations dans un fichier, vous pouvez simplement les envoyer à /dev/null dans les systèmes * nix.

ffmpeg -i file.mp4 -hide_banner -f null /dev/null
0
alemol