我怎么知道某个文件是视频文件?
How can I know a certain file is a video file?
我想确定某个用户上传的文件是否是视频文件。
我第一次尝试了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 支持的每个编解码器进行比较,还是有更好的方法来执行此操作?
假设你的系统支持file
命令,你可以通过-i, --mime选项获取文件的mime类型,并在使用ffmpeg[=20=处理之前隔离它]:
# a video file
$ file -i movie.mp4 | cut -d ' ' -f2 | cut -d '/' -f1
--> video
(Credit 用于 cut
命令)。
使用ffprobe
:
ffprobe -v error -select_streams v:0 -show_entries stream=codec_type -of csv=p=0 input.mkv
输出 video
或根本不输出。
问题是 ffprobe
将图像视为视频,因此您可以 additionally/alternatively 使用 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
我想确定某个用户上传的文件是否是视频文件。
我第一次尝试了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 支持的每个编解码器进行比较,还是有更好的方法来执行此操作?
假设你的系统支持file
命令,你可以通过-i, --mime选项获取文件的mime类型,并在使用ffmpeg[=20=处理之前隔离它]:
# a video file
$ file -i movie.mp4 | cut -d ' ' -f2 | cut -d '/' -f1
--> video
(Credit 用于 cut
命令)。
使用ffprobe
:
ffprobe -v error -select_streams v:0 -show_entries stream=codec_type -of csv=p=0 input.mkv
输出 video
或根本不输出。
问题是 ffprobe
将图像视为视频,因此您可以 additionally/alternatively 使用 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