您的电脑上有媒体文件吗?您可以通过以更节省空间的格式存储这些数据来回收大量磁盘空间。
本文演示了如何使用 Linux 命令行执行最常见的节省空间转换。我使用命令行是因为它们让您可以完全控制压缩和格式转换功能。此外,如果您想编写脚本,则需要使用命令行。这使您可以开发根据您自己独特需求定制的程序。
虽然本文介绍的是终端命令,但还有许多其他压缩和转换文件的方法。您可以将开源转换 GUI 应用程序安装到您的计算机上,甚至可以使用许多常见应用程序的 save as
和 export
功能转换文件格式。
本文仅讨论了数百种文件格式和终端命令中最受欢迎的几种。 目标是在保持简单的同时为您带来最大的好处。
文件删除
在开始文件格式转换之前,最好先识别并删除计算机上任何巨大但不想要的文件。 仅删除少量占用空间的文件即可获得超额收益。
du
、ncdu
和 dust
命令列出了当前目录下最大的子目录。 它们会告诉您哪些目录使用的磁盘空间最多。
$ du -a . | sort -n -r | head -n 50
此命令字符串标识其递归目录树中最大的 50 个文件。 它列出了按大小排序的那些最大文件。
$ find -type f -exec du -Sh {} + | sort -rh | head -n 50
使用此命令,您可以立即识别何时在多个位置存储了大型文件。 删除重复项,您就可以回收一些重要的空间。 该输出还有助于您识别并删除不再需要的任何大文件。
质量或存储空间
包含图像、音频和视频的媒体文件可以使用数百种不同的文件格式。 通常需要在数据质量和所消耗的存储空间之间进行权衡。
某些文件格式是无损的: 它们保留所有最初捕获的数据。 无损文件格式可以是未压缩的或压缩的。 它们的大小因这个和其他因素而异。
其他文件格式是有损的。 它们通过巧妙地消除一些最有用的数据来节省存储空间。 如果您对数据的使用能够容忍一些轻微的数据丢失,那么它们是理想的选择。
例如,以 RAW、PNG 或 BMP 等无损格式捕获数字图像会创建一个大文件。 将该图像转换为 JPG 或 WEBP 等有损替代方案可以节省大量空间。 值得吗? 这取决于您对图像的预期用途。
如果您是一位专业摄影师,需要在高质量的书中打印照片,您可能需要保留原始无损文件。 您可能需要最高质量的图像用于您的艺术作品。 您的无损文件还意味着您可以执行广泛的图像编辑而不会降低质量。
如果您是一位网站开发人员,您可能会做出相反的选择。 较小的有损 JPG 或 WEBP 文件比无损图像更快地下载到用户的计算机上,从而加快了网页加载速度。 这种转换之所以有效,是因为很少有用户可以分辨出他们在计算机或手机屏幕上看到的图像是无损还是有损。
请记住,在您从无损格式转换为有损格式后,您已经删除了一些数据。 您无法转换回来以重新获得该数据。 您可以转换回以前的格式,但这样做时不会包含您已经牺牲的数据。 只有在您确信转换后的文件满足您的所有需求后,才删除原始文件! 您可以选择根本不删除原始文件。
有时,节省空间就是节省方便的空间。 如果原始的、无损的、未压缩的文件对您出于任何原因很重要,请将它们备份到单独的存储位置。 您可能不需要每天在您的工作计算机上使用该全质量的 WAV 文件,但您可能会很高兴以后可以访问它。
转换图像文件
几种流行的位图文件格式为节省空间提供了绝佳机会,包括 RAW、BMP、GIF 和 TIFF。 广泛使用的 PNG 格式也是一个不错的选择。
图像的一种可能的转换目标是有损 JPG 格式。 通过其质量设置,JPG 允许您指定较小的文件大小,数据丢失更大,或指定较大的文件大小,数据丢失更少。 与某些无损格式相比,它可能会为您提供高达 10:1 的压缩比。 但是,如果您在计算机或手机屏幕上显示 JPG 图像,肉眼很少能分辨出是否发生了转换和压缩。
WEBP 文件在屏幕上看起来与 JPG 文件一样好,但它们节省了更多的空间。 这就是 WEBP 成为最流行的有损图像格式的原因,所有现代浏览器和大多数最新的应用程序都支持它。 WEBP 格式提供 alpha 透明度、动画和良好的色彩辐射。 它几乎总是用作有损格式,尽管它也支持无损格式。
我将我的大多数 PNG 和 JPG 文件转换为 WEBP 格式,并回收了大量的存储空间。 在一个磁盘上,500 兆字节的 PNG 文件融化为大约 120 兆的 WEBP。 如果您确定您的图像只会显示在屏幕上,则转换为 WEBP 会带来明显的好处。
开源 ImageMagick 实用程序为您提供 Linux 终端命令来转换图像。 您可能需要先安装它
$ sudo apt install imagemagick
ImageMagick 命令行可帮助您通过三种技术来减小图像文件大小
- 更改文件格式
- 更改压缩程度
- 缩小图像
这是执行文件格式转换的 ImageMagick convert
命令的语法
convert [input options] input_file [output options] output_file
这些示例都减小了文件大小,您可以从示例运行的结果中看到
$ convert image.bmp new_image.jpg # 7.4MB down to 1.1MB
$ convert image.tiff new_image.jpg # 7.4MB down to 1.1MB
$ convert image.png new_image.webp # 4.8MB down to 515KB
$ convert image.png new_mage.webp # 1.5MB down to 560KB
$ convert image.jpg new_image.webp # 769KB down to 512KB
$ convert image.gif new_image.jpg # 13.2MB down to 10.9MB
$ convert image.gif new_image.webp # 13.2MB down to 4.1MB
您也可以转换 RAW 图像。 转换 RAW 图像时,其文件名不得带有扩展名,convert
命令才能正确处理它。
$ convert image new_image.png # RAW 67.1MB down to 45.3MB
可以节省大量空间,但前提是输出对于您的用例是可以接受的。
此示例通过将 JPG 图像调整为尽可能接近 800x600 的大小来节省空间,同时仍保持正确的宽高比。 在此示例中,我将一个 1277x824 像素的 285KB 输入文件转换为一个 800x600 像素的 51KB 输出文件。
$ convert image.jpg -resize 800x600 new_image.jpg
convert
命令可以随意更改图像。 例如,您可以指定图像质量和大小之间的权衡。 但是您必须浏览其许多选项才能了解其全部功能。 有关 ImageMagick 的更多信息,请阅读 Greg Pittman 的 ImageMagick 入门,或访问 ImageMagick 网站。
转换音频文件
与图像文件一样,音频文件也分为无损未压缩、无损压缩和有损格式。
与图像一样,无损和有损之间的权衡主要是数据质量与节省空间。 如果您需要最高质量的音频,请坚持使用无损文件。 例如,如果您编辑数字化音乐,情况可能就是这样。 如果您想要占用空间更小的可听音乐,那么世界上大多数人都认为 MP3、M4A 和 OPUS 等有损格式是最佳选择。
以下是最流行的音频格式。 请注意,文件扩展名通常指的是可以支持多种音频编码格式的容器,并且大多数技术都声明了多个文件扩展名。 此图表列出了您将看到的最常见场景
- 无损且未压缩
- WAV
- PCM
- AIFF
- 无损且已压缩
- FLAC
- ALAC
- 有损
- WEBM
- OPUS
- OGG (Vorbis)
- AAC (此格式的某些实现不是开放格式)
- MP3
- M4A
- WMA (不是开放格式)
如果您的目标是节省磁盘空间,请尝试从无损格式转换为有损格式。 除非必要,否则不要从一种有损格式转换为另一种有损格式。 这可能会严重降低音质。
一个非常灵活的 Linux 终端命令来转换音频文件是 ffmpeg
。 要安装它
$ sudo apt install ffmpeg
与 ImageMagick convert
命令一样,ffmpeg
支持大量文件格式和编解码器。 通过输入以下内容查看所有内容
$ ffmpeg -encoders
使用 ffmpeg
通常非常简单。这是标准语法。 -i
标志用于标识输入文件,而 -vn
标志告诉 ffmpeg
不要调用任何可能更改音频输出的视频相关代码。
$ ffmpeg -i audiofile_input.ext -vn audiofile_output.new
这些例子都将无损 WAV 文件转换为有损格式以节省空间。转换 AIFF 文件的过程相同(但将 .wav
替换为 .aiff
)。
$ ffmpeg -i audio.wav -vn audio.ogg # 38.3MB to 3.3MB
$ ffmpeg -i audio.wav -vn audio.mp3 # 38.3MB to 3.5MB
$ ffmpeg -i audio.wav -vn audio.m4a # 38.3MB to 3.6MB
$ ffmpeg -i audio.wav -vn audio.webm # 38.3MB to 2.9MB
所有命令都将无损输入文件的大小缩小了 10 倍。 最大的问题是:输出听起来与原始文件不同吗? 这取决于情况。 对于大多数使用消费级设备收听的人来说,差异可以忽略不计。 这就是 MP3、M4A 和其他压缩格式成为世界上最流行的音乐格式的原因。 即使从技术上讲它不是最好的,但音频相当悦耳,并且它消耗了存储空间(或流式传输时的带宽)的一小部分。
转换视频文件
视频转换提供了另一个节省大量空间的机会。 你的目标应该是找到在播放质量和文件大小之间达到最佳平衡的视频格式,以满足你的需求。
视频格式是容器文件格式和编解码器的组合。 编解码器是一种软件,用于在数据流进出容器文件时对其进行编码和解码。
容器可以与多个编解码器配对。 实际上,通常只有一两个或三个流行的编解码器与特定容器配对。 例如,对于音频文件,WAV 文件可以编码为无损或有损,但无损编码在格式中占主导地位,以至于大多数人认为任何 WAV 文件都是无损的。
以下是当今使用最广泛的一些开源视频格式:
- MP4 格式,包含 H.264 视频和 AAC 音频,用于 BluRay 和互联网流媒体。
- WEBM 格式,包含 VP9 视频和 Opus 音频,非常灵活,既可以用于存档质量的文件,也可以用于较小的流媒体文件。
- Matroska (MKV) 容器格式可以包含几乎任何视频、音频甚至立体 (3D) 图像的组合。 它是 WEBM 的基础。
决定视频文件大小和质量的主要因素是:
- 分辨率(帧的尺寸)
- 比特率
- 编码
ffmpeg
命令可以更改所有三个参数。 这是一个简单的转换示例:
$ ffmpeg -i input_video.mov output.webm
此转换将 39 MB 的输入文件转换为 1.8 MB 的输出文件。
因为我没有指定任何参数,所以 ffmpeg
复制了输入文件的大部分现有属性。 在此示例中,我的输入文件是一个 MOV 文件,其中包含分辨率为 1280x720 的 MJPEG 视频、23.98 的帧速率和 40,219 kbps 的比特率。 生成的输出文件包含 VP9 视频,具有相同的分辨率和帧速率。 但是,比特率仅为 1,893 kbps。
与音频转换一样,视频压缩率令人印象深刻,并且潜在的空间节省非常巨大。 在我的 PC 上,这些转换看起来与原始文件非常相似,很难分辨是否存在任何质量下降——对于我的目的来说,这与说没有质量下降一样好。
输出质量是否可以接受取决于你对视频的预期用途、你的观看设备以及你的期望。 在你查看转换后的文件并对其感到满意之前,切勿删除原始文件。
归档存储
归档需要多个输入文件(通常是不同的文件类型)并将它们收集到一个输出文件中。 压缩是可选的。 压缩归档对于通过互联网发送文件和长期数据存储非常有用。 这是节省空间的好方法。 缺点是你如何处理归档文件受到限制,直到你将它们从归档中提取出来(尽管现在有些工具在处理归档文件中的文件方面非常复杂)。
在众多归档文件格式中,最流行的压缩格式包括 GZ、BZ2、XZ、ZIP 和 7Z。 tar
命令处理许多归档格式。 它支持包括 gzip
、bzip2
、xz
等在内的压缩命令。
$ tar --xz --create --file myarchive.tar.xz bigfile.xcf bigfile.tiff
此命令将 56 MB 减少到 28 MB 的压缩归档。 压缩发生多少因所涉及的文件而异。 一些媒体文件(尤其是那些已经是压缩格式的文件)压缩很少或根本不压缩。
要解档 TAR 文件,请使用 --extract
选项:
$ tar --extract --file myarchive.tar.xz
tar
命令将许多文件捆绑到一个容器中(有时称为tarball)。 但是,如果你只压缩一个文件,则无需容器。
相反,你可以使用 gzip
、bzip2
、xz
、zip
、7z
等命令压缩文件。
$ xz bigfile.xcf
$ ls
bigfile.xcf.xz
要解压缩压缩文件,通常可以使用用于压缩文件的命令的“un”版本:
$ unxz bigfile.xcf.xz
有时还有一个 --decompress
选项:
$ xz --decompress bigfile.xcf.xz
并非所有 Linux 发行版都包含所有这些命令,因此你可能需要安装其中一些命令。
脚本技巧
要转换目录中的所有文件,只需将转换命令嵌入到 for
循环中。 将文件名变量用双引号引起来,以处理任何包含嵌入空格的文件名。 此脚本将目录中的所有 PNG 文件转换为 WEBP 文件:
#!/bin/bash
for file_name in *.png ; do
convert "$file_name" "$file_name".webp
done
要处理目录及其所有子目录中的所有文件,你需要递归遍历目录结构。 使用 pushd
和 popd
堆栈命令或 find 命令来执行此操作。
结论
谨慎使用时,压缩和重新格式化媒体文件的 Linux 命令可以为你节省数 GB 的存储空间。 我相信你也有一些很棒的技巧,请在评论中添加它们。
2 条评论