Использование ffmpeg для получения видеоинформации - почему мне нужно указать выходной файл?

Я использую ffmpeg для получения информации о видеофайле и не хочу сохранять информацию в файл. ffmpeg возвращает всю информацию о видео, но возвращается как ошибка, потому что я не указываю выходной файл. Я использую команду:

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

Я получаю сообщение об ошибке "Необходимо указать хотя бы один выходной файл"

Я <cfexecute> это в ColdFusion, используя <cfexecute>, и выходные данные хранятся в локальной переменной, поэтому я не хочу указывать файл... Мне просто не нужно хранить это в файле,

Если это имеет какое-то значение, я запускаю это на Windows.

Ответы

Ответ 1

Это указывает на ошибку, поскольку FFmpeg требует указания выходного файла. Использование его только для получения информации о файле не является его предполагаемым использованием.

Вариант 1: Игнорировать ошибку. FFmpeg сначала печатает информацию о файле, поэтому вы можете просто получить нужную информацию и проигнорировать ошибку.

Вариант 2: Используйте ffprobe. FFprobe - еще один инструмент, обычно упакованный с FFmpeg, который предназначен для получения информации о медиафайлах. Он может даже выводить информацию в разнообразных легко анализируемых форматах, поэтому вам не нужно будет разбирать вывод FFmpeg.

Ответ 2

В итоге я использовал ffprobe. Вот мой тестовый код ColdFusion... имейте в виду, что это может быть написано лучше. На данный момент меня интересует только ширина/высота/продолжительность.

<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

Это можно сделать с помощью ffmpeg, и если вы не хотите сохранять информацию в файл, вы можете просто отправить ее в /dev/null в * nix системах.

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