Ceci est une ancienne révision du document !
Table des matières
Sous-titre
srt -> ass
ffmpeg -i sous-titre.srt sous-titre.ass
Sous-titre non détecté
Il faut augmenter probesize
et analyzeduration
.
ffmpeg -analyzeduration 100000k -probesize 100000k -i input.ts
Why does FFmpeg not see the subtitles in my VOB file? Archive du 10/11/2019 le 11/11/2019
Ajout d'un sous-titre à une vidéo
Format de sortie mkv
. mp4 - Use ffmpeg to add text subtitles - Stack Overflow Archive du 29/12/2011 le 11/11/2019
ffmpeg -i entree.mp4 -i sous-titre.fr.ass -i sous-titre.us.ass -c copy -map 0 -map 1 -map 2 -metadata:s:s:0 language=fra -metadata:s:s:1 language=eng sortie.mkv
Le -map 0
indique tous les flux de la vidéo d'origine. Il est important de mettre un map pour chaque fichier d'entrée. Il est possible de mettre X:Y
avec le premier chiffre indique le fichier et le deuxième le flux correspondant. Pour avoir la liste complète, une lecture des entêtes avec avplay
permet de tous les avoir.
-metadata:s:s:0
: s
pour stream
et s
pour subtitle
et 0
pour le premier sous-titre. Si la vidéo d'origine possède déjà un sous-titre et qu'on souhaite définir la langue uniquement pour le deuxième sous-titre, il faut juste mettre -metadata:s:s:1 …
. FFMPEG An Intermediate Guide_subtitle options - Wikibooks, open books for an open world Archive du 26/09/2019 le 11/11/2019
Vérification que ffmpeg
a bien compris la langue (entre parenthèse) :
Stream #0:2(fra): Subtitle: ssa Stream #0:3(eng): Subtitle: ssa Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Stream #1:0 -> #0:2 (copy) Stream #2:0 -> #0:3 (copy)
ffmpeg
choisit de modifier le map
Liste des langues reconnues : language-codes-full.csv, Archive. Base du constat : avlanguage.c, Archive
Fichier source mkv
Après des tests avec VLC, il n'arrive pas à lire les sous-titres du mkv
d'origine. Il faut donc les extraire avant de faire la fusion.
mkvextract tracks input.mkv 2:en.srt ffmpeg -i input.mkv -i fr.srt -i en.srt -map 0:0 -map 0:1 -map 1 -map 2 -c copy -metadata:s:s:0 language=fre -metadata:s:s:1 language=eng output.mkv
On détaille le map
du fichier source pour ne pas prendre le sous-titre d'origine.
Encodage
ffmpeg -i input.mp4 -threads 8 -acodec libfdk_aac -ar 44100 -ab 48000 -profile:a aac_he_v2 -ac 2 -vcodec libx264 -f mp4 -r 30 -aspect 1920:1080 -vf scale=1920:1080 -preset veryslow -crf 22 -pix_fmt yuv420p output.mp4
Choix des paramètres :
-ar
: fréquence de l'audio :44100
ou48000
Hz généralement,-ab
: débit de l'audio : Si <=48000
, utiliser-ab 48000 -acodec libfdk_aac -profile:a aac_he_v2
. Attention,aac_he_v2
ne supporte que la stéréo, pour du mono, utiliseraac_he
.
Il est préférable d'encoder en 10 bits, même si la source est en 8 bits car l'algorithme de compression est meilleur. Why does 10-bit save bandwidth (even when content is 8-bit)? Archive du 2010 le 10/02/2020
Concaténer
Pour les DVD, les pistes sont dans des fichiers découpés avec une taille de 1 Go (1073739776 o). Un cat
suffit pour les concaténer.
cat VTS_01_{1,2,3,4,5,6}.VOB > output.VOB
Pour les fichiers avec l'extension ts
, ffmpeg possède une fonction dédiée :
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy output.ts
m3u8
C'est une liste de fichier .ts
.
ffmpeg.exe -i http://example.com/link.m3u8 -c copy output.mp4