Как я могу узнать, что определенный файл является видео файлом? - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь выяснить, является ли определенный загруженный пользователем файл видеофайлом.

Сначала я попробовал ffprobe,

# a png file

Input #0, png_pipe, from '<file>':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, rgba(pc), 920x2094 [SAR 4724:4724 DAR 460:1047], 25 tbr, 25 tbn, 25 tbc

# a text file

Input #0, tty, from '<file>':
  Duration: 00:00:00.24, bitrate: 40 kb/s
    Stream #0:0: Video: ansi, pal8, 640x400, 25 fps, 25 tbr, 25 tbn, 25 tbc

# a video file

Input #0, matroska,webm, from '<file>':
  Metadata:
    encoder         : libebml v1.3.5 + libmatroska v1.4.8
    creation_time   : 2017-12-12T20:18:42.000000Z
  <redacted>

, но слишком сложно понять, что к чему,Даже файлы изображений и текстовые файлы считаются видео.

Стоит ли сравнивать вывод matroska,webm, с каждым кодеком, поддерживаемым ffmpeg, или есть лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Использование ffprobe:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_type -of csv=p=0 input.mkv

Выходы либо video, либо вообще не выводятся.

Проблема в том, что ffprobe рассматривает изображения как видео, поэтому вы можете дополнительно / альтернативно использовать codec_name, чтобы помочь определить тип:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type -of default=nw=1 input.png

Выходы:

codec_name=png
codec_type=video
0 голосов
/ 31 мая 2019

Предполагая, что ваша система поддерживает команду file, вы можете передать опцию -i, --mime , чтобы получить тип файла mime и изолировать его перед обработкой с помощью ffmpeg :

# a video file

$ file -i movie.mp4 | cut -d ' ' -f2 | cut -d '/' -f1
--> video

( Кредит для команды cut).

...