vp9-night
是用了macos的 caffeinate
程序,用于防止电脑休眠的,执行软件编码还是挺吃CPU的,难免影响电脑使用体验,晚上执行的话就没什么影响了。ps --long | where name has "ffmpeg"
查看运行中的 ffmpeg
任务Source Code
def transcode [input_file: string codec: string ext: string = "webm"] { let output_dir = $nu.home-path | path join "Downloads/ffmpeg_out" mkdir $output_dir let base = ($input_file | path parse | get stem) # 获取不带扩展名的文件名 let output_file = ($output_dir | path join $"($base).($ext)") # 构造输出文件路径 ffmpeg -i $input_file -vcodec $codec $output_file # 执行转码}# TODO 这里其实可以优化一下,只处理非vp9编码的视频def vp9 [...input_file: string] { let input_files = (_find_media_paths ...$input_file) $input_files | par-each {|file| print $"Processing: ($file.name)"; transcode $file.name "libvpx-vp9"; }}# 睡前压一下视频,macos使用caffeinate避免睡眠alias vp9-night = caffeinate -i nu --config $nu.config-path -c "vp9 ./"# AV1压缩率要更好,但个人使用AV1编码速度还是慢于VP9def av1 [...input_file: string] { let input_files = (_find_media_paths ...$input_file) $input_files | par-each {|file| print $"Processing: ($file.name)"; transcode $file.name "libaom-av1"; }}
此功能图一乐,对比编码前后体积,偶尔会看到h264转码成vp9体积反而增加了的情况,不过就遇到两次。
Source Code
def trans_diff [input_file: string] { let output_file = $"~/Downloads/ffmpeg_out/($input_file | path parse | get stem).webm" # 检查输出文件是否存在 let output_path = ($output_file | path expand) if not ($output_path | path exists) { print $"❌ 输出文件不存在: ($output_path)" return } # 获取文件大小 let input_size = (ls $input_file | get size | first) let output_size = (ls $output_path | get size | first) let saved_size = ($input_size - $output_size) let size_ratio = (($output_size / $input_size) * 100 | math round -p 2) # 显示分析结果 let analysis_result = (va $input_file $output_path) # 展开显示每个编解码器组的详细信息 $analysis_result | transpose codec data | each { |row| print $"\n🎥 ($row.codec) 编解码器:" print ($row.data) } # 打印节省的大小信息 print $"\n💾 文件大小对比:" print $"💰 节省: ($saved_size)" print $"📊 转码后/原文件: ($size_ratio)%\n"}alias td = trans_diff
NuShell FFMpeg Utils