couper avec ffmpeg donne quelques secondes d'écran noir, comment puis-je résoudre ce problème?

8

j'utilise cette commande pour couper un segment d'une vidéo à partir de la ligne de commande

ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1

et je l'appelle comme

cut.bat video.mp4 001:23:45:678 10

et comme prévu, j'obtiens un video_cut.mp4 avec 10 secondes de la vidéo d'origine, le problème est que quelques secondes du fichier résultant sont un écran noir avec audio, pourquoi cela se produit-il et comment le corriger?

un gars
la source
% ~ n1_cut% ~ x1 que signifie cette partie de la commande?
ScipioAfricanus
@ScipioAfricanus %~n1développe% 1 en un nom de fichier, ou si seul un chemin d'accès est présent (sans barre oblique inverse) - le dernier dossier de ce chemin d'accès et %~x1développe% 1 en un fichier eXtension uniquement - .txt source: superuser.com/questions/ 224416 /…
Shayan

Réponses:

8

La plupart des vidéos utilisent des codecs qui effectuent une compression temporelle, donc un point de coupure spécifié peut s'appuyer sur des images avant (et après) ce point de coupure pour être décodé correctement. Ainsi, lorsque vous utilisez ffmpeg pour découper des vidéos et utiliser le copymode, ffmpeg doit inclure toutes les images avant et après le segment découpé qui sont nécessaires pour décoder correctement le segment.

Donc, vous avez deux options, utilisez le mode copie mais réglez un commutateur qui permettra à tous les joueurs de lire correctement ces fichiers

ffmpeg -ss %2 -t %3 -i %1 -vcodec copy -acodec copy -avoid_negative_ts make_zero %~n1_cut%~x1

(cela entraînera probablement une sortie qui commence avant votre point de coupure)

ou ré-encoder les flux

ffmpeg -ss %2 -t %3 -i %1 %~n1_cut%~x1
Gyan
la source
Bien que le ré-encodage soit plus lent, il produira de meilleurs résultats, car avec l'autre solution, la vidéo peut être plus longue que celle spécifiée dans l' -toption.
totymedli
@Gyan Que fait %? J'ai essayé de rechercher ffmpeg.org/ffmpeg.html mais je ne trouve pas l'utilisation.
Shayan
Comme votre réponse le suggérait, j'ai utilisé les deux -sset -tavant -iet cela a fonctionné, avant, je n'ai mis que -ssavant -iet -taprès, donc ça n'a pas fonctionné.
Shayan
1

https://github.com/mifi/lossless-cut/pull/13

Lorsque j'exécute ffmpeg avec les arguments dans cet ordre -i ... -ss ... -t ..., il produit un fichier vidéo qui n'a pas de vidéo pendant quelques secondes initiales. (pour autant que je puisse comprendre, c'est parce qu'il ne cherche pas une image clé?)

Si je change l'ordre en -ss ... -i ... -t ..., les vidéos coupées résultantes sont lues correctement.

ma ffmpeg -version

Gerard Wensink
la source
J'ai essayé -ssavant -imais cela n'a pas fonctionné sur mon fichier mp4.
Shayan
A travaillé pour moi, merci. Simplement changé l'ordre des paramètres. ffmpeg version 3.2.12-1 ~ deb9u1
shukshin.ivan
En fait, cela déplace simplement la durée du blanc à la fin de la vidéo
Honghao Zhang