[memo] find 應用

針對檔案生成驗證用雜湊

針對目前目錄的未生成雜湊的檔案生成 SHA256 雜湊

find . -maxdepth 1 -path "*.sha256" -prune -o -name "*" -type f -exec sh -c '[ ! -f "{}.sha256" ] && sha256sum "{}" | tee "{}.sha256" ' \;

透過 ffmpeg 對 FLAC 音訊檔案生成音訊 MD5

針對同一目錄下的每個單一音訊檔案 (FLAC) 生成 audiomd5:

find . -maxdepth 1 -path "*.audiomd5" -prune -o -name "*.flac" -type f -exec sh -c '[ ! -f "{}.audiomd5" ] && echo -n "{} Audio" | tee "{}.audiomd5" && ffmpeg -i "{}" -vn -f md5 - | tee -a "{}.audiomd5" ' \;

針對同一目錄下的每個單一音訊檔案 (FLAC) 生成 audiomd5,並整合成單一個 audiomd5 檔案:

[ ! -f "audiomd5" ] && echo "Audio MD5 Checksum: " | tee "audiomd5" && find . -maxdepth 1 -name "*.flac" -type f -exec sh -c 'echo -n "{} Audio" | tee -a "audiomd5" && ffmpeg -i "{}" -vn -f md5 - | tee -a "audiomd5" ' \;

透過批次轉換圖片至特定格式

透過 cwebp (來自套件 libwebp)

cwebp 指令參考:

cwebp | WebP | Google Developers
WebP – Mac上使用cwebp,dwebp,webpmux工具

對於這些指令,您需要以下套件:

  • cwebp (來自套件 libwebp)

轉換 JPG 為 WebP

find . -maxdepth 1 -iname '*.jpg' -exec sh -c 'cwebp {} -progress -mt -q 90 -metadata all -o {}.webp ; rename '.jpg.webp' '.webp' '{}.webp' ; rename '.JPG.webp' '.webp' '{}.webp' ; [ ! -d ./CONV_ED_ORIGIN_JPG ] && mkdir -p ./CONV_ED_ORIGIN_JPG ; mv '{}' ./CONV_ED_ORIGIN_JPG/ ' \;

意思為:批次轉換目前目錄後綴 (副檔名) 為 JPG 的圖片,將目標轉換為 WebP,輸出品質 90、顯示進度、多執行緒、保留所有中繼資料;重新命名 .jpg.webp.webp (會有大小寫問題,請依狀況修改);然後確認 ./CONV_ED_ORIGIN_JPG 目錄是否存在,不存在則建立;並將原始來源檔案移動至 ./CONV_ED_ORIGIN_JPG 底下。

以下為各參數之意思:

cwebp
  • -q float : 品質
  • -alpha_q int: 指定 alpha (透明度) 通道的品質
  • -noalpha: 丟棄 alpha 通道
  • -metadata string: 複製中繼資料至輸出檔案,支援的值為 all, none, exif, icc, xmp,預設為 none
  • -progress: 顯示轉換進度條
  • -short: 列印簡短資訊
  • -quiet: 安靜模式
  • -mt: 情況允許時使用多執行緒
  • -af: 自動過濾,此指令將會花費時間來另外計算來最佳化過濾強度,來達到平衡的品質。
  • -size int: 指定檔案大小,編碼器會自動調整參數,來嘗試接近指定大小;不可與 -psnr 同時使用
  • -psnr float: 指定 PSNR (單位 dB 分貝) ,編碼器會自動調整參數,來嘗試接近指定數值;不可與 -size 同時使用

其餘請參考:cwebp | WebP | Google Developers

透過 ImageMagick (會遺失 exif 等資訊,不推薦)

警告:會遺失 exif 資訊

請考慮搭配 exiftool、webpmux,匯入 JPG 的 exif 資訊,至於使用方式,還未嘗試,暫時不提供。

exiftool 安裝參考:

wget https://exiftool.org/Image-ExifTool-12.34.tar.gz #取得套件
tar -zxvf Image-ExifTool-12.34.tar.gz #解封裝
cd Image-ExifTool-12.34/ #移動至原始碼目錄
perl Makefile.PL && make install #編譯與安裝

對於這些指令,您需要以下套件:

  • ImageMagick

轉換 JPG 為 WebP

find . -maxdepth 1 -iname '*.jpg' -exec sh -c 'convert {} -quality 90 {}.webp ; rename ".jpg.webp" ".webp" *.webp ; rename ".JPG.webp" ".webp" *.webp ; [ ! -d ./CONV_ED_ORIGIN_JPG ] && mkdir -p ./CONV_ED_ORIGIN_JPG ; mv '{}' ./CONV_ED_ORIGIN_JPG/ ' \;

意思為:批次轉換目前目錄後綴 (副檔名) 為 JPG 的圖片,將目標轉換為 WebP;重新命名 .jpg.webp.webp (會有大小寫問題,請依狀況修改);然後確認 ./CONV_ED_ORIGIN_JPG 目錄是否存在,不存在則建立;並將原始來源檔案移動至 ./CONV_ED_ORIGIN_JPG 底下。

以下為各參數之意思:

ImageMagick
  • -quality: 品質
  • -define: 在指令之後接上特定編碼器的指令
  • -define webp:lossless=true, false: 針對 WebP 輸出啟用或停用無損壓縮
  • -flatten: 平面化,預設將 Alpha 通道轉換為白色
    (PNG 轉 JPEG 時使用,若要指定 Alpha 的色彩,請搭配 -background color 選項)
  • -alpha remove: 捨棄 Alpha 通道,extract 選項代表輸出 Alpha 通道
    (PNG 轉 JPEG 時使用,若要指定 Alpha 的色彩,請使用 -background color + -flatten 選項)
  • -background color: 將 Alpha 通道填上指定色彩
    (PNG 轉 JPEG 時使用,搭配 -flatten 以組合 Alpha 通道為單一平面)
  • -resize: 對轉換後的檔案改變尺寸,例如指定 -resize 1920x1080
    若想保持比例,自適應 (適應性) 其相對之寬度或高度,可以僅指定寬或高。
    例如: -resize 1920x 為僅只定寬,高度自適應;-resize x1080 為僅指定高,寬度自適應。

轉換 PNG 為 JPG

以下為各參數之意思:

ImageMagick
  • -quality: 品質
  • -define: 在指令之後接上特定編碼器的指令
  • -flatten: 平面化,預設將 Alpha 通道轉換為白色
    (PNG 轉 JPEG 時使用,若要指定 Alpha 的色彩,請搭配 -background color 選項)
  • -alpha remove: 捨棄 Alpha 通道,extract 選項代表輸出 Alpha 通道
    (PNG 轉 JPEG 時使用,若要指定 Alpha 的色彩,請使用 -background color + -flatten 選項)
  • -background color: 將 Alpha 通道填上指定色彩
    (PNG 轉 JPEG 時使用,搭配 -flatten以組合 Alpha 通道為單一平面)
  • -resize: 對轉換後的檔案改變尺寸,例如指定 -resize 1920x1080
    若想保持比例,自適應 (適應性) 其相對之寬度或高度,可以僅指定寬或高。
    例如: -resize 1920x 為僅只定寬,高度自適應;-resize x1080 為僅指定高,寬度自適應。

有關於 PNG 轉 JPG 的 Alpha 通道問題,可參考:Convert PNG with transparency to JPG

轉換 MPEG-4 檔案為 H.265 (AMD)

find . -maxdepth 1 -iname '*h265*' -prune -o -iname '*.mp4' -exec sh -c 'ffmpeg -i "{}" -c:v hevc_amf -c:a copy -quality quality -rc vbr_peak -min_qp_p 20 -max_qp_p 35 -min_qp_i 20 -max_qp_i 35 -profile_tier high -preanalysis true "{}_h265.mp4" && rename .mp4_h265 _h265 *.mp4 ' \;

意思為:無視帶有 h265 關鍵字檔名的檔案,並批次轉換目前目錄後綴 (副檔名) 為 MP4 的視訊,將目標轉換為 h265 (amd 硬體編碼器) 格式的 mp4 容器,使用 hevc amf 視訊編碼器、音訊複製原始軌道、編碼品質設定為品質模式、速率控制模式設定為變動位元速率(VBR_PEAK)、最小(品質好)P影格(差異影格)設定為20、最大(品質差)P影格為35、最小I影格(關鍵影格)為20、最大I影格為35、配置檔案層設定為高、啟用預先分析;重新命名 .mp4_h265_h265 (會有大小寫問題,請依狀況修改) 。

find . -maxdepth 1 -iname '*h265*' -prune -o -iname '*.mp4' -exec sh -c 'ffmpeg -i "{}" -c:v hevc_amf -c:a copy -quality quality -rc vbr_peak -min_qp_p 25 -max_qp_p 40 -min_qp_i 25 -max_qp_i 40 -profile_tier high -preanalysis true "{}_h265.mp4" && rename .mp4_h265 _h265 *.mp4 ; [ ! -d ./CONV_ED_ORIGIN_VIDEO ] && mkdir -p ./CONV_ED_ORIGIN_VIDEO ; mv "{}" ./CONV_ED_ORIGIN_VIDEO/ ' \;
預設圖片
Huán-Hsüān Lín (WordPressLocal)
文章: 19