Au moins sur FFmpeg 2.8.x (mais oldie devrait également fonctionner), vous pouvez utiliser lavfi
comme format d’entrée et graphique de filtrage complexe l’utilisation de movie
et setpts
filters comme argument d’ -i
option.
Prochaine commande faisant ce travail pour vous:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Zéro loop=
argument signifie une boucle infinie. Les valeurs supérieures à zéro définissent les comptes répétés. setpts
les filtres requis pour l'ajustement PTS en fonction des répétitions suivantes et ultérieures, sinon la plupart des multiplexeurs en sortie échoueront avec une augmentation de PTS non monotone: la boucle ne recalcule pas PTS.
Notez que l'utilisation de filtres supposant que les images de contournement sans décodage / encodage est impossible: par leur conception, les filtres ne traitent que des images décodées.
FFmpeg 2.8.2: nouvelle option d’entrée -stream_loop
introduite. J'ai d'abord l'air que cela fonctionne plus simple et permet de copier du contenu sans transcodage:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Mais il ne recalcule pas le PTS et le fichier de sortie est incorrect. Si vous ajoutez un filtre pour corriger le PTS (voir setpts
), vous devez -c copy
également le supprimer . Seuls les filtres de flux de données peuvent traiter les paquets codés, mais il n’existe aucun filtre de flux de données pour corriger le PTS (voir: https://ffmpeg.org/ffmpeg-bitstream-filters.html ).
Dans tous les cas, ffmpeg lors du second passage échoue avec l'erreur:
input.mp4: Resource temporarily unavailable
Solution connue pour moi : utiliser un conteneur pour un fichier d’entrée sans limite de PTS (conteneur en continu). L'un d'entre eux, connu de moi, est MPEG-TS. Vous pouvez donc convertir simplement votre fichier MP4 en MPEG-TS:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
Et utilisez la commande suivante pour composer le fichier infinity:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(les filtres de flux binaires ne doivent être utilisés que si nécessaire, sur mes échantillons, il est requis)
FFmpeg> = 2.8.2 est requis dans ce cas.