@optima-chat/optima-agent 0.9.8 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/.claude/settings.local.json +166 -0
  2. package/.claude/skills/.kb-skills-managed.json +9 -9
  3. package/.claude/skills/ads/SKILL.md +244 -244
  4. package/.claude/skills/ads/template/campaign/CREATIVES.md +18 -18
  5. package/.claude/skills/ads/template/campaign/NOTES.md +10 -10
  6. package/.claude/skills/ads/template/campaign/STRATEGY.md +29 -29
  7. package/.claude/skills/ads/template/user/ADS.md +29 -29
  8. package/.claude/skills/ads/template/user/LEARNINGS.md +15 -15
  9. package/.claude/skills/ads/template/user/PROGRESS.md +20 -20
  10. package/.claude/skills/ads/template/user/README.md +25 -25
  11. package/.claude/skills/ads/template/user/assets/.gitignore +2 -2
  12. package/.claude/skills/bi/SKILL.md +131 -131
  13. package/.claude/skills/browser/SKILL.md +201 -201
  14. package/.claude/skills/channels/SKILL.md +188 -188
  15. package/.claude/skills/collection/SKILL.md +88 -88
  16. package/.claude/skills/douyin/SKILL.md +408 -408
  17. package/.claude/skills/ffmpeg/SKILL.md +164 -164
  18. package/.claude/skills/gen/SKILL.md +279 -279
  19. package/.claude/skills/growth/SKILL.md +90 -90
  20. package/.claude/skills/growth/template/ACCOUNTS.md +14 -14
  21. package/.claude/skills/growth/template/CALENDAR.md +7 -7
  22. package/.claude/skills/growth/template/COMMENTS.md +7 -7
  23. package/.claude/skills/growth/template/GROWTH.md +37 -37
  24. package/.claude/skills/growth/template/PROGRESS.md +4 -4
  25. package/.claude/skills/growth/template/README.md +20 -20
  26. package/.claude/skills/growth/template/TOPICS.md +7 -7
  27. package/.claude/skills/homepage/SKILL.md +177 -177
  28. package/.claude/skills/i18n/SKILL.md +517 -517
  29. package/.claude/skills/ingesting-sources/SKILL.md +94 -94
  30. package/.claude/skills/initializing-kb/SKILL.md +117 -117
  31. package/.claude/skills/instagram/SKILL.md +321 -321
  32. package/.claude/skills/inventory/SKILL.md +328 -328
  33. package/.claude/skills/kol-outreach/SKILL.md +232 -232
  34. package/.claude/skills/kol-outreach/template/campaign/CONFIG.md +60 -60
  35. package/.claude/skills/kol-outreach/template/campaign/KOLS.md +6 -6
  36. package/.claude/skills/kol-outreach/template/campaign/PROGRESS.md +3 -3
  37. package/.claude/skills/kol-outreach/template/campaign/TEMPLATES.md +88 -88
  38. package/.claude/skills/kol-outreach/template/merchant/BRAND.md +36 -36
  39. package/.claude/skills/kol-outreach/template/merchant/CAMPAIGNS.md +6 -6
  40. package/.claude/skills/kol-outreach/template/merchant/MERCHANT_LIMITS.md +16 -16
  41. package/.claude/skills/kol-outreach/template/merchant/PROGRESS.md +4 -4
  42. package/.claude/skills/kol-outreach/template/merchant/README.md +20 -20
  43. package/.claude/skills/linting-the-wiki/SKILL.md +68 -68
  44. package/.claude/skills/logistics/SKILL.md +180 -180
  45. package/.claude/skills/markdown-pdf/SKILL.md +72 -72
  46. package/.claude/skills/merchant/SKILL.md +110 -110
  47. package/.claude/skills/multigrid-poster/SKILL.md +192 -192
  48. package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -34
  49. package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -43
  50. package/.claude/skills/multigrid-poster/scripts/compose.py +116 -116
  51. package/.claude/skills/order/SKILL.md +452 -452
  52. package/.claude/skills/product/SKILL.md +379 -379
  53. package/.claude/skills/product-page/SKILL.md +106 -106
  54. package/.claude/skills/querying-the-wiki/SKILL.md +59 -59
  55. package/.claude/skills/reddit/SKILL.md +277 -277
  56. package/.claude/skills/review/SKILL.md +321 -321
  57. package/.claude/skills/scout/SKILL.md +575 -462
  58. package/.claude/skills/sentinel/SKILL.md +281 -281
  59. package/.claude/skills/shein/SKILL.md +246 -246
  60. package/.claude/skills/shipping/SKILL.md +200 -200
  61. package/.claude/skills/shop-content/SKILL.md +101 -101
  62. package/.claude/skills/shopify/SKILL.md +282 -282
  63. package/.claude/skills/skillify/SKILL.md +114 -114
  64. package/.claude/skills/taobao/SKILL.md +238 -238
  65. package/.claude/skills/tiktok/SKILL.md +381 -381
  66. package/.claude/skills/twitter/SKILL.md +302 -302
  67. package/.claude/skills/updating-related-pages/SKILL.md +65 -65
  68. package/.claude/skills/video-edit/SKILL.md +143 -143
  69. package/.claude/skills/video-gen/SKILL.md +548 -548
  70. package/.claude/skills/video-gen/templates/INDEX.md +78 -78
  71. package/.claude/skills/video-gen/templates/before-after-beauty.md +183 -183
  72. package/.claude/skills/video-gen/templates/drama-fmcg.md +183 -183
  73. package/.claude/skills/video-gen/templates/kol-reaction-food.md +193 -193
  74. package/.claude/skills/video-gen/templates/multi-point-apparel.md +185 -185
  75. package/.claude/skills/video-gen/templates/pain-solution-home.md +184 -184
  76. package/.claude/skills/video-gen/templates/pdp-360-showcase.md +189 -189
  77. package/.claude/skills/video-gen/templates/pdp-feature-highlight.md +182 -182
  78. package/.claude/skills/video-gen/templates/scene-digital.md +183 -183
  79. package/.claude/skills/wechat/SKILL.md +174 -174
  80. package/.claude/skills/xhs/SKILL.md +170 -170
  81. package/README.md +276 -276
  82. package/dist/bin/bi-cli.js +0 -0
  83. package/dist/bin/browser-cli.js +0 -0
  84. package/dist/bin/comfy.d.ts +3 -0
  85. package/dist/bin/comfy.d.ts.map +1 -0
  86. package/dist/bin/comfy.js +3 -0
  87. package/dist/bin/comfy.js.map +1 -0
  88. package/dist/bin/commerce.js +0 -0
  89. package/dist/bin/gen.js +0 -0
  90. package/dist/bin/google-ads.js +0 -0
  91. package/dist/bin/growth.d.ts +3 -0
  92. package/dist/bin/growth.d.ts.map +1 -0
  93. package/dist/bin/growth.js +3 -0
  94. package/dist/bin/growth.js.map +1 -0
  95. package/dist/bin/logistics.js +0 -0
  96. package/dist/bin/optima.js +26 -26
  97. package/dist/bin/scout.js +0 -0
  98. package/dist/bin/sentinel.js +0 -0
  99. package/dist/bin/serve.js +23 -23
  100. package/dist/bin/shopify.js +0 -0
  101. package/dist/src/agent.js +4 -4
  102. package/dist/src/hooks-loader.d.ts +6 -0
  103. package/dist/src/hooks-loader.d.ts.map +1 -0
  104. package/dist/src/hooks-loader.js +215 -0
  105. package/dist/src/hooks-loader.js.map +1 -0
  106. package/dist/src/system-prompt.d.ts.map +1 -1
  107. package/dist/src/system-prompt.js +173 -169
  108. package/dist/src/system-prompt.js.map +1 -1
  109. package/dist/src/tools/memory.js +10 -10
  110. package/dist/src/ui/App.d.ts +6 -0
  111. package/dist/src/ui/App.d.ts.map +1 -0
  112. package/dist/src/ui/App.js +164 -0
  113. package/dist/src/ui/App.js.map +1 -0
  114. package/dist/src/ui/components/Composer.d.ts +10 -0
  115. package/dist/src/ui/components/Composer.d.ts.map +1 -0
  116. package/dist/src/ui/components/Composer.js +13 -0
  117. package/dist/src/ui/components/Composer.js.map +1 -0
  118. package/dist/src/ui/components/Header.d.ts +7 -0
  119. package/dist/src/ui/components/Header.d.ts.map +1 -0
  120. package/dist/src/ui/components/Header.js +7 -0
  121. package/dist/src/ui/components/Header.js.map +1 -0
  122. package/dist/src/ui/components/Message.d.ts +12 -0
  123. package/dist/src/ui/components/Message.d.ts.map +1 -0
  124. package/dist/src/ui/components/Message.js +21 -0
  125. package/dist/src/ui/components/Message.js.map +1 -0
  126. package/dist/src/ui/components/MessageList.d.ts +9 -0
  127. package/dist/src/ui/components/MessageList.d.ts.map +1 -0
  128. package/dist/src/ui/components/MessageList.js +18 -0
  129. package/dist/src/ui/components/MessageList.js.map +1 -0
  130. package/dist/src/ui/components/Spinner.d.ts +6 -0
  131. package/dist/src/ui/components/Spinner.d.ts.map +1 -0
  132. package/dist/src/ui/components/Spinner.js +7 -0
  133. package/dist/src/ui/components/Spinner.js.map +1 -0
  134. package/dist/src/ui/components/StatusBar.d.ts +11 -0
  135. package/dist/src/ui/components/StatusBar.d.ts.map +1 -0
  136. package/dist/src/ui/components/StatusBar.js +7 -0
  137. package/dist/src/ui/components/StatusBar.js.map +1 -0
  138. package/dist/src/ui/components/index.d.ts +7 -0
  139. package/dist/src/ui/components/index.d.ts.map +1 -0
  140. package/dist/src/ui/components/index.js +7 -0
  141. package/dist/src/ui/components/index.js.map +1 -0
  142. package/dist/src/ui/headless.js +7 -7
  143. package/dist/src/validation/error-formatter.d.ts +21 -0
  144. package/dist/src/validation/error-formatter.d.ts.map +1 -0
  145. package/dist/src/validation/error-formatter.js +98 -0
  146. package/dist/src/validation/error-formatter.js.map +1 -0
  147. package/dist/src/validation/index.d.ts +10 -0
  148. package/dist/src/validation/index.d.ts.map +1 -0
  149. package/dist/src/validation/index.js +10 -0
  150. package/dist/src/validation/index.js.map +1 -0
  151. package/dist/src/validation/json-validator.d.ts +25 -0
  152. package/dist/src/validation/json-validator.d.ts.map +1 -0
  153. package/dist/src/validation/json-validator.js +173 -0
  154. package/dist/src/validation/json-validator.js.map +1 -0
  155. package/dist/src/validation/schema.d.ts +353 -0
  156. package/dist/src/validation/schema.d.ts.map +1 -0
  157. package/dist/src/validation/schema.js +57 -0
  158. package/dist/src/validation/schema.js.map +1 -0
  159. package/dist/src/validation/suggestions.d.ts +25 -0
  160. package/dist/src/validation/suggestions.d.ts.map +1 -0
  161. package/dist/src/validation/suggestions.js +144 -0
  162. package/dist/src/validation/suggestions.js.map +1 -0
  163. package/dist/src/validation/types.d.ts +40 -0
  164. package/dist/src/validation/types.d.ts.map +1 -0
  165. package/dist/src/validation/types.js +5 -0
  166. package/dist/src/validation/types.js.map +1 -0
  167. package/dist/src/validation/yaml-validator.d.ts +25 -0
  168. package/dist/src/validation/yaml-validator.d.ts.map +1 -0
  169. package/dist/src/validation/yaml-validator.js +177 -0
  170. package/dist/src/validation/yaml-validator.js.map +1 -0
  171. package/package.json +79 -79
@@ -1,164 +1,164 @@
1
- ---
2
- name: ffmpeg
3
- description: "Audio and video processing for e-commerce. Use when user needs to: merge audio with video (视频配音/添加背景音乐/音视频合成), compress videos (压缩视频/视频压缩), generate thumbnails (生成缩略图/视频封面), concatenate videos (视频拼接/合并视频), trim videos (视频裁切/截取片段/剪辑视频), convert formats (格式转换/转换视频)."
4
- ---
5
-
6
- # FFmpeg 音视频处理
7
-
8
- ## 电商场景常用任务
9
-
10
- ### 1. 音视频合成(产品视频配音/背景音乐)
11
-
12
- ```bash
13
- # 视频配背景音乐(音频较短时循环)
14
- ffmpeg -i video.mp4 -stream_loop -1 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4
15
-
16
- # 视频配音频(音频较长时截断)
17
- ffmpeg -i video.mp4 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4
18
-
19
- # 替换视频原有音频
20
- ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
21
- ```
22
-
23
- **参数说明**:
24
- - `-stream_loop -1` - 无限循环音频(直到视频结束)
25
- - `-shortest` - 以最短的流为准(视频或音频)
26
- - `-map 0:v:0 -map 1:a:0` - 手动选择第1个文件的视频+第2个文件的音频
27
-
28
- ### 2. 视频压缩(上传优化,保证展示质量)
29
-
30
- ```bash
31
- # 产品视频压缩(推荐:CRF 20,高质量)
32
- ffmpeg -i product.mp4 -c:v libx264 -crf 20 -c:a aac output.mp4
33
-
34
- # 标准压缩(CRF 23,平衡质量和大小)
35
- ffmpeg -i video.mp4 -crf 23 output.mp4
36
- ```
37
-
38
- **电商场景 CRF 建议**:
39
- - **18-20** - 产品主图视频(质量优先)
40
- - **23** - 一般营销视频(平衡)
41
- - **25-28** - 内部使用视频(文件大小优先)
42
-
43
- ### 3. 生成视频缩略图(产品封面)
44
-
45
- ```bash
46
- # 从5秒处生成缩略图
47
- ffmpeg -i product_video.mp4 -ss 00:00:05 -frames:v 1 thumbnail.jpg
48
-
49
- # 批量生成所有产品视频的缩略图
50
- for video in *.mp4; do
51
- ffmpeg -i "$video" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
52
- done
53
- ```
54
-
55
- ### 4. 视频拼接(多个片段合并)
56
-
57
- ```bash
58
- # 创建拼接列表文件
59
- cat > concat_list.txt << 'EOF'
60
- file 'video1.mp4'
61
- file 'video2.mp4'
62
- file 'video3.mp4'
63
- EOF
64
-
65
- # 拼接视频(所有视频参数相同时,快速无损)
66
- ffmpeg -f concat -safe 0 -i concat_list.txt -c copy output.mp4
67
-
68
- # 拼接视频(参数不同时,重新编码)
69
- ffmpeg -f concat -safe 0 -i concat_list.txt -c:v libx264 -crf 20 -c:a aac output.mp4
70
- ```
71
-
72
- **参数说明**:
73
- - `-f concat` - 使用 concat 分离器
74
- - `-safe 0` - 允许不安全的文件路径(本地文件需要)
75
- - `-c copy` - 无损拼接(仅当所有视频格式完全相同)
76
-
77
- ### 5. 视频裁切(截取指定片段)
78
-
79
- ```bash
80
- # 从第10秒开始,截取30秒
81
- ffmpeg -i video.mp4 -ss 00:00:10 -t 30 -c copy output.mp4
82
-
83
- # 从第10秒到第40秒
84
- ffmpeg -i video.mp4 -ss 00:00:10 -to 00:00:40 -c copy output.mp4
85
-
86
- # 去掉前5秒(从第5秒到结尾)
87
- ffmpeg -i video.mp4 -ss 00:00:05 -c copy output.mp4
88
- ```
89
-
90
- **参数说明**:
91
- - `-ss HH:MM:SS` - 开始时间
92
- - `-t <秒数>` - 持续时长
93
- - `-to HH:MM:SS` - 结束时间
94
- - `-c copy` - 无损裁切(快速)
95
-
96
- ### 6. 格式转换(确保兼容性)
97
-
98
- ```bash
99
- # 快速转换(只改容器,不重新编码)
100
- ffmpeg -i video.mov -c copy video.mp4
101
-
102
- # 标准转换(重新编码)
103
- ffmpeg -i video.mov -c:v libx264 -c:a aac video.mp4
104
- ```
105
-
106
- ## 电商工作流程
107
-
108
- ### 场景1:产品视频配背景音乐
109
-
110
- ```bash
111
- # 1. 检查文件
112
- ls -lh product_video.mp4 background_music.mp3
113
-
114
- # 2. 合成(音乐循环播放)
115
- ffmpeg -i product_video.mp4 -stream_loop -1 -i background_music.mp3 \
116
- -shortest -c:v copy -c:a aac -b:a 192k final_video.mp4
117
-
118
- # 3. 检查输出
119
- ls -lh final_video.mp4
120
-
121
- # 4. 告知用户:文件大小、是否需要压缩
122
- ```
123
-
124
- ### 场景2:压缩产品视频后生成缩略图
125
-
126
- ```bash
127
- # 1. 压缩视频(保证产品展示质量)
128
- ffmpeg -i raw_product.mp4 -c:v libx264 -crf 20 -c:a aac product.mp4
129
-
130
- # 2. 生成缩略图
131
- ffmpeg -i product.mp4 -ss 00:00:05 -frames:v 1 product_thumb.jpg
132
-
133
- # 3. 告知用户文件大小变化
134
- ls -lh raw_product.mp4 product.mp4
135
- ```
136
-
137
- ### 场景3:批量处理多个产品视频
138
-
139
- ```bash
140
- # 批量压缩并生成缩略图
141
- for video in product_*.mp4; do
142
- # 压缩
143
- ffmpeg -i "$video" -c:v libx264 -crf 20 -c:a aac "compressed_${video}"
144
-
145
- # 生成缩略图
146
- ffmpeg -i "compressed_${video}" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
147
- done
148
- ```
149
-
150
- ## 重要提示
151
-
152
- ### 电商场景特殊要求
153
-
154
- - 🎨 **质量优先** - 产品视频使用 CRF 18-20,不要过度压缩
155
- - 📏 **文件大小监控** - 始终告知用户处理前后的文件大小变化
156
- - 🖼️ **缩略图质量** - 选择展示效果好的时间点(通常5秒处)
157
- - 🎵 **音频音量** - 合成时注意背景音乐不要盖过产品解说
158
-
159
- ### 常用参数
160
-
161
- - `-c:v copy` - 视频流无损复制(音视频合成时推荐,保持原质量)
162
- - `-shortest` - 以最短流为准(音视频合成必备)
163
- - `-stream_loop -1` - 循环音频(背景音乐常用)
164
- - `-crf 20` - 产品视频推荐质量
1
+ ---
2
+ name: ffmpeg
3
+ description: "Audio and video processing for e-commerce. Use when user needs to: merge audio with video (视频配音/添加背景音乐/音视频合成), compress videos (压缩视频/视频压缩), generate thumbnails (生成缩略图/视频封面), concatenate videos (视频拼接/合并视频), trim videos (视频裁切/截取片段/剪辑视频), convert formats (格式转换/转换视频)."
4
+ ---
5
+
6
+ # FFmpeg 音视频处理
7
+
8
+ ## 电商场景常用任务
9
+
10
+ ### 1. 音视频合成(产品视频配音/背景音乐)
11
+
12
+ ```bash
13
+ # 视频配背景音乐(音频较短时循环)
14
+ ffmpeg -i video.mp4 -stream_loop -1 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4
15
+
16
+ # 视频配音频(音频较长时截断)
17
+ ffmpeg -i video.mp4 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4
18
+
19
+ # 替换视频原有音频
20
+ ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
21
+ ```
22
+
23
+ **参数说明**:
24
+ - `-stream_loop -1` - 无限循环音频(直到视频结束)
25
+ - `-shortest` - 以最短的流为准(视频或音频)
26
+ - `-map 0:v:0 -map 1:a:0` - 手动选择第1个文件的视频+第2个文件的音频
27
+
28
+ ### 2. 视频压缩(上传优化,保证展示质量)
29
+
30
+ ```bash
31
+ # 产品视频压缩(推荐:CRF 20,高质量)
32
+ ffmpeg -i product.mp4 -c:v libx264 -crf 20 -c:a aac output.mp4
33
+
34
+ # 标准压缩(CRF 23,平衡质量和大小)
35
+ ffmpeg -i video.mp4 -crf 23 output.mp4
36
+ ```
37
+
38
+ **电商场景 CRF 建议**:
39
+ - **18-20** - 产品主图视频(质量优先)
40
+ - **23** - 一般营销视频(平衡)
41
+ - **25-28** - 内部使用视频(文件大小优先)
42
+
43
+ ### 3. 生成视频缩略图(产品封面)
44
+
45
+ ```bash
46
+ # 从5秒处生成缩略图
47
+ ffmpeg -i product_video.mp4 -ss 00:00:05 -frames:v 1 thumbnail.jpg
48
+
49
+ # 批量生成所有产品视频的缩略图
50
+ for video in *.mp4; do
51
+ ffmpeg -i "$video" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
52
+ done
53
+ ```
54
+
55
+ ### 4. 视频拼接(多个片段合并)
56
+
57
+ ```bash
58
+ # 创建拼接列表文件
59
+ cat > concat_list.txt << 'EOF'
60
+ file 'video1.mp4'
61
+ file 'video2.mp4'
62
+ file 'video3.mp4'
63
+ EOF
64
+
65
+ # 拼接视频(所有视频参数相同时,快速无损)
66
+ ffmpeg -f concat -safe 0 -i concat_list.txt -c copy output.mp4
67
+
68
+ # 拼接视频(参数不同时,重新编码)
69
+ ffmpeg -f concat -safe 0 -i concat_list.txt -c:v libx264 -crf 20 -c:a aac output.mp4
70
+ ```
71
+
72
+ **参数说明**:
73
+ - `-f concat` - 使用 concat 分离器
74
+ - `-safe 0` - 允许不安全的文件路径(本地文件需要)
75
+ - `-c copy` - 无损拼接(仅当所有视频格式完全相同)
76
+
77
+ ### 5. 视频裁切(截取指定片段)
78
+
79
+ ```bash
80
+ # 从第10秒开始,截取30秒
81
+ ffmpeg -i video.mp4 -ss 00:00:10 -t 30 -c copy output.mp4
82
+
83
+ # 从第10秒到第40秒
84
+ ffmpeg -i video.mp4 -ss 00:00:10 -to 00:00:40 -c copy output.mp4
85
+
86
+ # 去掉前5秒(从第5秒到结尾)
87
+ ffmpeg -i video.mp4 -ss 00:00:05 -c copy output.mp4
88
+ ```
89
+
90
+ **参数说明**:
91
+ - `-ss HH:MM:SS` - 开始时间
92
+ - `-t <秒数>` - 持续时长
93
+ - `-to HH:MM:SS` - 结束时间
94
+ - `-c copy` - 无损裁切(快速)
95
+
96
+ ### 6. 格式转换(确保兼容性)
97
+
98
+ ```bash
99
+ # 快速转换(只改容器,不重新编码)
100
+ ffmpeg -i video.mov -c copy video.mp4
101
+
102
+ # 标准转换(重新编码)
103
+ ffmpeg -i video.mov -c:v libx264 -c:a aac video.mp4
104
+ ```
105
+
106
+ ## 电商工作流程
107
+
108
+ ### 场景1:产品视频配背景音乐
109
+
110
+ ```bash
111
+ # 1. 检查文件
112
+ ls -lh product_video.mp4 background_music.mp3
113
+
114
+ # 2. 合成(音乐循环播放)
115
+ ffmpeg -i product_video.mp4 -stream_loop -1 -i background_music.mp3 \
116
+ -shortest -c:v copy -c:a aac -b:a 192k final_video.mp4
117
+
118
+ # 3. 检查输出
119
+ ls -lh final_video.mp4
120
+
121
+ # 4. 告知用户:文件大小、是否需要压缩
122
+ ```
123
+
124
+ ### 场景2:压缩产品视频后生成缩略图
125
+
126
+ ```bash
127
+ # 1. 压缩视频(保证产品展示质量)
128
+ ffmpeg -i raw_product.mp4 -c:v libx264 -crf 20 -c:a aac product.mp4
129
+
130
+ # 2. 生成缩略图
131
+ ffmpeg -i product.mp4 -ss 00:00:05 -frames:v 1 product_thumb.jpg
132
+
133
+ # 3. 告知用户文件大小变化
134
+ ls -lh raw_product.mp4 product.mp4
135
+ ```
136
+
137
+ ### 场景3:批量处理多个产品视频
138
+
139
+ ```bash
140
+ # 批量压缩并生成缩略图
141
+ for video in product_*.mp4; do
142
+ # 压缩
143
+ ffmpeg -i "$video" -c:v libx264 -crf 20 -c:a aac "compressed_${video}"
144
+
145
+ # 生成缩略图
146
+ ffmpeg -i "compressed_${video}" -ss 00:00:05 -frames:v 1 "${video%.mp4}_thumb.jpg"
147
+ done
148
+ ```
149
+
150
+ ## 重要提示
151
+
152
+ ### 电商场景特殊要求
153
+
154
+ - 🎨 **质量优先** - 产品视频使用 CRF 18-20,不要过度压缩
155
+ - 📏 **文件大小监控** - 始终告知用户处理前后的文件大小变化
156
+ - 🖼️ **缩略图质量** - 选择展示效果好的时间点(通常5秒处)
157
+ - 🎵 **音频音量** - 合成时注意背景音乐不要盖过产品解说
158
+
159
+ ### 常用参数
160
+
161
+ - `-c:v copy` - 视频流无损复制(音视频合成时推荐,保持原质量)
162
+ - `-shortest` - 以最短流为准(音视频合成必备)
163
+ - `-stream_loop -1` - 循环音频(背景音乐常用)
164
+ - `-crf 20` - 产品视频推荐质量