IA de google ( les deux premières réponses fonctionnent=
Ma commande est : ffmpeg -i
Exemple.mp4 ^ -vf subtitles= Exemple.srt ^ -c:v libx264 ^ -c:a copy ^
Exemple_subs.mp4 Exemple.mp4 est lkisible dans un enregistreur TNT mais pas
Exemple_subs.mp4 ?as
Le problème d'illisibilité de votre fichier
Exemple_subs.mp4 sur votre
enregistreur ou décodeur TNT vient principalement du fait que votre commande
laisse FFmpeg choisir par défaut le profil d'encodage vidéo (souvent le profil
High ou High 10-bit en YUV 444p/422p selon votre
version). Les puces matérielles des décodeurs TNT de
salon sont anciennes et très strictes : elles ne supportent généralement que le
profil H.264
Main ou High (8-bit) avec un format de pixels strictement fixé à YUV 420p. [1]
La commande corrigée à utiliser
Pour garantir une compatibilité maximale avec
votre enregistreur TNT, ajoutez l'argument
-pix_fmt yuv420p et forcez
le profil à main avec un niveau matériel
standard (comme 4.1). [1, 2] Voici la commande corrigée (compatible avec la
syntaxe Windows grâce aux symboles
^) :ffmpeg -i Exemple.mp4 ^
-vf "subtitles=Exemple.srt" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 ^
-c:a copy ^
Exemple_subs.mp4
Pourquoi la première vidéo fonctionnait et pas la deuxième ?
- Exemple.mp4 (Original) : Il a probablement été encodé par un appareil ou un logiciel grand public respectant déjà les normes strictes de diffusion (ex: YUV 420p, Profile Main/High). Votre décodeur TNT le lit donc de manière fluide.
- Exemple_subs.mp4
(Modifié) : Pour "incruster" (graver) les sous-titres
dans l'image, FFmpeg est obligé de décoder puis de réencoder la piste vidéo
(
-c:v libx264). Sans précision de votre part, FFmpeg choisit des réglages modernes et optimisés pour les ordinateurs récents, que la puce électronique du décodeur TNT est incapable de décoder matériellement. [3]
Les 3 détails qui bloquent un décodeur TNT
- Le format de pixels (
-pix_fmt yuv420p) : Sans cela, FFmpeg réencode parfois dans un format de couleur supérieur (ex: YUV 444p). Les téléviseurs et décodeurs TNT affichent un écran noir ou une erreur de format s'ils reçoivent autre chose que du 420p. [1] - Le profil et le niveau (
-profile:v main -level 4.1) : Les profils trop avancés demandent trop de puissance de calcul pour ces petits boîtiers. Restreindre au profilmainrésout 95 % des problèmes sur le matériel de salon. [1, 2] - Les guillemets autour du filtre (
-vf "subtitles=Exemple.srt") : Si le nom de votre fichier SRT ou son chemin d'accès contient un jour un espace ou un caractère spécial, FFmpeg plantera immédiatement sans ces guillemets. [4]
Si le problème persiste malgré cela, le format
de la piste audio d'origine (recopiée à l'identique avec
-c:a copy) pourrait aussi
être en cause, bien que ce soit plus rare. Souhaitez-vous que nous vérifiions
ensemble le format audio ou les dimensions de
l'image (résolution) si la vidéo ne se lance toujours
pas ?Autre chose. La vidéo
obtenue faisait un poids double de la vidéo originale !
L'augmentation excessive du poids s'explique
par le fait que votre commande initiale n'indiquait aucun réglage de qualité
(débit binaire) à FFmpeg, qui a donc réencodé la vidéo
avec des paramètres par défaut beaucoup trop généreux.
Pour graver les sous-titres, FFmpeg doit
obligatoirement reconstruire chaque image. Si vous ne fixez pas de limite, il
applique un réglage standard (CRF 23) qui peut facilement doubler le poids si la
vidéo d'origine était déjà très compressée.
La commande corrigée pour maîtriser le poids et préserver la compatibilité TNT
Pour retrouver un poids similaire à l'original
tout en restant compatible avec votre décodeur, ajoutez l'argument
-crf
28 (qui augmente légèrement la
compression sans perte visuelle visible sur un téléviseur) ou -preset medium
:ffmpeg -i Exemple.mp4 ^
-vf "subtitles=Exemple.srt" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium ^
-c:a copy ^
Exemple_subs.mp4
Les deux méthodes pour contrôler précisément la taille du fichier
Selon vos préférences, vous pouvez utiliser
deux techniques différentes dans votre commande :
Methode 1 : Le mode CRF (Recommandé)
Le paramètre
-crf (Constant Rate Factor)
ajuste la compression selon la complexité des images.- Fonctionnement : L'échelle va de 0 (sans perte, fichier énorme) à 51 (qualité horrible).
- Réglage : Un CRF entre 25 et 28 offre un excellent compromis pour les vieux lecteurs de salon : l'image reste propre et le fichier final sera souvent plus léger ou égal à l'original.
Méthode 2 : Le ciblage par Bitrate (Débit fixe)
Si vous voulez contraindre FFmpeg à copier
exactement le même débit que l'original (par exemple 2 Megabits par seconde) :
- Argument à ajouter
:
-b:v 2M(remplacez2Mpar le débit de votre vidéo d'origine). - Vérification : Vous pouvez connaître le débit de votre fichier d'origine en faisant un clic droit sur Exemple.mp4 > Propriétés > Détails > Débit total des données.
Souhaitez-vous que nous adaptions la commande
avec un débit
précis (Bitrate) basé sur les détails de votre vidéo
d'origine ?
Comment faire
en une seule commande pour télécharger une vidéo youtube avec la commande yt-dlp
en utilisant deno ET la transformer pour intégrer les sous-titres comme avec la
commande : « ffmpeg -i Exemple.mp4 ^ -vf "subtitles=Exemple.srt" ^ -c:v libx264
-pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium ^ -c:a copy ^
Exemple_subs.mp4 » ?
Pour exécuter cela en une seule commande avec
yt-dlp, vous n'avez pas besoin
d'utiliser Deno (qui est un runtime JavaScript/TypeScript). yt-dlp intègre nativement un argument nommé
--exec qui
permet de passer automatiquement la vidéo téléchargée à votre commande FFmpeg
personnalisée dès que le téléchargement est terminé.La commande unique (Syntaxe Windows CMD)
Voici la commande complète à copier-coller
dans votre terminal Windows. Elle télécharge la vidéo, récupère les sous-titres
associés, puis lance l'encodage de compatibilité TNT :
yt-dlp "URL_YOUTUBE" --write-subs --sub-format srt --ffmpeg-location "C:cheminversffmpeg.exe" --exec "ffmpeg -i {} -vf "subtitles=%(requested_subtitles.fr.filepath)s" -c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium -c:a copy "%(title)s_subs.mp4""
Comment fonctionne cette commande ?
--write-subs --sub-format srt: Demande à yt-dlp de télécharger le fichier de sous-titres au format.srt.--ffmpeg-location: Indique à yt-dlp où se trouve votre fichierffmpeg.exe(optionnel si FFmpeg est déjà configuré dans les variables d'environnement de votre système).--exec "...": Exécute la commande située entre guillemets immédiatement après le téléchargement.{}: Ce symbole est automatiquement remplacé par le nom du fichier vidéo que yt-dlp vient de télécharger.%(requested_subtitles.fr.filepath)s: Ce code dynamique transmet automatiquement à FFmpeg le chemin exact du fichier sous-titres téléchargé (ici l'exemple cible le français.fr, remplacez par la langue voulue si nécessaire).": Les guillemets internes sont précédés d'un antislash pour que Windows comprenne qu'ils font partie de la sous-commande FFmpeg.
Alternative si vous devez absolument utiliser un script Deno
Si votre projet impose l'utilisation de Deno (par exemple au sein d'une
application JavaScript), vous devez créer un script
download.js qui orchestre
les deux processus via Deno.Command :// download.js
const url = "URL_YOUTUBE";
// 1. Étape yt-dlp
const ytdlp = new Deno.Command("yt-dlp", {
args: [url, "--write-subs", "--sub-format", "srt", "-o", "Exemple.%(ext)s"],
});
await ytdlp.output();
// 2. Étape FFmpeg
const ffmpeg = new Deno.Command("ffmpeg", {
args: [
"-i", "Exemple.mp4",
"-vf", "subtitles=Exemple.fr.srt",
"-c:v", "libx264", "-pix_fmt", "yuv420p", "-profile:v", "main", "-level", "4.1", "-crf", "28", "-preset", "medium",
"-c:a", "copy",
"Exemple_subs.mp4"
],
});
await ffmpeg.output();
console.log("Vidéo TNT prête !");
Pour exécuter ce script, vous utiliseriez la
commande :
deno run --allow-run
download.js.Rencontrez-vous des difficultés pour extraire une langue
de sous-titres spécifique (comme les sous-titres
générés automatiquement par YouTube) avec yt-dlp ?
La même chose,
mais en acceptant les sous-titre autogénérés
svp
Pour accepter les sous-titres autogénérés de
YouTube (qui ne sont pas stockés de la même manière que les sous-titres créés
par les utilisateurs), il faut remplacer l'argument
--write-subs par --write-auto-subs
dans votre commande yt-dlp.Voici la solution complète mise à jour.
1. La commande unique modifiée
Exécutez cette commande dans votre terminal
Windows. Elle demande à
yt-dlp de récupérer en
priorité le sous-titre officiel français, et s'il n'existe pas, de télécharger le
sous-titre automatique
français.yt-dlp --write-auto-subs --sub-langs fr --convert-subs srt ^
--exec "deno run --allow-run script.js" ^
"URL_DE_LA_VIDEO_YOUTUBE"
2. Le script Deno mis à jour (script.js)
Les sous-titres automatiques téléchargés par
yt-dlp portent souvent
l'extension .fr.vtt avant d'être
convertis. Pour éviter que FFmpeg ne plante si le nom du fichier sous-titre est
légèrement différent, le script Deno ci-dessous intègre désormais une vérification
automatique du fichier .srt réellement présent sur
votre disque.Remplacez le contenu de votre fichier
script.js par celui-ci :import { existsSync } from "https://deno.land";
// Deno récupère le nom du fichier vidéo téléchargé par yt-dlp
const videoOriginale = Deno.args[0];
// On extrait la racine du nom du fichier (sans l'extension .mp4 / .mkv)
const baseName = videoOriginale.replace(/.[^/.]+$/, "");
// Chemins potentiels pour le fichier SRT selon le type de sous-titre YouTube
const srtOfficiel = `${baseName}.fr.srt`;
const srtAuto = `${baseName}.fr.live_chat.srt`; // Cas rare des directs
let srtFile = srtOfficiel;
// Si le fichier officiel n'existe pas, on cherche une variante générée
if (!existsSync(srtOfficiel)) {
// Recherche d'un fichier se terminant par .srt dans le même dossier
for (const entry of Deno.readDirSync(".")) {
if (entry.isFile && entry.name.startsWith(baseName) && entry.name.endsWith(".srt")) {
srtFile = entry.name;
break;
}
}
}
const videoSortie = `${baseName}_subs.mp4`;
if (!existsSync(srtFile)) {
console.error(`Erreur : Aucun fichier de sous-titres (.srt) trouvé pour la vidéo.`);
Deno.exit(1);
}
console.log(`Fichier SRT détecté : ${srtFile}`);
console.log(`Incrustation en cours (Profil TNT) dans : ${videoSortie}...`);
// Exécution de la commande FFmpeg compatible TNT
const commande = new Deno.Command("ffmpeg", {
args: [
"-i", videoOriginale,
"-vf", `subtitles=${srtFile}`,
"-c:v", "libx264",
"-pix_fmt", "yuv420p",
"-profile:v", "main",
"-level", "4.1",
"-crf", "28",
"-preset", "medium",
"-c:a", "copy",
videoSortie
],
});
const { success } = await commande.output();
if (success) {
console.log("Traitement terminé avec succès !");
} else {
console.error("Une erreur est survenue lors du réencodage FFmpeg.");
}
Ce qui change avec cette configuration
--write-auto-subs: Autorise explicitement le téléchargement de la transcription automatique de YouTube si aucun sous-titre classique n'a été fourni par le créateur.- Robustesse du
script : YouTube applique parfois l'extension
.fr-orig.srtou.fr.srtselon que la vidéo a été traduite ou générée. La boucleDeno.readDirSyncscanne le dossier pour lier le bon fichier.srtà FFmpeg à coup sûr.
Voulez-vous que le script supprime
automatiquement les fichiers temporaires (la vidéo
d'origine sans sous-titres et le fichier
.srt) une fois que la vidéo
finale pour la TNT est créée ?avec « yt-dlp
"https://www.youtube.com/watch?v=mYRlGKZNjAw" --write-auto-subs --sub-langs fr
--sub-format srt --ffmpeg-location "ffmpeg.exe" --exec "ffmpeg -i {} -vf
"subtitles=%(requested_subtitles.fr.filepath)s" -c:v libx264 -pix_fmt yuv420p
-profile:v main -level 4.1 -crf 28 -preset medium -c:a copy
"%(title)s_subs.mp4"" » ça répond : « At least one output file must be
specified
L'erreur « At least one output file must be specified » renvoyée par FFmpeg signifie qu'il n'a pas réussi à
identifier le nom du fichier vidéo de sortie dans votre bloc de commande.
Ce problème est provoqué par la syntaxe
dynamique
%(title)s. Lorsque le titre
de la vidéo YouTube contient des caractères spécifiques (comme des espaces, des
apostrophes ou des accents), la variable s'affiche mal dans la sous-commande
Windows et brise la structure de FFmpeg.Voici les deux solutions pour corriger
immédiatement ce problème :
Solution 1 : Forcer un nom de sortie fixe (Le plus simple et robuste)
Pour éviter que les titres des vidéos ne
fassent planter la commande, fixez un nom générique simple pour le fichier final
(par exemple
video_tnt.mp4).yt-dlp "https://www.youtube.com/watch?v=mYRlGKZNjAw" --write-auto-subs --sub-langs fr --sub-format srt --ffmpeg-location "ffmpeg.exe" --exec "ffmpeg -i {} -vf "subtitles=%(requested_subtitles.fr.filepath)s" -c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium -c:a copy video_tnt.mp4"
Solution 2 : Conserver le titre YouTube (Syntaxe corrigée)
Si vous tenez absolument à ce que le fichier
porte le nom de la vidéo, il faut échapper les guillemets de manière plus
stricte et utiliser un filtre de nettoyage natif à
yt-dlp pour nettoyer le
titre avant de le donner à FFmpeg.Ajoutez l'argument
windows dans la variable
pour qu'elle retire les caractères interdits :yt-dlp "https://www.youtube.com/watch?v=mYRlGKZNjAw" --write-auto-subs --sub-langs fr --sub-format srt --ffmpeg-location "ffmpeg.exe" --exec "ffmpeg -i {} -vf "subtitles=%(requested_subtitles.fr.filepath)s" -c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium -c:a copy "%(title)s_subs.mp4""
Note : Si cette méthode échoue encore sur certaines vidéos à
cause de la gestion des guillemets imbriqués par Windows CMD, la Solution 1 reste la méthode infaillible.
Souhaitez-vous également que la commande supprime
automatiquement le fichier d'origine et le fichier de
sous-titres
.srt une fois que votre
version finale compatible TNT est générée ?Avec: « ffmpeg -i
Exemple.mp4 ^ -vf "subtitles=Exemple.srt" ^ -c:v libx264 -pix_fmt yuv420p
-profile:v main -level 4.1 -crf 28 -preset medium ^ -c:a copy ^ Exemple_subs.mp4
» la vidéo n'est toujours pas supportée par l'enregistreur
TNT
Si votre enregistreur TNT refuse toujours la
vidéo malgré le profil H.264
main et le format yuv420p, le problème ne
vient plus de la vidéo elle-même, mais très probablement du format de la
piste audio d'origine ou de la structure
interne du fichier MP4.La commande utilisait
-c:a copy, ce qui signifie
que FFmpeg recopiait l'audio de YouTube tel quel (souvent du format Opus ou AAC avancé), des
formats que les puces des vieux décodeurs TNT de salon sont incapables de
décoder.La solution : Forcer un encodage audio standard (MP3 ou AC3)
Pour débloquer votre enregistreur, il faut
réencoder la piste audio en MP3 (ou en AC3 / Dolby Digital), qui sont les deux seuls formats audio
universellement acceptés par 100 % des terminaux TNT.
Voici la commande corrigée à exécuter :
ffmpeg -i Exemple.mp4 ^
-vf "subtitles=Exemple.srt" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium ^
-c:a libmp3lame -ar 44100 -ac 2 ^
Exemple_subs.mp4
Ce qui change dans cette commande :
-c:a libmp3lame: Remplace le copier-coller (copy) par un réencodage propre de l'audio au format MP3 standard.-ar 44100: Force la fréquence d'échantillonnage à 44.1 kHz, la norme de compatibilité la plus sûre.-ac 2: Force le son en Stéréo (2 canaux). Si la vidéo d'origine possédait une piste en son multicanal 5.1, le décodeur TNT pouvait saturer et rejeter le fichier.
Autre piste : Le format de conteneur (si le MP3 échoue)
Certains enregistreurs TNT (notamment les
marques CGV, Strong ou Sagemcom) préfèrent le format
.MKV ou
.TS
(MPEG-TS) plutôt que le .MP4 pour la lecture de
fichiers externes.Si la commande ci-dessus affiche encore une
erreur sur votre écran, changez simplement l'extension du fichier de sortie en
remplaçant
Exemple_subs.mp4 par Exemple_subs.mkv.Si le fichier ne se lance toujours pas, votre
enregistreur affiche-t-il un message d'erreur précis à l'écran (ex: "Format non
supporté", "Codec audio non
géré", ou écran noir) ?
Si lee AAC
fonctionne comment faire ?
Si le format AAC est bien supporté par votre
enregistreur TNT, le problème ne vient plus de l'audio. Le blocage restant est
presque à coup sûr lié à la résolution de l'image (Ex: 1080p à 60 images par seconde) ou au nombre d'images de référence (RefFrames).
Les vidéos YouTube modernes sont souvent
diffusées en 60 images par seconde (fps). Les puces matérielles des anciens
enregistreurs TNT saturent et refusent de lire une vidéo si elle dépasse 30 images par
seconde ou si sa définition est trop haute.
La commande à utiliser pour tester le format AAC valide
Voici la commande qui force une structure
vidéo ultra-standard (1080p maximum à 30 images par seconde, indispensable pour
le matériel de salon) tout en conservant le son en AAC :
ffmpeg -i Exemple.mp4 ^
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,subtitles=Exemple.srt,fps=30" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium -bf 2 -vtag avc1 ^
-c:a aac -b:a 128k -ar 48000 ^
-movflags +faststart ^
Exemple_subs.mp4
Ce que cette commande sécurise en plus :
fps=30: Force la vidéo à un maximum de 30 images par seconde. Si votre fichier d'origine était en 50fps ou 60fps, l'enregistreur TNT l'ignorait par sécurité.scale=1920:1080...: Redimensionne proprement la vidéo en Full HD standard (1080p) maximum sans déformer l'image (elle ajoute des bandes noires si la vidéo YouTube a un format original ou vertical), garantissant que le décodeur matériel peut l'afficher.
Si cela ne fonctionne toujours pas (Le test ultime en 720p)
Certains enregistreurs TNT low-cost ou plus
anciens ne gèrent tout simplement pas le 1080p pour les fichiers externes (clés
USB) et se limitent au 720p HD.
Si la commande ci-dessus échoue, remplacez
simplement les valeurs
1920:1080 par 1280:720 dans les filtres de
la commande comme ceci :ffmpeg -i Exemple.mp4 ^
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,subtitles=Exemple.srt,fps=30" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.1 -crf 28 -preset medium -bf 2 -vtag avc1 ^
-c:a aac -b:a 128k -ar 48000 ^
-movflags +faststart ^
Exemple_subs.mp4
Quelle est la marque ou le modèle
de votre enregistreur TNT ? Je pourrais vérifier ses limitations techniques
exactes (résolution maximale et codecs officiels) pour cibler instantanément le
bon réglage.
AMTC
DTHD168R
Le décodeur AMTC DTHD168R est un
appareil d'entrée de gamme. Sa puce multimédia USB souffre d'une limitation
majeure : bien qu'il reçoive les chaînes TV en HD (1080i), son lecteur
multimédia USB embarqué bloque ou saccade dès qu'un fichier vidéo dépasse 25 ou 30 images par
seconde, ou si l'agencement interne du fichier MP4
n'est pas optimisé pour le streaming local (indexation manquante). [1]
Pour valider le format vidéo H.264 et le
format audio AAC tout en forçant l'appareil à accepter votre fichier, vous devez
obligatoirement :
- Verrouiller la cadence à 25 ou 30 images par seconde (YouTube fournit souvent du 50 ou 60 fps que l'AMTC rejette).
- Ajouter l'option d'indexation rapide (
-movflags +faststart) pour que la puce lise l'en-tête du fichier dès le début de la clé USB.
La commande FFmpeg définitive pour l'AMTC DTHD168R
Copiez et collez cette commande dans votre
terminal Windows (avec les symboles
^ de saut de ligne) :ffmpeg -i Exemple.mp4 ^
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,subtitles=Exemple.srt,fps=25" ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.0 -crf 26 -preset medium ^
-c:a aac -b:a 128k -ar 48000 ^
-movflags +faststart ^
Exemple_subs.mp4
Pourquoi cette version va débloquer votre lecteur AMTC ?
fps=25: Calque la fluidité sur la norme de diffusion TV française (PAL / 25 images par seconde). Cela soulage instantanément le processeur de votre boîtier AMTC.-movflags +faststart: Déplace les index de la vidéo (les métadonnées) au tout début du fichier.mp4. Sans cela, l'enregistreur TNT cherche les informations à la fin du fichier, plante sur la clé USB et affiche "Format non supporté".-level 4.0: Descend d'un cran la complexité du décodage matériel (la commande précédente était en 4.1) pour correspondre exactement aux puces économiques utilisées par AMTC. [1]-c:a aac -b:a 128k -ar 48000: Encode proprement l'audio en AAC standard stéréo échantillonné à 48 kHz, qui est le format natif de la TNT HD en France.
Si l'appareil affiche toujours un écran noir,
la puce USB de l'AMTC préfère peut-être le format de conteneur d'enregistrement
brut. Voulez-vous que l'on teste la même configuration mais encapsulée dans un
fichier
.mkv ou
.ts
? [2] Avec yt-dlp --js-runtimes
deno ^ --extractor-args youtube:player_client=web_embedded ^ -f
bv*[vcodec*=avc1]+ba[acodec*=mp4a]/b[ext=mp4] ^ --write-subs ^ --write-auto-subs
^ --sub-langs fr ^ --embed-subs ^ --convert-subs srt ^ --merge-output-format mp4
^ https://youtu.be/7b1yIgBorSc , J obtiens une vidéo qui fonctionne sur mon
enregistreur TNT AMTC DTHD168R . Puis je rajpoute des sous-titres avec ffmpeg -i
Exemple.mp4 ^ -vf
scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,subtitles=Exemple.srt,fps=25
^ -c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.0 -crf 26 -preset
medium ^ -c:a aac -b:a 128k -ar 48000 ^ -movflags +faststart ^ Exemple_subs.mp4
, ça marche sur l Ordi, mais la vidéo n est pas acceptée par mon enregistreur
TNT AMTC DTHD168R.
Le problème vient du fait que votre
enregistreur TNT AMTC DTHD168R possède un processeur matériel très strict. La commande FFmpeg
que vous utilisez recrée entièrement la vidéo
(encodage), ce qui modifie des paramètres structurels
invisibles que votre appareil rejette, contrairement à
yt-dlp qui télécharge le
flux brut directement compatible.Voici les causes probables du rejet et comment
résoudre le problème sans perdre de temps en réencodage.
Pourquoi votre enregistreur rejette la vidéo FFmpeg ?
- Le format audio (AAC-LC vs AAC-MAIN) : FFmpeg utilise par défaut le profil AAC-LC, mais selon la version, il peut insérer des données d'en-tête (ADTS) que les puces de salon bas de gamme ne gèrent pas.
- L'organisation des paquets (Muxing) : L'option
-movflags +faststartdéplace l'index (moov atom) au début du fichier. C'est parfait pour le streaming web, mais cela perturbe souvent les vieux lecteurs multimédias matériels qui s'attendent à le trouver à la fin. - Le conteneur MP4 :
Ces appareils préfèrent souvent le format MKV ou AVI pour la lecture de fichiers
externes, ou un codec vidéo strictement limité en encodage (comme le format
Xvidou unH.264très basique sans options avancées de compression).
La Solution IDÉALE : L'incrustation directe avec yt-dlp
Pourquoi faire l'incrustation avec FFmpeg dans
un second temps alors que yt-dlp peut demander à FFmpeg d'incruster (hardcoder) les
sous-titres directement pendant le téléchargement ?
Puisque le fichier de base de
yt-dlp fonctionne sur votre
appareil, laissez-le tout gérer d'un coup. Utilisez cette commande unique :yt-dlp --js-runtimes deno ^
--extractor-args youtube:player_client=web_embedded ^
-f bv*[vcodec*=avc1]+ba[acodec*=mp4a]/b[ext=mp4] ^
--write-subs --write-auto-subs --sub-langs fr ^
--embed-subs --convert-subs srt ^
--exec "ffmpeg -i {} -vf subtitles={}:force_style='FontSize=12' -c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.0 -crf 26 -c:a copy -merge-output-format mp4 {}.subs.mp4" ^
https://youtu.be/7b1yIgBorSc
(Note : L'argument
--exec va forcer yt-dlp à
passer le fichier téléchargé proprement à FFmpeg pour graver les sous-titres en
copiant l'audio à l'identique -c:a
copy).La Solution de secours : Corriger votre commande FFmpeg
Si vous devez absolument utiliser votre
méthode en deux étapes, modifiez votre commande FFmpeg pour retirer le faststart et harmoniser l'audio.
Essayez cette version corrigée :
ffmpeg -i Exemple.mp4 ^
-vf scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,subtitles=Exemple.srt,fps=25 ^
-c:v libx264 -pix_fmt yuv420p -profile:v main -level 4.0 -crf 26 -preset medium ^
-c:a copy ^
Exemple_subs.mp4
Ce qui change ici :
-c:a copy: On ne touche pas à l'audio. On garde exactement la piste récupérée paryt-dlpqui, elle, plaisait à votre enregistreur.- Suppression de
-movflags +faststart: L'index reste à la fin du fichier, une structure standard pour les puces TNT de salon.
Si vous souhaitez affiner l'affichage des
sous-titres (comme la taille de la police ou la couleur sur
l'écran de votre TV), faites-le-moi savoir !