Commit graph

1257 commits

Author SHA1 Message Date
Cody Robibero
7f26bd1091
Merge pull request #17399 from Shadowghost/fix-extra-year
Fix incorrect year on local trailers
2026-07-25 12:52:51 -04:00
Cody Robibero
6ac64c5319
Merge pull request #17419 from rwebster85/mp4-audio-subtitle-names
Check the "name" tag for audio/subtitle probe to fix MP4 not showing correctly - Fixes issue #17418
2026-07-24 21:30:54 -04:00
gnattu
d74babd8f3 Drain stderr and stdout concurrently for encoder validation
Some ffmpeg build might output extremely long traces for its banner that consume all pipe capacity and hangs the process. We have to drain both streams regardless on which one we actually read.
2026-07-24 20:01:01 +08:00
Richard Webster
ca0cf763ff
Update comment 2026-07-23 11:57:34 +01:00
Richard Webster
3d4c52092e
Clarify comment about MP4 track title workaround 2026-07-23 10:13:04 +01:00
Richard Webster
474ae50c36
Check the "name" tag, not just "title" 2026-07-22 18:00:18 +01:00
Shadowghost
6382563440 Prefer null checks over HasValue everywhere 2026-07-22 08:09:33 +02:00
Cody Robibero
65836cc844
Merge pull request #17160 from 854562/truncate-language-strings
Some checks are pending
CodeQL / Analyze (push) Waiting to run
Format / format-check (push) Waiting to run
Tests / run-tests (macos-latest) (push) Waiting to run
Tests / run-tests (ubuntu-latest) (push) Waiting to run
Tests / run-tests (windows-latest) (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Artifact (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Unstable Spec (push) Blocked by required conditions
OpenAPI Publish / OpenAPI - Publish Stable Spec (push) Blocked by required conditions
Project Automation / Project board (push) Waiting to run
Merge Conflict Labeler / main (push) Waiting to run
Truncate ISO-639-2 language display names at first delimiter
2026-07-21 11:22:32 -04:00
Tim Eisele
ed61acc19a
Fix subtitle encoding for local files (#17281)
* Fix subtitle encoding

* Add short-circuit

* Use IsTextFormat

* Update MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

Co-authored-by: Bond-009 <bond.009@outlook.com>

---------

Co-authored-by: Bond-009 <bond.009@outlook.com>
2026-07-21 14:52:59 +02:00
Shadowghost
4cc69f4be0 Apply review suggestions 2026-07-21 14:30:55 +02:00
Shadowghost
b99703301f Merge remote-tracking branch 'upstream/master' into security-path-traversal-fixes
# Conflicts:
#	Jellyfin.Api/Controllers/HlsSegmentController.cs
#	Jellyfin.Api/Controllers/PluginsController.cs
2026-07-21 07:14:47 +02:00
Cody Robibero
f2b9c68969
Merge pull request #17342 from LTe/fix-subtitle-conversion-race
Fix race condition in concurrent subtitle conversion
2026-07-20 19:51:44 -04:00
854562
2cd2f36fe4
Extract truncation logic to helper and add tests 2026-07-20 22:00:10 +02:00
gnattu
a238d59a07
Remove libpostproc check for ffmpeg version validation (#17384)
Remove libpostproc check for ffmpeg version validation
2026-07-20 12:16:37 +02:00
Bond-009
2fd747432a
Merge pull request #17304 from nyanmisaka/normalize-invalid-pts-for-trickplay
Normalize invalid PTS from containers for Trickplay generation
2026-07-20 08:36:25 +02:00
nyanmisaka
9fa9d26341 Normalize invalid PTS from containers for Trickplay generation
This change does not affect the keyframe only mode.

Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2026-07-18 15:44:34 +08:00
Marc Brooks
cab108a839
Prevent ffmpeg from hanging extracting subtitles (#17297)
* Prevent ffmpeg from hanging extracting subtitles
Add `RunSubtitleExtractionProcess` to unify the external
_ffmpeg_ process handling and error management.
Add a `-nostdin` flag that prevents _ffmpeg_ from reading from
_stdin_ and blocking on an inherited stdin handle (e.g. when
Jellyfin runs as a service under NSSM), which otherwise hangs
subtitle extraction forever when _ffmpeg_ blocks on any
keyboard-interaction read until the timeout (30 minutes).
Close the redirected _stdin_ to ensure immediage EOF.
Drain the _stderr_ to a string and log it, to ensure we don't block
the _ffmpeg_ process on errors that exceed the pipe length.
Pass `-y` to _ffmpeg_ to ensure it overwrites any existing output file
without prompting for confirmation.

* Address review comments
Make sure we always drain stderr.
Make sure the timeout also honors the cancellationToken.
Make sure when we get cancelled we don't log it as a ffmpeg error.
2026-07-17 23:23:57 +02:00
Bond-009
b809d964b3
Merge pull request #17288 from nyanmisaka/ffmpeg-log-utf8
Fix potential garbled text in FFmpeg logs on Windows
2026-07-17 22:28:49 +02:00
Shadowghost
1a45fc82b5 Sanitize media attachment and lyric paths against traversal 2026-07-17 17:07:27 +02:00
Piotr Niełacny
6e3c187493 Fix race condition in concurrent subtitle conversion
SubtitleEncoder.ConvertSubtitles parsed subtitles with libse's static
Subtitle.Parse, which iterates a statically cached list of shared
SubtitleFormat instances. Format parsers keep mutable per-parse state on
the instance, so concurrent subtitle requests corrupted each other's
output (cues mixed across streams and languages, truncated files) or
failed with NullReferenceException when format detection broke down and
Subtitle.Parse returned null.

Parse through the injected ISubtitleParser instead. SubtitleEditParser
instantiates a fresh format parser per call, so requests no longer share
state. Its Parse method now returns the libse Subtitle directly (the
SubtitleTrackInfo flattening was unused since the SubtitleEdit writer
rework) so the writers keep full fidelity such as ASS styling.
2026-07-15 14:55:55 +02:00
theguymadmax
e2d9d592bc Fix incorrect protocol used for subtitle charset detection 2026-07-11 17:33:06 -04:00
nyanmisaka
631a314d24 Fix potential garbled text in FFmpeg logs on Windows
Explicitly set StandardErrorEncoding and StandardOutputEncoding to
Encoding.UTF8 when invoking the FFmpeg subprocess.

This prevents log encoding issues and character corruption on Windows
environments that default to non-UTF8 ANSI code pages.

This fixes garbled metadata and font names in the FFmpeg logs.

Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2026-07-10 14:46:27 +08:00
Nils Lehnen
f8ffccae7f Use InvariantCulture when parsing machine-generated dates
DateTime.TryParse without an IFormatProvider falls back to the current
thread culture, so the same string can parse differently (or fail)
depending on the server's locale. None of these call sites deal with
user-entered text - they parse dates that come from filenames, an
HTTP header, ffprobe metadata and values the app itself wrote to the
auth database - so InvariantCulture is the correct provider everywhere
here.

Fixes the S6580 / CA1305 warnings on these call sites.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 23:55:31 +02:00
854562
c632417dda
Fix SonarCloud warnings 2026-06-23 18:32:47 +02:00
Shadowghost
d090c59939 Rework bitrate reporting 2026-06-23 17:47:17 +02:00
854562
94d5326411
Truncate ISO-639-2 language display names at first delimiter
Prevents raw ISO-639-2 values (e.g. "Greek, Modern (1453-)" from cluttering the audio and subtitle display names by truncating them at the first comma or semicolon ("Greek"). Applies to MediaStreamRepository and ProbeResultNormalizer.
2026-06-22 20:25:13 +02:00
Bond_009
e86b502cbc Strip null-terminator 2026-06-16 17:54:23 +02:00
Bond_009
0022508889 Add regression test 2026-06-15 21:20:06 +02:00
Bond_009
a9a02719ab Fix type of length arguments 2026-06-15 21:01:28 +02:00
Bond_009
d50205cc9f Follow native interoperability best practices
https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices
2026-06-15 21:01:28 +02:00
theguymadmax
d0a8445f76 Fix duplicate key collision 2026-06-12 11:44:26 -04:00
Shadowghost
a96824f257 Merge remote-tracking branch 'upstream/master' into fix-external-sub-invalidation 2026-06-05 23:41:05 +02:00
Bond-009
b639166c0a
Merge pull request #16998 from Bond-009/revertCodecPreference
Prefer subtitle extension over codec
2026-06-05 18:27:34 +02:00
Shadowghost
efb0336369 Fix subtitle replacement not invalidating cache 2026-06-05 14:14:27 +02:00
Bond-009
5ee9e79da2
Merge pull request #16915 from Shadowghost/batch-attachment-extract
Extract attachments in one ffmpeg command when dumping
2026-06-03 18:16:35 +02:00
Bond_009
d69de6ccc4 Prefer subtitle extension over codec 2026-06-01 20:57:59 +02:00
Bond-009
54463929d0
Write subtitles using SubtitleEdit (#16805)
* Write subtitles using SubtitleEdit

We've been using SubtitleEdit to parse since 2021
https://github.com/jellyfin/jellyfin/pull/4984

I think it's time we start using it to write too

* Clean up ConvertSubtitles

* Add JsonWriter back
2026-06-01 19:43:57 +02:00
Neptune
6f0ff89bdc
Add support for VobSub subtitle streams (#16552)
* Add support for VobSub subtitle streams

* update logic to determine separate extraction for VobSub subtitles

* simplify VobSub extraction logic and fix ffmpeg command

* Match `ExtractAllExtractableSubtitlesMKS` with `ExtractAllExtractableSubtitlesInternal` Matroska's VobSub option

* Add a comments clarify why MKS was used, and remove the redundant VobSub extension branch

* remove redundant VobSub format check

* fix type errors
2026-05-31 17:18:25 +02:00
Bond_009
1dd02b0e30 Add JsonWriter back 2026-05-30 21:42:57 +02:00
Bond_009
2b6da44815 Clean up ConvertSubtitles 2026-05-30 21:42:19 +02:00
Bond_009
941298ee81 Write subtitles using SubtitleEdit
We've been using SubtitleEdit to parse since 2021
https://github.com/jellyfin/jellyfin/pull/4984

I think it's time we start using it to write too
2026-05-30 21:09:10 +02:00
Shadowghost
e627c723e2 Extract attachments in one ffmpeg command when dumping 2026-05-23 22:41:44 +02:00
Bond-009
31f4ce93a6
Merge pull request #16872 from psavarmattas/fix/priority-class-warning-spam
fix: suppress repeated PriorityClass warning in MediaEncoder
2026-05-23 19:22:34 +02:00
jakobkukla
37350282cc Run tree-wide dotnet format 2026-05-21 20:48:41 +02:00
psmattas
80a552a35d
fix: suppress repeated PriorityClass warning in MediaEncoder
When Jellyfin runs without permission to set process priority (e.g.
Docker), StartProcess() logged a warning for every file probed during
a library scan. Add a _canSetProcessPriority flag: warn once on first
failure, skip all subsequent attempts.

Fixes #15287
2026-05-18 14:40:34 +01:00
Tim Eisele
a9865367d8
Safeguard against invalid GUIDs (#16813)
Safeguard against invalid GUIDs
2026-05-12 18:12:54 +02:00
Bond-009
4dd19b990b
Merge pull request #16290 from benbenmoss/fix/io-excemption-from-strm
IOException with STRM HTTP URLs
2026-05-09 08:19:41 +02:00
Erik W
e1e18e8da0
Add OriginalLanguage as option to PreferredAudioLanguage (#12579)
* Add OriginalLanguage as option to PreferredAudioLanguage

* Support for multiple original languages

* Add original audio stream indicator

* Fetch OriginalLanguage from TMDB

* Adapt to EFCore refactor

* Fix PlayDefaultAudioTrack OriginalLanguage behavior

* Fix better PlayDefaultAudioTrack OriginalLanguage behavior

* Add comment to ItemFields

* Improved PlayDefaultAudioTrack behavior

* Add migration for original language

* Use sting.Equals for string comparisons

* Always set dto OriginalLanguage

* Remove OriginalLanguage from ItemFields

---------

Co-authored-by: Lampan-git <lampan-git@users.noreply.github.com>
2026-05-07 20:07:23 +02:00
Seven Rats
f5f75ed2e1
feat/audiobook_chapters (#16518)
feat/audiobook_chapters
2026-05-03 12:18:20 +02:00
nyanmisaka
e75f7f1b28 Avoid SSA to ASS conversion and loss of styles
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2026-05-02 21:36:34 +08:00