Video compress: add output format selector (MP4/AVI/MKV)
- Compress panel now has format buttons before quality - Backend uses selected format for compress output - Format sent in API body for compress mode - User can compress + convert format in one step
This commit is contained in:
parent
dcf5717154
commit
8bec976d3c
@ -509,6 +509,16 @@
|
||||
|
||||
<!-- Mode panel: Сжатие -->
|
||||
<div id="panel-compress" class="mode-panel" style="margin-bottom:24px;">
|
||||
<div class="wa-card" style="margin-bottom:12px;">
|
||||
<div class="option-group">
|
||||
<span class="option-label">Выходной формат</span>
|
||||
<div class="btn-group" id="compressFormats">
|
||||
<button class="btn-option selected" data-value="mp4">MP4</button>
|
||||
<button class="btn-option" data-value="avi">AVI</button>
|
||||
<button class="btn-option" data-value="mkv">MKV</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wa-card">
|
||||
<div class="option-group">
|
||||
<span class="option-label">Качество</span>
|
||||
@ -900,6 +910,7 @@
|
||||
|
||||
initBtnGroup('convertFormats', val => { state.format = val; });
|
||||
initBtnGroup('audioFormats', val => { state.audioFormat = val; });
|
||||
initBtnGroup('compressFormats', val => { state.compressFormat = val; });
|
||||
|
||||
// ─── Quality options ───────────────────────────────────────────────────────
|
||||
document.querySelectorAll('.quality-option').forEach(label => {
|
||||
@ -926,7 +937,8 @@
|
||||
const body = {
|
||||
jobId: state.jobId,
|
||||
mode: state.mode,
|
||||
format: state.mode === 'convert' ? state.format
|
||||
format: state.mode === 'compress' ? (state.compressFormat || 'mp4')
|
||||
: state.mode === 'convert' ? state.format
|
||||
: state.mode === 'audio' ? state.audioFormat
|
||||
: state.mode === 'gif' ? 'gif'
|
||||
: 'mp4',
|
||||
|
||||
@ -169,9 +169,10 @@ router.post('/convert', express.json(), async (req, res) => {
|
||||
break;
|
||||
}
|
||||
case 'compress': {
|
||||
// Quality via mpeg4 q:v (1=best, 31=worst)
|
||||
// Quality via mpeg4 q:v (1=best, 31=worst) + format selection
|
||||
const qv = quality === 'high' ? '3' : quality === 'low' ? '15' : '8';
|
||||
args.push('-c:v', 'mpeg4', '-q:v', qv, '-c:a', 'aac', '-b:a', '128k', '-movflags', '+faststart');
|
||||
args.push('-c:v', 'mpeg4', '-q:v', qv, '-c:a', 'aac', '-b:a', '128k');
|
||||
if (format === 'mp4' || !format) args.push('-movflags', '+faststart');
|
||||
break;
|
||||
}
|
||||
case 'audio': {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user