Использование 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