add error logging
This commit is contained in:
parent
6c384edba8
commit
f424a23ad4
|
@ -5,77 +5,93 @@ import {
|
||||||
} from 'constants/ffmpeg';
|
} from 'constants/ffmpeg';
|
||||||
import { ElectronFile } from 'types/upload';
|
import { ElectronFile } from 'types/upload';
|
||||||
import { parseFFmpegExtractedMetadata } from 'utils/ffmpeg';
|
import { parseFFmpegExtractedMetadata } from 'utils/ffmpeg';
|
||||||
|
import { logError } from 'utils/sentry';
|
||||||
import ffmpegFactory from './ffmpegFactory';
|
import ffmpegFactory from './ffmpegFactory';
|
||||||
|
|
||||||
export async function generateVideoThumbnail(
|
export async function generateVideoThumbnail(
|
||||||
file: File | ElectronFile
|
file: File | ElectronFile
|
||||||
): Promise<File | ElectronFile> {
|
): Promise<File | ElectronFile> {
|
||||||
let seekTime = 1.0;
|
try {
|
||||||
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
let seekTime = 1.0;
|
||||||
while (seekTime > 0) {
|
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
||||||
try {
|
while (seekTime > 0) {
|
||||||
return await ffmpegClient.run(
|
try {
|
||||||
[
|
return await ffmpegClient.run(
|
||||||
FFMPEG_PLACEHOLDER,
|
[
|
||||||
'-i',
|
FFMPEG_PLACEHOLDER,
|
||||||
INPUT_PATH_PLACEHOLDER,
|
'-i',
|
||||||
'-ss',
|
INPUT_PATH_PLACEHOLDER,
|
||||||
`00:00:0${seekTime.toFixed(3)}`,
|
'-ss',
|
||||||
'-vframes',
|
`00:00:0${seekTime.toFixed(3)}`,
|
||||||
'1',
|
'-vframes',
|
||||||
'-vf',
|
'1',
|
||||||
'scale=-1:720',
|
'-vf',
|
||||||
OUTPUT_PATH_PLACEHOLDER,
|
'scale=-1:720',
|
||||||
],
|
OUTPUT_PATH_PLACEHOLDER,
|
||||||
file,
|
],
|
||||||
'thumb.jpeg'
|
file,
|
||||||
);
|
'thumb.jpeg'
|
||||||
} catch (e) {
|
);
|
||||||
seekTime = Number((seekTime / 10).toFixed(3));
|
} catch (e) {
|
||||||
|
seekTime = Number((seekTime / 10).toFixed(3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
throw Error('Thumbnail generation failed');
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'ffmpeg generateVideoThumbnail failed');
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
throw Error('Thumbnail generation failed');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function extractVideoMetadata(file: File | ElectronFile) {
|
export async function extractVideoMetadata(file: File | ElectronFile) {
|
||||||
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
try {
|
||||||
// https://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg
|
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
||||||
// -c [short for codex] copy[(stream_specifier)[ffmpeg.org/ffmpeg.html#Stream-specifiers]] => copies all the stream without re-encoding
|
// https://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg
|
||||||
// -map_metadata [http://ffmpeg.org/ffmpeg.html#Advanced-options search for map_metadata] => copies all stream metadata to the out
|
// -c [short for codex] copy[(stream_specifier)[ffmpeg.org/ffmpeg.html#Stream-specifiers]] => copies all the stream without re-encoding
|
||||||
// -f ffmetadata [https://ffmpeg.org/ffmpeg-formats.html#Metadata-1] => dump metadata from media files into a simple UTF-8-encoded INI-like text file
|
// -map_metadata [http://ffmpeg.org/ffmpeg.html#Advanced-options search for map_metadata] => copies all stream metadata to the out
|
||||||
const metadata = await ffmpegClient.run(
|
// -f ffmetadata [https://ffmpeg.org/ffmpeg-formats.html#Metadata-1] => dump metadata from media files into a simple UTF-8-encoded INI-like text file
|
||||||
[
|
const metadata = await ffmpegClient.run(
|
||||||
FFMPEG_PLACEHOLDER,
|
[
|
||||||
'-i',
|
FFMPEG_PLACEHOLDER,
|
||||||
INPUT_PATH_PLACEHOLDER,
|
'-i',
|
||||||
'-c',
|
INPUT_PATH_PLACEHOLDER,
|
||||||
'copy',
|
'-c',
|
||||||
'-map_metadata',
|
'copy',
|
||||||
'0',
|
'-map_metadata',
|
||||||
'-f',
|
'0',
|
||||||
'ffmetadata',
|
'-f',
|
||||||
OUTPUT_PATH_PLACEHOLDER,
|
'ffmetadata',
|
||||||
],
|
OUTPUT_PATH_PLACEHOLDER,
|
||||||
file,
|
],
|
||||||
`metadata.txt`
|
file,
|
||||||
);
|
`metadata.txt`
|
||||||
return parseFFmpegExtractedMetadata(
|
);
|
||||||
new Uint8Array(await metadata.arrayBuffer())
|
return parseFFmpegExtractedMetadata(
|
||||||
);
|
new Uint8Array(await metadata.arrayBuffer())
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'ffmpeg extractVideoMetadata failed');
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function convertToMP4(file: File | ElectronFile) {
|
export async function convertToMP4(file: File | ElectronFile) {
|
||||||
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
try {
|
||||||
return await ffmpegClient.run(
|
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
|
||||||
[
|
return await ffmpegClient.run(
|
||||||
FFMPEG_PLACEHOLDER,
|
[
|
||||||
'-i',
|
FFMPEG_PLACEHOLDER,
|
||||||
INPUT_PATH_PLACEHOLDER,
|
'-i',
|
||||||
'-preset',
|
INPUT_PATH_PLACEHOLDER,
|
||||||
'ultrafast',
|
'-preset',
|
||||||
OUTPUT_PATH_PLACEHOLDER,
|
'ultrafast',
|
||||||
],
|
OUTPUT_PATH_PLACEHOLDER,
|
||||||
file,
|
],
|
||||||
'output.mp4'
|
file,
|
||||||
);
|
'output.mp4'
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'ffmpeg convertToMP4 failed');
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue