[{"data":1,"prerenderedAt":1405},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fimage-video-processing":3},{"doc":4,"prev":1370,"next":1377,"resolvedType":8,"readingMinutes":108,"audience":1383,"checklist":1387,"related":1391},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fimage-video-processing","图片与视频处理","ImageMagick、Sharp、视频转码、图片压缩与格式转换","article",null,"media-creation","媒体与创作","2026-02-27","i-carbon-media-library",{"type":15,"value":16,"toc":1347},"minimark",[17,20,24,47,50,54,57,75,79,388,392,395,411,753,756,759,817,820,923,927,1153,1156,1159,1181,1184,1201,1204,1208,1219,1223,1234,1238,1246,1249,1252,1255,1266,1270,1273,1287,1290,1310,1313,1343],[18,19,6],"h1",{"id":6},[21,22,23],"p",{},"这页适合作为“媒体素材处理入口”。可以把它简单理解成三类工具分工：",[25,26,27,35,41],"ul",{},[28,29,30,34],"li",{},[31,32,33],"strong",{},"ImageMagick","：命令行万能图片处理",[28,36,37,40],{},[31,38,39],{},"Sharp","：Node.js 项目里的高性能图片处理",[28,42,43,46],{},[31,44,45],{},"FFmpeg","：视频与音频处理主力",[21,48,49],{},"先分清自己是做图片、做视频，还是做批处理流程，再选工具会更顺。",[51,52,33],"h2",{"id":53},"imagemagick",[21,55,56],{},"强大的命令行图片处理工具。",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-powershell shiki shiki-themes github-light github-dark","scoop install imagemagick\n","powershell","",[65,66,67],"code",{"__ignoreMap":63},[68,69,72],"span",{"class":70,"line":71},"line",1,[68,73,61],{"class":74},"sVt8B",[76,77,78],"h3",{"id":78},"常用操作",[58,80,84],{"className":81,"code":82,"language":83,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","# 格式转换\nmagick input.png output.jpg\nmagick input.png output.webp\n\n# 调整大小\nmagick input.jpg -resize 800x600 output.jpg\nmagick input.jpg -resize 50% output.jpg\n\n# 批量转换\nmagick mogrify -format webp -quality 85 *.png\n\n# 裁剪\nmagick input.jpg -crop 400x300+100+50 output.jpg\n\n# 压缩质量\nmagick input.jpg -quality 80 output.jpg\n\n# 添加水印\nmagick input.jpg -gravity southeast -fill white \\\n  -pointsize 24 -annotate +10+10 \"DomiVault\" output.jpg\n\n# 拼接图片\nmagick input1.jpg input2.jpg +append horizontal.jpg   # 水平\nmagick input1.jpg input2.jpg -append vertical.jpg     # 垂直\n\n# 生成缩略图\nmagick input.jpg -thumbnail 200x200^ -gravity center -extent 200x200 thumb.jpg\n","bash",[65,85,86,92,106,116,123,129,146,160,165,171,197,202,208,223,228,234,248,253,259,281,301,306,312,332,350,355,361],{"__ignoreMap":63},[68,87,88],{"class":70,"line":71},[68,89,91],{"class":90},"sJ8bj","# 格式转换\n",[68,93,95,99,103],{"class":70,"line":94},2,[68,96,98],{"class":97},"sScJk","magick",[68,100,102],{"class":101},"sZZnC"," input.png",[68,104,105],{"class":101}," output.jpg\n",[68,107,109,111,113],{"class":70,"line":108},3,[68,110,98],{"class":97},[68,112,102],{"class":101},[68,114,115],{"class":101}," output.webp\n",[68,117,119],{"class":70,"line":118},4,[68,120,122],{"emptyLinePlaceholder":121},true,"\n",[68,124,126],{"class":70,"line":125},5,[68,127,128],{"class":90},"# 调整大小\n",[68,130,132,134,137,141,144],{"class":70,"line":131},6,[68,133,98],{"class":97},[68,135,136],{"class":101}," input.jpg",[68,138,140],{"class":139},"sj4cs"," -resize",[68,142,143],{"class":101}," 800x600",[68,145,105],{"class":101},[68,147,149,151,153,155,158],{"class":70,"line":148},7,[68,150,98],{"class":97},[68,152,136],{"class":101},[68,154,140],{"class":139},[68,156,157],{"class":101}," 50%",[68,159,105],{"class":101},[68,161,163],{"class":70,"line":162},8,[68,164,122],{"emptyLinePlaceholder":121},[68,166,168],{"class":70,"line":167},9,[68,169,170],{"class":90},"# 批量转换\n",[68,172,174,176,179,182,185,188,191,194],{"class":70,"line":173},10,[68,175,98],{"class":97},[68,177,178],{"class":101}," mogrify",[68,180,181],{"class":139}," -format",[68,183,184],{"class":101}," webp",[68,186,187],{"class":139}," -quality",[68,189,190],{"class":139}," 85",[68,192,193],{"class":139}," *",[68,195,196],{"class":101},".png\n",[68,198,200],{"class":70,"line":199},11,[68,201,122],{"emptyLinePlaceholder":121},[68,203,205],{"class":70,"line":204},12,[68,206,207],{"class":90},"# 裁剪\n",[68,209,211,213,215,218,221],{"class":70,"line":210},13,[68,212,98],{"class":97},[68,214,136],{"class":101},[68,216,217],{"class":139}," -crop",[68,219,220],{"class":101}," 400x300+100+50",[68,222,105],{"class":101},[68,224,226],{"class":70,"line":225},14,[68,227,122],{"emptyLinePlaceholder":121},[68,229,231],{"class":70,"line":230},15,[68,232,233],{"class":90},"# 压缩质量\n",[68,235,237,239,241,243,246],{"class":70,"line":236},16,[68,238,98],{"class":97},[68,240,136],{"class":101},[68,242,187],{"class":139},[68,244,245],{"class":139}," 80",[68,247,105],{"class":101},[68,249,251],{"class":70,"line":250},17,[68,252,122],{"emptyLinePlaceholder":121},[68,254,256],{"class":70,"line":255},18,[68,257,258],{"class":90},"# 添加水印\n",[68,260,262,264,266,269,272,275,278],{"class":70,"line":261},19,[68,263,98],{"class":97},[68,265,136],{"class":101},[68,267,268],{"class":139}," -gravity",[68,270,271],{"class":101}," southeast",[68,273,274],{"class":139}," -fill",[68,276,277],{"class":101}," white",[68,279,280],{"class":139}," \\\n",[68,282,284,287,290,293,296,299],{"class":70,"line":283},20,[68,285,286],{"class":139},"  -pointsize",[68,288,289],{"class":139}," 24",[68,291,292],{"class":139}," -annotate",[68,294,295],{"class":101}," +10+10",[68,297,298],{"class":101}," \"DomiVault\"",[68,300,105],{"class":101},[68,302,304],{"class":70,"line":303},21,[68,305,122],{"emptyLinePlaceholder":121},[68,307,309],{"class":70,"line":308},22,[68,310,311],{"class":90},"# 拼接图片\n",[68,313,315,317,320,323,326,329],{"class":70,"line":314},23,[68,316,98],{"class":97},[68,318,319],{"class":101}," input1.jpg",[68,321,322],{"class":101}," input2.jpg",[68,324,325],{"class":101}," +append",[68,327,328],{"class":101}," horizontal.jpg",[68,330,331],{"class":90},"   # 水平\n",[68,333,335,337,339,341,344,347],{"class":70,"line":334},24,[68,336,98],{"class":97},[68,338,319],{"class":101},[68,340,322],{"class":101},[68,342,343],{"class":139}," -append",[68,345,346],{"class":101}," vertical.jpg",[68,348,349],{"class":90},"     # 垂直\n",[68,351,353],{"class":70,"line":352},25,[68,354,122],{"emptyLinePlaceholder":121},[68,356,358],{"class":70,"line":357},26,[68,359,360],{"class":90},"# 生成缩略图\n",[68,362,364,366,368,371,374,376,379,382,385],{"class":70,"line":363},27,[68,365,98],{"class":97},[68,367,136],{"class":101},[68,369,370],{"class":139}," -thumbnail",[68,372,373],{"class":101}," 200x200^",[68,375,268],{"class":139},[68,377,378],{"class":101}," center",[68,380,381],{"class":139}," -extent",[68,383,384],{"class":101}," 200x200",[68,386,387],{"class":101}," thumb.jpg\n",[51,389,391],{"id":390},"sharpnodejs","Sharp（Node.js）",[21,393,394],{},"高性能图片处理库。",[58,396,398],{"className":81,"code":397,"language":83,"meta":63,"style":63},"pnpm add sharp\n",[65,399,400],{"__ignoreMap":63},[68,401,402,405,408],{"class":70,"line":71},[68,403,404],{"class":97},"pnpm",[68,406,407],{"class":101}," add",[68,409,410],{"class":101}," sharp\n",[58,412,416],{"className":413,"code":414,"language":415,"meta":63,"style":63},"language-javascript shiki shiki-themes github-light github-dark","import sharp from \"sharp\";\n\n\u002F\u002F 调整大小 + 转 WebP\nawait sharp(\"input.jpg\")\n  .resize(800, 600, { fit: \"cover\" })\n  .webp({ quality: 80 })\n  .toFile(\"output.webp\");\n\n\u002F\u002F 批量处理\nimport { readdir } from \"fs\u002Fpromises\";\n\nconst files = await readdir(\".\u002Fimages\");\nfor (const file of files.filter((f) => f.endsWith(\".png\"))) {\n  await sharp(`.\u002Fimages\u002F${file}`)\n    .resize(1200)\n    .webp({ quality: 85 })\n    .toFile(`.\u002Foutput\u002F${file.replace(\".png\", \".webp\")}`);\n}\n\n\u002F\u002F 获取图片信息\nconst info = await sharp(\"input.jpg\").metadata();\nconsole.log(info.width, info.height, info.format);\n","javascript",[65,417,418,436,440,445,462,490,505,520,524,529,543,547,571,620,640,654,667,702,707,711,716,742],{"__ignoreMap":63},[68,419,420,424,427,430,433],{"class":70,"line":71},[68,421,423],{"class":422},"szBVR","import",[68,425,426],{"class":74}," sharp ",[68,428,429],{"class":422},"from",[68,431,432],{"class":101}," \"sharp\"",[68,434,435],{"class":74},";\n",[68,437,438],{"class":70,"line":94},[68,439,122],{"emptyLinePlaceholder":121},[68,441,442],{"class":70,"line":108},[68,443,444],{"class":90},"\u002F\u002F 调整大小 + 转 WebP\n",[68,446,447,450,453,456,459],{"class":70,"line":118},[68,448,449],{"class":422},"await",[68,451,452],{"class":97}," sharp",[68,454,455],{"class":74},"(",[68,457,458],{"class":101},"\"input.jpg\"",[68,460,461],{"class":74},")\n",[68,463,464,467,470,472,475,478,481,484,487],{"class":70,"line":125},[68,465,466],{"class":74},"  .",[68,468,469],{"class":97},"resize",[68,471,455],{"class":74},[68,473,474],{"class":139},"800",[68,476,477],{"class":74},", ",[68,479,480],{"class":139},"600",[68,482,483],{"class":74},", { fit: ",[68,485,486],{"class":101},"\"cover\"",[68,488,489],{"class":74}," })\n",[68,491,492,494,497,500,503],{"class":70,"line":131},[68,493,466],{"class":74},[68,495,496],{"class":97},"webp",[68,498,499],{"class":74},"({ quality: ",[68,501,502],{"class":139},"80",[68,504,489],{"class":74},[68,506,507,509,512,514,517],{"class":70,"line":148},[68,508,466],{"class":74},[68,510,511],{"class":97},"toFile",[68,513,455],{"class":74},[68,515,516],{"class":101},"\"output.webp\"",[68,518,519],{"class":74},");\n",[68,521,522],{"class":70,"line":162},[68,523,122],{"emptyLinePlaceholder":121},[68,525,526],{"class":70,"line":167},[68,527,528],{"class":90},"\u002F\u002F 批量处理\n",[68,530,531,533,536,538,541],{"class":70,"line":173},[68,532,423],{"class":422},[68,534,535],{"class":74}," { readdir } ",[68,537,429],{"class":422},[68,539,540],{"class":101}," \"fs\u002Fpromises\"",[68,542,435],{"class":74},[68,544,545],{"class":70,"line":199},[68,546,122],{"emptyLinePlaceholder":121},[68,548,549,552,555,558,561,564,566,569],{"class":70,"line":204},[68,550,551],{"class":422},"const",[68,553,554],{"class":139}," files",[68,556,557],{"class":422}," =",[68,559,560],{"class":422}," await",[68,562,563],{"class":97}," readdir",[68,565,455],{"class":74},[68,567,568],{"class":101},"\".\u002Fimages\"",[68,570,519],{"class":74},[68,572,573,576,579,581,584,587,590,593,596,600,603,606,609,612,614,617],{"class":70,"line":210},[68,574,575],{"class":422},"for",[68,577,578],{"class":74}," (",[68,580,551],{"class":422},[68,582,583],{"class":139}," file",[68,585,586],{"class":422}," of",[68,588,589],{"class":74}," files.",[68,591,592],{"class":97},"filter",[68,594,595],{"class":74},"((",[68,597,599],{"class":598},"s4XuR","f",[68,601,602],{"class":74},") ",[68,604,605],{"class":422},"=>",[68,607,608],{"class":74}," f.",[68,610,611],{"class":97},"endsWith",[68,613,455],{"class":74},[68,615,616],{"class":101},"\".png\"",[68,618,619],{"class":74},"))) {\n",[68,621,622,625,627,629,632,635,638],{"class":70,"line":225},[68,623,624],{"class":422},"  await",[68,626,452],{"class":97},[68,628,455],{"class":74},[68,630,631],{"class":101},"`.\u002Fimages\u002F${",[68,633,634],{"class":74},"file",[68,636,637],{"class":101},"}`",[68,639,461],{"class":74},[68,641,642,645,647,649,652],{"class":70,"line":230},[68,643,644],{"class":74},"    .",[68,646,469],{"class":97},[68,648,455],{"class":74},[68,650,651],{"class":139},"1200",[68,653,461],{"class":74},[68,655,656,658,660,662,665],{"class":70,"line":236},[68,657,644],{"class":74},[68,659,496],{"class":97},[68,661,499],{"class":74},[68,663,664],{"class":139},"85",[68,666,489],{"class":74},[68,668,669,671,673,675,678,680,683,686,688,690,692,695,698,700],{"class":70,"line":250},[68,670,644],{"class":74},[68,672,511],{"class":97},[68,674,455],{"class":74},[68,676,677],{"class":101},"`.\u002Foutput\u002F${",[68,679,634],{"class":74},[68,681,682],{"class":101},".",[68,684,685],{"class":97},"replace",[68,687,455],{"class":101},[68,689,616],{"class":101},[68,691,477],{"class":101},[68,693,694],{"class":101},"\".webp\"",[68,696,697],{"class":101},")",[68,699,637],{"class":101},[68,701,519],{"class":74},[68,703,704],{"class":70,"line":255},[68,705,706],{"class":74},"}\n",[68,708,709],{"class":70,"line":261},[68,710,122],{"emptyLinePlaceholder":121},[68,712,713],{"class":70,"line":283},[68,714,715],{"class":90},"\u002F\u002F 获取图片信息\n",[68,717,718,720,723,725,727,729,731,733,736,739],{"class":70,"line":303},[68,719,551],{"class":422},[68,721,722],{"class":139}," info",[68,724,557],{"class":422},[68,726,560],{"class":422},[68,728,452],{"class":97},[68,730,455],{"class":74},[68,732,458],{"class":101},[68,734,735],{"class":74},").",[68,737,738],{"class":97},"metadata",[68,740,741],{"class":74},"();\n",[68,743,744,747,750],{"class":70,"line":308},[68,745,746],{"class":74},"console.",[68,748,749],{"class":97},"log",[68,751,752],{"class":74},"(info.width, info.height, info.format);\n",[51,754,755],{"id":755},"图片压缩工具",[76,757,758],{"id":758},"在线工具",[760,761,762,775],"table",{},[763,764,765],"thead",{},[766,767,768,772],"tr",{},[769,770,771],"th",{},"工具",[769,773,774],{},"说明",[776,777,778,793,805],"tbody",{},[766,779,780,790],{},[781,782,783],"td",{},[784,785,789],"a",{"href":786,"rel":787},"https:\u002F\u002Ftinypng.com\u002F",[788],"nofollow","TinyPNG",[781,791,792],{},"PNG\u002FJPEG 压缩",[766,794,795,802],{},[781,796,797],{},[784,798,801],{"href":799,"rel":800},"https:\u002F\u002Fsquoosh.app\u002F",[788],"Squoosh",[781,803,804],{},"Google 出品，多格式",[766,806,807,814],{},[781,808,809],{},[784,810,813],{"href":811,"rel":812},"https:\u002F\u002Fjakearchibald.github.io\u002Fsvgomg\u002F",[788],"SVGOMG",[781,815,816],{},"SVG 优化",[76,818,819],{"id":819},"命令行",[58,821,823],{"className":81,"code":822,"language":83,"meta":63,"style":63},"# pngquant（PNG 压缩）\nscoop install pngquant\npngquant --quality=65-80 --output output.png input.png\n\n# oxipng（PNG 无损优化）\nscoop install oxipng\noxipng -o 4 input.png\n\n# cwebp（WebP 转换）\nscoop install libwebp\ncwebp -q 80 input.png -o output.webp\n",[65,824,825,830,841,858,862,867,876,889,893,898,907],{"__ignoreMap":63},[68,826,827],{"class":70,"line":71},[68,828,829],{"class":90},"# pngquant（PNG 压缩）\n",[68,831,832,835,838],{"class":70,"line":94},[68,833,834],{"class":97},"scoop",[68,836,837],{"class":101}," install",[68,839,840],{"class":101}," pngquant\n",[68,842,843,846,849,852,855],{"class":70,"line":108},[68,844,845],{"class":97},"pngquant",[68,847,848],{"class":139}," --quality=65-80",[68,850,851],{"class":139}," --output",[68,853,854],{"class":101}," output.png",[68,856,857],{"class":101}," input.png\n",[68,859,860],{"class":70,"line":118},[68,861,122],{"emptyLinePlaceholder":121},[68,863,864],{"class":70,"line":125},[68,865,866],{"class":90},"# oxipng（PNG 无损优化）\n",[68,868,869,871,873],{"class":70,"line":131},[68,870,834],{"class":97},[68,872,837],{"class":101},[68,874,875],{"class":101}," oxipng\n",[68,877,878,881,884,887],{"class":70,"line":148},[68,879,880],{"class":97},"oxipng",[68,882,883],{"class":139}," -o",[68,885,886],{"class":139}," 4",[68,888,857],{"class":101},[68,890,891],{"class":70,"line":162},[68,892,122],{"emptyLinePlaceholder":121},[68,894,895],{"class":70,"line":167},[68,896,897],{"class":90},"# cwebp（WebP 转换）\n",[68,899,900,902,904],{"class":70,"line":173},[68,901,834],{"class":97},[68,903,837],{"class":101},[68,905,906],{"class":101}," libwebp\n",[68,908,909,912,915,917,919,921],{"class":70,"line":199},[68,910,911],{"class":97},"cwebp",[68,913,914],{"class":139}," -q",[68,916,245],{"class":139},[68,918,102],{"class":101},[68,920,883],{"class":139},[68,922,115],{"class":101},[51,924,926],{"id":925},"ffmpeg-视频处理补充","FFmpeg 视频处理补充",[58,928,930],{"className":81,"code":929,"language":83,"meta":63,"style":63},"# 提取音频\nffmpeg -i video.mp4 -vn -acodec libmp3lame audio.mp3\n\n# 视频转 GIF\nffmpeg -i video.mp4 -vf \"fps=15,scale=480:-1\" -loop 0 output.gif\n\n# 高质量 GIF（两步法）\nffmpeg -i video.mp4 -vf \"fps=15,scale=480:-1:flags=lanczos,palettegen\" palette.png\nffmpeg -i video.mp4 -i palette.png -lavfi \"fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse\" output.gif\n\n# 截取片段\nffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:30 -c copy clip.mp4\n\n# 合并视频\n# 先创建 list.txt：\n# file 'part1.mp4'\n# file 'part2.mp4'\nffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4\n\n# 添加字幕\nffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4\n",[65,931,932,937,960,964,969,992,996,1001,1017,1038,1042,1047,1077,1081,1086,1091,1096,1101,1128,1132,1137],{"__ignoreMap":63},[68,933,934],{"class":70,"line":71},[68,935,936],{"class":90},"# 提取音频\n",[68,938,939,942,945,948,951,954,957],{"class":70,"line":94},[68,940,941],{"class":97},"ffmpeg",[68,943,944],{"class":139}," -i",[68,946,947],{"class":101}," video.mp4",[68,949,950],{"class":139}," -vn",[68,952,953],{"class":139}," -acodec",[68,955,956],{"class":101}," libmp3lame",[68,958,959],{"class":101}," audio.mp3\n",[68,961,962],{"class":70,"line":108},[68,963,122],{"emptyLinePlaceholder":121},[68,965,966],{"class":70,"line":118},[68,967,968],{"class":90},"# 视频转 GIF\n",[68,970,971,973,975,977,980,983,986,989],{"class":70,"line":125},[68,972,941],{"class":97},[68,974,944],{"class":139},[68,976,947],{"class":101},[68,978,979],{"class":139}," -vf",[68,981,982],{"class":101}," \"fps=15,scale=480:-1\"",[68,984,985],{"class":139}," -loop",[68,987,988],{"class":139}," 0",[68,990,991],{"class":101}," output.gif\n",[68,993,994],{"class":70,"line":131},[68,995,122],{"emptyLinePlaceholder":121},[68,997,998],{"class":70,"line":148},[68,999,1000],{"class":90},"# 高质量 GIF（两步法）\n",[68,1002,1003,1005,1007,1009,1011,1014],{"class":70,"line":162},[68,1004,941],{"class":97},[68,1006,944],{"class":139},[68,1008,947],{"class":101},[68,1010,979],{"class":139},[68,1012,1013],{"class":101}," \"fps=15,scale=480:-1:flags=lanczos,palettegen\"",[68,1015,1016],{"class":101}," palette.png\n",[68,1018,1019,1021,1023,1025,1027,1030,1033,1036],{"class":70,"line":167},[68,1020,941],{"class":97},[68,1022,944],{"class":139},[68,1024,947],{"class":101},[68,1026,944],{"class":139},[68,1028,1029],{"class":101}," palette.png",[68,1031,1032],{"class":139}," -lavfi",[68,1034,1035],{"class":101}," \"fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse\"",[68,1037,991],{"class":101},[68,1039,1040],{"class":70,"line":173},[68,1041,122],{"emptyLinePlaceholder":121},[68,1043,1044],{"class":70,"line":199},[68,1045,1046],{"class":90},"# 截取片段\n",[68,1048,1049,1051,1053,1056,1059,1062,1065,1068,1071,1074],{"class":70,"line":204},[68,1050,941],{"class":97},[68,1052,944],{"class":139},[68,1054,1055],{"class":101}," input.mp4",[68,1057,1058],{"class":139}," -ss",[68,1060,1061],{"class":101}," 00:01:00",[68,1063,1064],{"class":139}," -t",[68,1066,1067],{"class":101}," 00:00:30",[68,1069,1070],{"class":139}," -c",[68,1072,1073],{"class":101}," copy",[68,1075,1076],{"class":101}," clip.mp4\n",[68,1078,1079],{"class":70,"line":210},[68,1080,122],{"emptyLinePlaceholder":121},[68,1082,1083],{"class":70,"line":225},[68,1084,1085],{"class":90},"# 合并视频\n",[68,1087,1088],{"class":70,"line":230},[68,1089,1090],{"class":90},"# 先创建 list.txt：\n",[68,1092,1093],{"class":70,"line":236},[68,1094,1095],{"class":90},"# file 'part1.mp4'\n",[68,1097,1098],{"class":70,"line":250},[68,1099,1100],{"class":90},"# file 'part2.mp4'\n",[68,1102,1103,1105,1108,1111,1114,1116,1118,1121,1123,1125],{"class":70,"line":255},[68,1104,941],{"class":97},[68,1106,1107],{"class":139}," -f",[68,1109,1110],{"class":101}," concat",[68,1112,1113],{"class":139}," -safe",[68,1115,988],{"class":139},[68,1117,944],{"class":139},[68,1119,1120],{"class":101}," list.txt",[68,1122,1070],{"class":139},[68,1124,1073],{"class":101},[68,1126,1127],{"class":101}," merged.mp4\n",[68,1129,1130],{"class":70,"line":261},[68,1131,122],{"emptyLinePlaceholder":121},[68,1133,1134],{"class":70,"line":283},[68,1135,1136],{"class":90},"# 添加字幕\n",[68,1138,1139,1141,1143,1145,1147,1150],{"class":70,"line":303},[68,1140,941],{"class":97},[68,1142,944],{"class":139},[68,1144,1055],{"class":101},[68,1146,979],{"class":139},[68,1148,1149],{"class":101}," subtitles=sub.srt",[68,1151,1152],{"class":101}," output.mp4\n",[51,1154,1155],{"id":1155},"推荐使用顺序",[21,1157,1158],{},"常见工作流通常是：",[1160,1161,1162,1165,1173,1178],"ol",{},[28,1163,1164],{},"先确认素材格式、尺寸和用途",[28,1166,1167,1168,1170,1171],{},"图片批处理优先用 ",[65,1169,33],{}," 或 ",[65,1172,39],{},[28,1174,1175,1176],{},"视频抽轨、裁剪、转码优先用 ",[65,1177,45],{},[28,1179,1180],{},"最后再做压缩和格式分发",[21,1182,1183],{},"如果是网站资源优化，优先考虑：",[25,1185,1186,1195,1198],{},[28,1187,1188,1189,1191,1192],{},"图片转 ",[65,1190,496],{}," \u002F ",[65,1193,1194],{},"avif",[28,1196,1197],{},"SVG 做无损清理",[28,1199,1200],{},"视频保留兼容性优先的输出格式",[51,1202,1203],{"id":1203},"工具怎么选",[76,1205,1207],{"id":1206},"什么时候用-imagemagick","什么时候用 ImageMagick",[25,1209,1210,1213,1216],{},[28,1211,1212],{},"临时命令行处理",[28,1214,1215],{},"批量转格式",[28,1217,1218],{},"水印、拼接、缩略图",[76,1220,1222],{"id":1221},"什么时候用-sharp","什么时候用 Sharp",[25,1224,1225,1228,1231],{},[28,1226,1227],{},"在 Node.js 项目里做服务端图片处理",[28,1229,1230],{},"上传后自动生成多尺寸图片",[28,1232,1233],{},"静态站和 CMS 的图片管线",[76,1235,1237],{"id":1236},"什么时候直接去-ffmpeg","什么时候直接去 FFmpeg",[25,1239,1240,1243],{},[28,1241,1242],{},"GIF、视频片段、字幕、音轨",[28,1244,1245],{},"视频截图、抽音频、拼接、转码",[51,1247,1248],{"id":1248},"常见问题",[76,1250,1251],{"id":1251},"压缩后看起来糊了",[21,1253,1254],{},"通常是质量参数或尺寸策略过激。建议先明确：",[25,1256,1257,1260,1263],{},[28,1258,1259],{},"是要缩尺寸，还是缩质量",[28,1261,1262],{},"是否要保透明通道",[28,1264,1265],{},"网站预览图和原图是否应该分开处理",[76,1267,1269],{"id":1268},"想批量处理但命令越来越难维护","想批量处理，但命令越来越难维护",[21,1271,1272],{},"当命令开始稳定重复时，建议：",[25,1274,1275,1278,1284],{},[28,1276,1277],{},"Shell \u002F PowerShell 封装成脚本",[28,1279,1280,1281,1283],{},"Node.js 场景改为 ",[65,1282,39],{}," 批处理脚本",[28,1285,1286],{},"视频批量任务写成固定模板命令",[51,1288,1289],{"id":1289},"延伸阅读",[25,1291,1292,1298,1304],{},[28,1293,1294],{},[784,1295,1297],{"href":1296},"\u002Fdocs\u002Fffmpeg-guide","FFmpeg 完整指南",[28,1299,1300],{},[784,1301,1303],{"href":1302},"\u002Fdocs\u002Fimage-tools","图片与截图工具",[28,1305,1306],{},[784,1307,1309],{"href":1308},"\u002Fdocs\u002Fvideo-download","视频下载与处理",[51,1311,1312],{"id":1312},"参考链接",[25,1314,1315,1322,1329,1335],{},[28,1316,1317,1321],{},[784,1318,33],{"href":1319,"rel":1320},"https:\u002F\u002Fimagemagick.org\u002F",[788]," — 官网",[28,1323,1324,1328],{},[784,1325,39],{"href":1326,"rel":1327},"https:\u002F\u002Fsharp.pixelplumbing.com\u002F",[788]," — Node.js 图片处理",[28,1330,1331,1334],{},[784,1332,801],{"href":799,"rel":1333},[788]," — 在线压缩",[28,1336,1337,1342],{},[784,1338,1341],{"href":1339,"rel":1340},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki",[788],"FFmpeg Wiki"," — 使用指南",[1344,1345,1346],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":63,"searchDepth":94,"depth":94,"links":1348},[1349,1352,1353,1357,1358,1359,1364,1368,1369],{"id":53,"depth":94,"text":33,"children":1350},[1351],{"id":78,"depth":108,"text":78},{"id":390,"depth":94,"text":391},{"id":755,"depth":94,"text":755,"children":1354},[1355,1356],{"id":758,"depth":108,"text":758},{"id":819,"depth":108,"text":819},{"id":925,"depth":94,"text":926},{"id":1155,"depth":94,"text":1155},{"id":1203,"depth":94,"text":1203,"children":1360},[1361,1362,1363],{"id":1206,"depth":108,"text":1207},{"id":1221,"depth":108,"text":1222},{"id":1236,"depth":108,"text":1237},{"id":1248,"depth":94,"text":1248,"children":1365},[1366,1367],{"id":1251,"depth":108,"text":1251},{"id":1268,"depth":108,"text":1269},{"id":1289,"depth":94,"text":1289},{"id":1312,"depth":94,"text":1312},{"path":1371,"title":1372,"description":1373,"docType":8,"resourceKind":9,"categoryId":1374,"categoryLabel":1375,"updatedAt":12,"publishedAt":12,"icon":1376},"\u002Fdocs\u002Fdatabase-basics","数据库基础速查","SQLite、PostgreSQL、MySQL 常用操作、SQL 语法与 GUI 工具推荐","programming-languages","编程语言","i-carbon-application",{"path":1378,"title":1379,"description":1380,"docType":8,"resourceKind":9,"categoryId":1381,"categoryLabel":758,"updatedAt":12,"publishedAt":12,"icon":1382},"\u002Fdocs\u002Fweb-scraping","网页抓取与自动化","Puppeteer、Playwright、curl 抓取技巧与反爬应对","online-tools","i-carbon-tool-box",[1384,1385,1386],"希望把零散经验整理成长期可复用工作流的人","需要处理图像、视频、音频或创作流水线的人","希望阅读时顺手建立自己的操作清单或收藏体系的人",[1388,1389,1390],"先浏览标题、摘要和目录，带着问题阅读会更高效","确认素材路径、导出格式和磁盘空间是否满足当前任务","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[1392,1396,1398,1402],{"path":1393,"title":1394,"description":1395,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Flive-recording","直播录制工具","抖音、TikTok、YouTube、Nico、B站等平台直播录制工具汇总",{"path":1296,"title":1297,"description":1397,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"FFmpeg 安装、常用命令、视频转码、音频处理、字幕合并与批量操作",{"path":1399,"title":1400,"description":1401,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fyt-dlp-guide","yt-dlp 视频下载指南","yt-dlp 安装配置、常用命令、格式选择、字幕下载与批量操作",{"path":1308,"title":1309,"description":1403,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1404,"publishedAt":1404,"icon":13},"YouTube、抖音、TikTok、Nico 等平台视频下载工具及 FFmpeg 编码指南","2026-02-07",1776215713064]