Android手機能有支援RAW檔的相機就該偷笑了,大部分相機輸出的不外乎是JPEG或PNG。隨著解像度越來越高,檔案大概都4MB起跳。
為何不在拍照的時候就儲存成AVIF/HEIC/HEIF等高效率格式呢?或許未來會支援吧,AVIF比HEIC更新更有吸引力。
在那之前,我們可以先用Termux的相機功能玩一下,在拍照成JPEG後直接轉成近乎無損的AVIF。
這是主角北上,用Sony內建相機拍的。
安裝 Termux,安裝 Termux API。安裝termux-api和Image Magick套件:
pkg update
pkg install termux-api imagemagick
使用termux-camera-info
指令查看相機訊息。應該會印出一串JSON,並標記手機上的鏡頭ID,例如我有1個前鏡頭+3個後鏡頭,對應ID 0~4。
[
{
"id": "0",
"facing": "back",
"jpeg_output_sizes": [
{
"width": 4032,
"height": 3024
},
],
"focal_lengths": [
5.110000133514404
]
},
{
"id": "1",
"facing": "front",
"jpeg_output_sizes": [
{
"width": 3264,
"height": 2448
},
],
"focal_lengths": [
2.4700000286102295
]
},
{
"id": "2",
"facing": "back",
"jpeg_output_sizes": [
{
"width": 4032,
"height": 3024
}
],
"focal_lengths": [
5.110000133514404
]
},
{
"id": "3",
"facing": "back",
"jpeg_output_sizes": [
{
"width": 4288,
"height": 3216
}
],
"focal_lengths": [
6.949999809265137
]
},
{
"id": "4",
"facing": "back",
"jpeg_output_sizes": [
{
"width": 4032,
"height": 3024
},
],
"focal_lengths": [
2.6700000762939453
]
}
]
Termux沒有GUI要怎麼拍照?就擺好pose靠感覺囉。如果想看該鏡頭的大約成像狀況,下載 OpenCamera切換鏡頭就會得知。
再來是拍照指令!Termux會叫相機(-c
後面接鏡頭ID)拍照輸出jpeg格式的相片,沒其他選項可調。將該檔案丟給Image Magick轉檔成AVIF。最後面的指令是將jpeg刪除。
termux-camera-photo -c 0 temp.jpeg && magick convert temp.jpeg -quality 90 out.avif && rm temp.jpeg
拍照時可能會聽到鏡頭作動聲音,Android 12也會顯示鏡頭存取。轉檔大約10秒。
拍照之後,從 Termux的家目錄把檔案取出來,JPEG(左)轉成AVIF(右)後體積減少了一半多。(註:我的手機AVIF顏色映射怪怪的,要放到Linux電腦上看才會準)
改用3號廣角鏡頭試試也別有一番風味。
當然,要將檔案轉成蘋果在用的HEIC也是可以的,但這樣檔案反而會變大XD。
這麼麻煩,幹嘛不正常拍完照再大量轉換呢?很好,請看 如何將圖片影片轉檔成AVIF / AVIFS