1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-01-04 02:46:47 +01:00

fix(server): x264/x265 params not being set correctly (#8587)

This commit is contained in:
Mert 2024-04-07 12:43:50 -04:00 committed by GitHub
parent 0aa5d3daeb
commit 0d130b8957
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 24 deletions

View file

@ -1091,9 +1091,9 @@ describe(MediaService.name, () => {
); );
}); });
it('should disable thread pooling for h264 if thread limit is above 0', async () => { it('should disable thread pooling for h264 if thread limit is 1', async () => {
mediaMock.probe.mockResolvedValue(probeStub.matroskaContainer); mediaMock.probe.mockResolvedValue(probeStub.matroskaContainer);
configMock.load.mockResolvedValue([{ key: SystemConfigKey.FFMPEG_THREADS, value: 2 }]); configMock.load.mockResolvedValue([{ key: SystemConfigKey.FFMPEG_THREADS, value: 1 }]);
assetMock.getByIds.mockResolvedValue([assetStub.video]); assetMock.getByIds.mockResolvedValue([assetStub.video]);
await sut.handleVideoConversion({ id: assetStub.video.id }); await sut.handleVideoConversion({ id: assetStub.video.id });
expect(mediaMock.transcode).toHaveBeenCalledWith( expect(mediaMock.transcode).toHaveBeenCalledWith(
@ -1111,9 +1111,8 @@ describe(MediaService.name, () => {
'-v verbose', '-v verbose',
'-vf scale=-2:720,format=yuv420p', '-vf scale=-2:720,format=yuv420p',
'-preset ultrafast', '-preset ultrafast',
'-threads 2', '-threads 1',
'-x264-params "pools=none"', '-x264-params frame-threads=1:pools=none',
'-x264-params "frame-threads=2"',
'-crf 23', '-crf 23',
], ],
twoPass: false, twoPass: false,
@ -1148,10 +1147,10 @@ describe(MediaService.name, () => {
); );
}); });
it('should disable thread pooling for hevc if thread limit is above 0', async () => { it('should disable thread pooling for hevc if thread limit is 1', async () => {
mediaMock.probe.mockResolvedValue(probeStub.videoStreamVp9); mediaMock.probe.mockResolvedValue(probeStub.videoStreamVp9);
configMock.load.mockResolvedValue([ configMock.load.mockResolvedValue([
{ key: SystemConfigKey.FFMPEG_THREADS, value: 2 }, { key: SystemConfigKey.FFMPEG_THREADS, value: 1 },
{ key: SystemConfigKey.FFMPEG_TARGET_VIDEO_CODEC, value: VideoCodec.HEVC }, { key: SystemConfigKey.FFMPEG_TARGET_VIDEO_CODEC, value: VideoCodec.HEVC },
]); ]);
assetMock.getByIds.mockResolvedValue([assetStub.video]); assetMock.getByIds.mockResolvedValue([assetStub.video]);
@ -1172,9 +1171,8 @@ describe(MediaService.name, () => {
'-v verbose', '-v verbose',
'-vf scale=-2:720,format=yuv420p', '-vf scale=-2:720,format=yuv420p',
'-preset ultrafast', '-preset ultrafast',
'-threads 2', '-threads 1',
'-x265-params "pools=none"', '-x265-params frame-threads=1:pools=none',
'-x265-params "frame-threads=2"',
'-crf 23', '-crf 23',
], ],
twoPass: false, twoPass: false,

View file

@ -343,27 +343,23 @@ export class ThumbnailConfig extends BaseConfig {
export class H264Config extends BaseConfig { export class H264Config extends BaseConfig {
getThreadOptions() { getThreadOptions() {
if (this.config.threads <= 0) { const options = super.getThreadOptions();
return []; if (this.config.threads === 1) {
options.push('-x264-params frame-threads=1:pools=none');
} }
return [
...super.getThreadOptions(), return options;
'-x264-params "pools=none"',
`-x264-params "frame-threads=${this.config.threads}"`,
];
} }
} }
export class HEVCConfig extends BaseConfig { export class HEVCConfig extends BaseConfig {
getThreadOptions() { getThreadOptions() {
if (this.config.threads <= 0) { const options = super.getThreadOptions();
return []; if (this.config.threads === 1) {
options.push('-x265-params frame-threads=1:pools=none');
} }
return [
...super.getThreadOptions(), return options;
'-x265-params "pools=none"',
`-x265-params "frame-threads=${this.config.threads}"`,
];
} }
} }