add error logging

This commit is contained in:
Abhinav 2022-11-14 19:35:40 +05:30
parent 6c384edba8
commit f424a23ad4

View file

@ -5,77 +5,93 @@ import {
} from 'constants/ffmpeg';
import { ElectronFile } from 'types/upload';
import { parseFFmpegExtractedMetadata } from 'utils/ffmpeg';
import { logError } from 'utils/sentry';
import ffmpegFactory from './ffmpegFactory';
export async function generateVideoThumbnail(
file: File | ElectronFile
): Promise<File | ElectronFile> {
let seekTime = 1.0;
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
while (seekTime > 0) {
try {
return await ffmpegClient.run(
[
FFMPEG_PLACEHOLDER,
'-i',
INPUT_PATH_PLACEHOLDER,
'-ss',
`00:00:0${seekTime.toFixed(3)}`,
'-vframes',
'1',
'-vf',
'scale=-1:720',
OUTPUT_PATH_PLACEHOLDER,
],
file,
'thumb.jpeg'
);
} catch (e) {
seekTime = Number((seekTime / 10).toFixed(3));
try {
let seekTime = 1.0;
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
while (seekTime > 0) {
try {
return await ffmpegClient.run(
[
FFMPEG_PLACEHOLDER,
'-i',
INPUT_PATH_PLACEHOLDER,
'-ss',
`00:00:0${seekTime.toFixed(3)}`,
'-vframes',
'1',
'-vf',
'scale=-1:720',
OUTPUT_PATH_PLACEHOLDER,
],
file,
'thumb.jpeg'
);
} 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) {
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
// https://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg
// -c [short for codex] copy[(stream_specifier)[ffmpeg.org/ffmpeg.html#Stream-specifiers]] => copies all the stream without re-encoding
// -map_metadata [http://ffmpeg.org/ffmpeg.html#Advanced-options search for map_metadata] => copies all stream metadata to the out
// -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',
INPUT_PATH_PLACEHOLDER,
'-c',
'copy',
'-map_metadata',
'0',
'-f',
'ffmetadata',
OUTPUT_PATH_PLACEHOLDER,
],
file,
`metadata.txt`
);
return parseFFmpegExtractedMetadata(
new Uint8Array(await metadata.arrayBuffer())
);
try {
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
// https://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg
// -c [short for codex] copy[(stream_specifier)[ffmpeg.org/ffmpeg.html#Stream-specifiers]] => copies all the stream without re-encoding
// -map_metadata [http://ffmpeg.org/ffmpeg.html#Advanced-options search for map_metadata] => copies all stream metadata to the out
// -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',
INPUT_PATH_PLACEHOLDER,
'-c',
'copy',
'-map_metadata',
'0',
'-f',
'ffmetadata',
OUTPUT_PATH_PLACEHOLDER,
],
file,
`metadata.txt`
);
return parseFFmpegExtractedMetadata(
new Uint8Array(await metadata.arrayBuffer())
);
} catch (e) {
logError(e, 'ffmpeg extractVideoMetadata failed');
throw e;
}
}
export async function convertToMP4(file: File | ElectronFile) {
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
return await ffmpegClient.run(
[
FFMPEG_PLACEHOLDER,
'-i',
INPUT_PATH_PLACEHOLDER,
'-preset',
'ultrafast',
OUTPUT_PATH_PLACEHOLDER,
],
file,
'output.mp4'
);
try {
const ffmpegClient = await ffmpegFactory.getFFmpegClient();
return await ffmpegClient.run(
[
FFMPEG_PLACEHOLDER,
'-i',
INPUT_PATH_PLACEHOLDER,
'-preset',
'ultrafast',
OUTPUT_PATH_PLACEHOLDER,
],
file,
'output.mp4'
);
} catch (e) {
logError(e, 'ffmpeg convertToMP4 failed');
throw e;
}
}