说明:最近遇到了一个关于apng动图的问题,压缩与未压缩加载情况下,未压缩的图片竟然加载不成功,在代码层面看是因为图片的流内容大小造成的越界问题,就想看一下两张图片有啥区别所以,就去下载了个 FFmpeg这个著名的库,去看看两张图片具体的区别。
例子:查看图片的命令如下:
ffprobe -v error -show_format -show_streams image.jpg
输出内容:
[STREAM]
index=0
codec_name=mjpeg
codec_long_name=Motion JPEG
profile=Baseline
codec_type=video
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=450
height=675
coded_width=450
coded_height=675
closed_captions=0
film_grain=0
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=2:3
pix_fmt=yuvj444p
level=-99
color_range=pc
color_space=bt470bg
color_transfer=unknown
color_primaries=unknown
chroma_location=center
field_order=unknown
refs=1
id=N/A
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/25
start_pts=0
start_time=0.000000
duration_ts=1
duration=0.040000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
DISPOSITION:multilayer=0
[/STREAM]
[FORMAT]
filename=/Users/tanguiwu/comfy-image/texttoimagPrompt.jpeg
nb_streams=1
nb_programs=0
nb_stream_groups=0
format_name=image2
format_long_name=image2 sequence
start_time=0.000000
duration=0.040000
size=365341
bit_rate=73068200
probe_score=50
[/FORMAT]
解释说明:
#### [STREAM] 部分
- `index=0`:流的索引号,表示这是文件中的第一个流。
- `codec_name=mjpeg`:流的编码格式,这里是 Motion JPEG。
- `codec_long_name=MJPEG (Motion JPEG)`:编码格式的详细名称。
- `codec_type=video`:流的类型,这里是视频流。
- `codec_time_base=0/1`:时间基准,用于时间戳计算。
- `codec_tag_string=[0][0][0][0]`:编码标签的字符串表示。
- `codec_tag=0x0000`:编码标签的十六进制表示。
- `width=1920`:图像的宽度(像素)。
- `height=1080`:图像的高度(像素)。
- `coded_width=1920`:编码后的图像宽度。
- `coded_height=1080`:编码后的图像高度。
- `has_b_frames=0`:是否包含 B 帧,这里为 0 表示没有 B 帧。
- `sample_aspect_ratio=N/A`:采样纵横比,不适用于静态图像。
- `display_aspect_ratio=N/A`:显示纵横比,不适用于静态图像。
- `pix_fmt=yuvj420p`:像素格式,这里是 YUV 4:2:0。
- `level=-99`:编码级别,-99 表示未定义。
- `color_range=pc`:颜色范围,这里是全范围(PC 范围)。
- `color_space=bt470bg`:颜色空间,这里是 BT.470 BG。
- `color_transfer=bt470bg`:颜色传输特性,这里是 BT.470 BG。
- `color_primaries=bt470bg`:颜色原色,这里是 BT.470 BG。
#### [FORMAT] 部分
- `filename=image.jpg`:文件名。
- `nb_streams=1`:文件中的流数量,这里是 1。
- `nb_programs=0`:文件中的节目数量,这里是 0。
- `format_name=jpeg_pipe`:文件格式名称,这里是 JPEG 管道。
- `format_long_name=piped jpeg sequence`:文件格式的详细名称。
- `start_time=N/A`:文件的开始时间,不适用于静态图像。
- `duration=N/A`:文件的持续时间,不适用于静态图像。
- `size=1048576`:文件大小(字节)。
- `bit_rate=N/A`:比特率,不适用于静态图像。
- `probe_score=50`:探测得分,用于表示文件格式探测的置信度。
### 总结
通过 `ffprobe -v error -show_format -show_streams image.jpg` 命令,你可以获取图像文件的详细信息,包括编码格式、分辨率、像素格式、颜色空间等。这
至于对于不知道如何安装该库的人来说,下面提供了一整个安装流程,有需要请看:
一、安装 FFmpeg这个著名的库,去看看两张图片具体的区别。
-
使用 Homebrew 安装: Homebrew 是 macOS 上的一个包管理工具,可以方便地安装各种软件。首先,确保你已经安装了 Homebrew。如果没有安装,可以通过以下命令安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"然后,使用 Homebrew 安装 FFmpeg:
brew install ffmpeg -
验证安装: 安装完成后,可以通过以下命令验证 FFmpeg 是否安装成功:
ffmpeg -version如果安装成功,你会看到 FFmpeg 的版本信息。
二、使用 FFmpeg
FFmpeg 的基本用法是通过命令行进行操作。以下是一些常见的使用示例:
-
转换视频格式: 将一个视频文件从一种格式转换为另一种格式。例如,将 MP4 文件转换为 AVI 文件:
ffmpeg -i input.mp4 output.avi -
提取音频: 从视频文件中提取音频。例如,从 MP4 文件中提取音频并保存为 MP3 文件:
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3 -
合并视频文件: 将多个视频文件合并为一个文件。首先,创建一个包含所有要合并文件的列表文件
filelist.txt,内容如下:file 'input1.mp4' file 'input2.mp4' file 'input3.mp4'然后,使用以下命令合并视频文件:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4 -
压缩视频: 压缩视频文件以减小文件大小。例如,将 MP4 文件压缩为较小的 MP4 文件:
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 output.mp4 -
裁剪视频: 裁剪视频文件。例如,将视频的前 30 秒裁剪出来:
ffmpeg -i input.mp4 -ss 00:00:00 -t 00:00:30 -c copy output.mp4 -
添加水印: 在视频中添加水印。例如,将
watermark.png添加到视频的右上角:ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:10" output.mp4
三、帮助和文档
FFmpeg 提供了丰富的命令行选项和参数,可以通过以下命令查看帮助和文档:
ffmpeg -h
参考链接:FFmpeg 官方文档