web-dev-qa-db-fra.com

Coupez la vidéo et le concaténate à l'aide de FFMPEG - Obtenir «Non monotone DTS dans le flux de sortie» Erreurs

J'ai deux vidéos et j'ai besoin de laisser tomber les deux extrémités pour les deux vidéos et de ne laisser que la partie centrale, puis de concaténer des parties du milieu ensemble. Les deux vidéos sont exactement la même origine - même FPS et même codec.

Ce que j'essaie de faire:

ffmpeg -i 0.mp4 -c:v h264_nvenc -preset fast -rc vbr -qmin 1 -qmax 1 -filter_complex "[0:v]trim=start=01.00:duration=03.00,setpts=PTS-STARTPTS[vmiddle]" -map [vmiddle] middle_0.mp4
ffmpeg -i 1.mp4 -c:v h264_nvenc -preset fast -rc vbr -qmin 1 -qmax 1 -filter_complex "[0:v]trim=start=01.00:duration=03.00,setpts=PTS-STARTPTS[vmiddle]" -map [vmiddle] middle_1.mp4

Ces deux commandes ne coupent que la partie centrale de chaque vidéo, à partir de 01h00 et se terminant à 04h00.

Puis je concaténe des vidéos:

ffmpeg -y -f concat -i concat.txt -c copy concat.mp4

Avec le fichier CONCAT.TXT contenant évidemment:

file 'middle0.mp4'
file 'middle1.mp4'

Mais cela ne fonctionne pas. La vidéo de sortie concat.mp4 contient des problèmes étranges et je reçois beaucoup d'erreurs dans la console:

[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000025ead60] Auto-inserting h264_mp4toannexb bitstream filter
[concat @ 0000000000dd6bc0] DTS 34666 < 45568 out of order
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45568, current: 34666; changing to 45569. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45569, current: 35050; changing to 45570. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45570, current: 35434; changing to 45571. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45571, current: 35818; changing to 45572. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45572, current: 36202; changing to 45573. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45573, current: 36586; changing to 45574. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45574, current: 36970; changing to 45575. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45575, current: 37354; changing to 45576. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45576, current: 37738; changing to 45577. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45577, current: 38122; changing to 45578. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45578, current: 38506; changing to 45579. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45579, current: 38890; changing to 45580. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45580, current: 39274; changing to 45581. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45581, current: 39658; changing to 45582. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45582, current: 40042; changing to 45583. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45583, current: 40426; changing to 45584. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45584, current: 40810; changing to 45585. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45585, current: 41194; changing to 45586. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45586, current: 41578; changing to 45587. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45587, current: 41962; changing to 45588. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45588, current: 42346; changing to 45589. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45589, current: 42730; changing to 45590. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45590, current: 43114; changing to 45591. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45591, current: 43498; changing to 45592. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45592, current: 43882; changing to 45593. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45593, current: 44266; changing to 45594. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45594, current: 44650; changing to 45595. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45595, current: 45034; changing to 45596. This may result in incorrect timestamps in the output file.
[mp4 @ 0000000000ddbfe0] Non-monotonous DTS in output stream 0:0; previous: 45596, current: 45418; changing to 45597. This may result in incorrect timestamps in the output file.

Remarque, je définit déjà la présentation horodatage avec setpts=PTS-STARTPTS Chaque vidéo commence à 00.00. Mais comment réparer ce DTS non monotone? Je suis vraiment coincé, aide s'il vous plaît.

Je sais que je pourrais résoudre ce problème avec une vidéo encodante lors de la concaténation, mais je ne peux vraiment pas me le permettre. Cette étape fait partie du long pipeline et du temps est crucial, je dois le faire avec Copy Codec.

Ajouté:

Demandé ffprobe sortie pour les deux vidéos. Je connais peu à propos de ffprobe Sortie, pourriez-vous s'il vous plaît expliquer ce qui se passe et pourquoi y a-t-il une divergence et que signifie-t-il? (512 étapes dans la 1ère vidéo et 384 étapes en 2e vidéo)

Middley0 (première vidéo)

Middle1 (deuxième vidéo)

5
Aleksei Petrenko

Utilisation

ffmpeg -i 0.mp4 -c:v h264_nvenc -preset fast -rc vbr -qmin 1 -qmax 1 -filter_complex "[0:v]trim=start=01.00:duration=03.00,setpts=PTS-STARTPTS[vmiddle]" -video_track_timescale 18000 -map [vmiddle] middle_0.mp4

Ces numéros de la lecture de la FFProbe sont des horodatages de présentation et informent le lecteur lorsque vous devez afficher chaque image. Ils sont libellés en termes de fuseau horaire. Donc, un PTS de 600 avec une base de temps de 1/1200 (ou une échelle de temps de 1200) signifie un temps d'affichage de 600 * 1/1200 = 0,5 seconde, tout comme un pts de 700 avec une échelle de temps de 1400. Maintenant, quand deux Les vidéos avec des tractions de temps différents sont jointes, le résultat ne sera pas correct car FFMPEG adoptera le fuseau horaire de la première vidéo en tant que valeur définitive. J'ai ajouté un paramètre pour faire ces uniformes.

2
Gyan

Selon https://trac.fmpeg.org/wiki/concaténate

J'ai eu ce même problème. Je cours la version 2.6.3 de FFMPEG sur un Mac. J'ai converti mes clips source au format .MTS avec une balise supplémentaire de -q 0, a mis à jour les extensions dans le fichier texte et définissez mon fichier de sortie sur un fichier .mts lorsque j'ai exécuté la commande CONCAT dans FFMPEG. Ça a marché comme sur des roulettes. Voici mon flux de travail.

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

mise à jour du fichier texte (myList.txt) pour lire:

file clip-1.MTS
file clip-2.MTS

ensuite, dirigez la commande Concat comme suit:

ffmpeg -f concat -i mylist.txt -c copy output.MTS

Travaillé pour moi! Vous pouvez convertir la sortie finale.mts en tout format dont vous avez besoin.

0
Duncan Lindsey