mirror of
https://github.com/mifi/lossless-cut.git
synced 2024-11-22 02:12:30 +01:00
parent
91fbc0fa95
commit
319124196e
@ -259,26 +259,41 @@ function mapDefaultFormat({ streams, requestedFormat }: { streams: FFprobeStream
|
|||||||
|
|
||||||
async function determineOutputFormat(ffprobeFormatsStr: string | undefined, filePath: string) {
|
async function determineOutputFormat(ffprobeFormatsStr: string | undefined, filePath: string) {
|
||||||
const ffprobeFormats = (ffprobeFormatsStr || '').split(',').map((str) => str.trim()).filter(Boolean);
|
const ffprobeFormats = (ffprobeFormatsStr || '').split(',').map((str) => str.trim()).filter(Boolean);
|
||||||
if (ffprobeFormats.length === 0) {
|
|
||||||
console.warn('FFprobe returned unknown formats', ffprobeFormatsStr);
|
const [firstFfprobeFormat] = ffprobeFormats;
|
||||||
|
|
||||||
|
if (firstFfprobeFormat == null) {
|
||||||
|
console.warn('FFprobe returned no formats', ffprobeFormatsStr);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('FFprobe detected format(s)', ffprobeFormatsStr);
|
console.log('FFprobe detected format(s)', ffprobeFormatsStr);
|
||||||
|
|
||||||
const [firstFfprobeFormat] = ffprobeFormats;
|
// We need to test mp3 first because ffprobe seems to report the wrong format sometimes https://github.com/mifi/lossless-cut/issues/2129
|
||||||
if (ffprobeFormats.length === 1) return firstFfprobeFormat;
|
if (firstFfprobeFormat === 'mp3') {
|
||||||
|
// file-type detects it correctly
|
||||||
|
const fileTypeResponse = await FileType.fromFile(filePath);
|
||||||
|
if (fileTypeResponse?.mime === 'audio/mpeg') {
|
||||||
|
return 'mp2';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If ffprobe returned a list of formats, try to be a bit smarter about it.
|
if (ffprobeFormats.length === 1) {
|
||||||
// This should only be the case for matroska and mov. See `ffmpeg -formats`
|
return firstFfprobeFormat;
|
||||||
if (firstFfprobeFormat == null || !['matroska', 'mov'].includes(firstFfprobeFormat)) {
|
}
|
||||||
|
|
||||||
|
// If ffprobe returned a list of formats, use `file-type` to try to detect more accurately.
|
||||||
|
// This should only be the case for matroska (matroska,webm) and mov (mov,mp4,m4a,3gp,3g2,mj2),
|
||||||
|
// so if it's another format, then just return the first format from the list.
|
||||||
|
// See also `ffmpeg -formats`
|
||||||
|
if (!['matroska', 'mov'].includes(firstFfprobeFormat)) {
|
||||||
console.warn('Unknown ffprobe format list', ffprobeFormats);
|
console.warn('Unknown ffprobe format list', ffprobeFormats);
|
||||||
return firstFfprobeFormat;
|
return firstFfprobeFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fileTypeResponse = await FileType.fromFile(filePath);
|
const fileTypeResponse = await FileType.fromFile(filePath);
|
||||||
if (fileTypeResponse == null) {
|
if (fileTypeResponse == null) {
|
||||||
console.warn('file-type failed to detect format, defaulting to first', ffprobeFormats);
|
console.warn('file-type failed to detect format, defaulting to first FFprobe detected format', ffprobeFormats);
|
||||||
return firstFfprobeFormat;
|
return firstFfprobeFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user