J'ai un tas de segments ts décrits par un seul fichier index.m3u8:
index.m3u8
segment1_0_av.ts
segment2_0_av.ts
segment3_0_av.ts
segment4_0_av.ts
segment5_0_av.ts
Je sais qu'ils sont tous codés de la même manière. ffprobe me donne ce qui suit:
Input #0, mpegts, from 'segment1_0_av.ts':
Duration: 00:00:10.00, start: 0.100511, bitrate: 1251 kb/s
Program 1
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 25 tbc
Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 105 kb/s
Stream #0:2[0x102]: Unknown: none ([21][0][0][0] / 0x0015)
Je voudrais les combiner dans un seul conteneur MP4. Mais quand j'essaye des commandes comme:
ffmpeg -f concat -i filelist.txt -c copy output.mp4
là où il génère le fichier filelist.txt à partir du fichier index.m3u8, il se plaint de ne pas pouvoir lire différents fichiers. Mais convertir les fichiers ts eux-mêmes semble bien fonctionner. Je pense que je n'utilise pas ffmpeg correctement.
Comment utiliser ffmpeg pour combiner les fichiers ts décrits par index.m3u8 dans un seul conteneur mp4 à l'aide du codec de copie?
-bsf:a aac_adtstoasc
.ffmpeg copy ...
, elle estcopy ...
(sous Windows)Utiliser copy ou cat pour combiner les fichiers comme la réponse principale actuelle de szatmary peut vous laisser avec un fichier lu bien au-delà de la limite et ne pouvant pas rechercher avec des problèmes de lecture.
Pour combiner correctement ces fichiers, utilisez ffmpeg comme indiqué dans https://trac.ffmpeg.org/wiki/Concatenate . (Installez ffmpeg ici si vous ne l'avez pas déjà https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg .)
Si vous êtes trop paresseux pour lire mon premier lien, vous devez en principe créer un fichier .txt répertoriant tous les fichiers que vous souhaitez combiner de la sorte (dans lequel mon premier lien donne des instructions pour le faire facilement) dans le dossier où vous ' faire la concaténation:
Voici un copier / coller de mon premier lien pour créer un fichier texte si vous avez Windows en ligne de commande, par exemple, mais vous pouvez évidemment créer le fichier manuellement ou comme vous le souhaitez:
Vérifiez que votre fichier .txt est correct et qu'il est correctement formaté!
Après cela, en ligne de commande, lancez:
où 'mylist.txt' est le fichier .txt que vous venez de créer.
Vérifiez si le fichier résultant lit correctement la vidéo. De là, vous pouvez transmux en mp4 comme d'habitude si vous aimez:
la source
for %i in (*.ts) do
ne fonctionne pas correctement pour i> = 10. En dehors de cela, tout fonctionne, merci. En effet, il y avait des problèmes avec le fichier concaténé, sans parler du fait que le fichier créé avec votre méthode était 16% plus petit (j'avais 1400 parties par 400 ko).for i in {1..10}; do echo file \'$i.ts\' >> list.txt ; done
Réponse 2017
Lorsque j'exécute
ffmpeg -i some.ts -c copy some.mp4
une certaine vidéo, le message d'erreur suivant s'affiche:Sans surprise, l'exécution le
ffmpeg -i some.ts -c copy -bsf:a aac_adtstoasc some.mp4
corrige.la source
ffmpeg
et il va maintenant le faire automatiquement.Mettre tous ensemble
En utilisant la réponse de Juan Aquino (et en corrigeant la première commande pour qu'elle soit compatible avec Bash et en utilisant l'ordre naturel des fichiers), ainsi que la réponse de 7vujy0f0hy, un script de travail simple pour un shell Linux Bash est:
la source
La bonne façon de concaténer plusieurs fichiers vidéo de la playlist m3u8 est la suivante:
ffmpeg -i "index.m3u8" -codec copy output.mp4
-codec copy
éviter l'encodage*.mp4
est bien, mais il semble peu lent à multiplexer lorsque la liste de lecture est extraite du Web*.mkv
ou a*.ts
fonctionné mieux pour moila source
Vous pouvez faire la concaténation simple comme ceci (avec bash):
Remplacez
<number>
par le nombre le plus élevé (évidemment). Les variantes avec ffmpeg ne fonctionnaient pas correctement. Le fichier vidéo en sortie bégaitait étrangement.J'utilise la boucle for pour assurer le bon ordre des fichiers. Peut-être que vous n'en avez pas besoin. Peut-être qu'il est même possible de diriger la sortie vers ffmpeg et de la convertir en mp4 à la volée.
la source
Vous pouvez utiliser ces fichiers ts vers ffmpeg et générer le fichier mp4.
cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
ou Si votre nom de fichier n'est pas en ordre,
grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
la source
Toutes les réponses populaires à cette question qui induisent les lecteurs en erreur pour concaténer les fichiers TS avant d'exécuter ffmpeg sont incorrectes. Pour vous assurer que l'audio et la vidéo ne sont pas désynchronisés lors de l'assemblage du flux mp4, vous devez utiliser la fonctionnalité "-f concat" mal documentée mais importante de ffmpeg.
Les deux lignes de code préparatoires créent simplement un fichier contenant une liste de fichiers TS dans ce format de ligne:
la source