你的电脑上有媒体文件吗?你可能可以通过将这些数据存储在更节省空间的文件格式中来回收大量磁盘空间。
这篇文章演示了如何使用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格式提供阿尔法透明性、动画和良好的色彩亮度。它几乎总是作为一种有损格式使用,尽管它也支持无损。
我把我的大部分PNG和JPG文件转换成WEBP格式,并重新获得了大量的存储空间。在一个磁盘上,500兆的PNG文件被融化成大约120兆的WEBP。如果你确定你的图像只在屏幕上显示,转换为WEBP有明显的好处。
开源的ImageMagick工具为你提供了Linux终端命令来转换图像。你可能需要先安装它。
$ sudo apt install imagemagick
ImageMagick行命令帮助你通过三种技术减少图像文件的大小。
- 改变文件格式
- 改变压缩的程度
- 使图像更小
下面是ImageMagickconvert 命令的语法,它执行文件格式转换。
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是最佳选择。
以下是最流行的音频格式。请注意,文件扩展名通常指的是可以支持一种以上音频编码格式的容器,而且大多数技术要求的文件扩展名不止一种。这个图表列出了你会看到的最常见的情况。
- 无损和未压缩的
- 无损和压缩的
- 损失
- 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文件的过程是一样的(但用.aiff 替换.wav )。
$ 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音频,被用于蓝光和互联网流媒体。
- WEBM格式包含VP9视频和Opus音频,非常灵活,既可用于存档质量的文件,也可用于流媒体的小文件。
- Matroska(MKV)容器格式可以包含几乎所有的视频、音频、甚至立体(3D)图像的组合。它是WEBM的基础。
决定视频文件大小和质量的主要因素是。
- 分辨率(帧的尺寸)
- 比特率
- 编码
ffmpeg 命令可以改变所有三个参数。下面是一个简单的转换例子。
$ ffmpeg -i input_video.mov output.webm
这个转换的结果是,从39MB的输入中得到一个1.8MB的输出文件。
因为我没有指定任何参数,ffmpeg 复制了输入文件的大部分现有属性。在这个例子中,我的输入文件是一个包含MJPEG视频的MOV文件,分辨率为1280x720,帧率为23.98,比特率为40219千字节/秒(kbps)。由此产生的输出文件包含具有相同分辨率和帧率的VP9视频。然而,比特率只有1,893 kbps。
与音频转换一样,视频压缩率令人印象深刻,而且潜在的空间节省是巨大的。在我的电脑上,这些转换与原件的观看效果非常相似,很难说是否有任何退化--对于我的目的来说,这就等于说没有退化。
输出的质量是否为你所接受,取决于你对视频的预期用途、你的观看设备和你的期望。在你审查了转换后的文件并发现它令人满意之前,千万不要删除你的原始文件。
归档存储
归档需要多个输入文件--通常是不同的文件类型--并将它们收集到一个输出文件中。压缩是可选的。压缩档案对于在互联网上发送文件和长期的数据存储很有用。这是一个节省空间的好方法。缺点是,在你把归档文件提取出来之前,你对归档文件的处理是有限的(尽管现在有些工具对归档文件的处理已经相当成熟)。
在许多档案文件格式中,最流行的压缩格式包括GZ、BZ2、XZ、ZIP和7Z。该 tar命令可以处理许多档案格式。它支持的压缩命令包括gzip,bzip2,xz, 和其他。
$ tar --xz --create --file myarchive.tar.xz bigfile.xcf bigfile.tiff
这个命令把56MB的文件减少到28MB的压缩档案。压缩的程度因所涉及的文件而有很大不同。有些媒体文件(特别是那些已经被压缩的文件)压缩得很少,或者根本就没有压缩。
要解除一个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 堆栈命令或查找命令。
结论
谨慎地使用,压缩和重新格式化媒体文件的Linux命令可以为你节省数千兆字节的存储空间。我相信你也有一些自己的绝招,所以请在评论中添加它们。