
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (68)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (12400)
-
ffmpeg extracting frames from a 60 fps video
15 juillet 2022, par ggt bndI would like to extract frames from a 60 fps video, all of them I used the ffmpeg code
sevral times on lower fps videos
' ffmpeg -i test.mp4 -qscale:v 1 -qmin 1 -qmax 1 -vsync 0 tmp_frames/frame%08d.jpg "
and it works just fine, knowing that the default fps is 24
how can I change it so it extract at 60 fps
ffmpeg version " ffmpeg-2022-07-06-git-03d81a044a-full_build "


-
Strange problem with inotifywait, while do and ffmpeg
27 juillet 2022, par cluelessdevLinux Mint 20.3 up to date.
I'd like to convert and rename with ffmpeg some files which appear in a folder.
When not using the ffmpeg line everything works fine (note ffmpeg is commented out here)
`


#!/bin/bash
rm flist.txt
watchdir=/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/
startdate=54
starttime=32
while read -r fullpath 
do
 echo "fullpath '$fullpath'" >> flist.txt
 lenght=${#fullpath}
 echo 'lenght ' $lenght >> flist.txt 
 basedate=${fullpath:lenght-startdate:4}${fullpath:lenght-startdate+5:2}${fullpath:lenght-startdate+8:2}
 basetime=${fullpath:lenght-starttime:2}${fullpath:lenght-starttime+3:2}${fullpath:lenght-starttime+6:2} 
 echo basedate "'$basedate'" >> flist.txt
 echo basetime "'$basetime'" >> flist.txt
 newfilename="/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/test2/recordings-convert/"$basedate"-"$basetime"-doorcam".mkv
 # ffmpeg -y -i $fullpath -c:v copy -movflags +faststart $newfilename &> /dev/null
done < <(inotifywait -m -r "$watchdir" --format '%w%f' -e create -e moved_to | grep '\.dav$' --line-buffered)



This does produce the desired result without ffmeg conversion :


$cat flist.txt
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.01.33-00.01.55[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '000133'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.29.26-00.29.48[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '002926'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.33.09-00.33.32[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '003309'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/02/02.23.35-02.23.56[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '022335'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/02/02.27.19-02.27.40[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '022719'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/04/04.08.22-04.08.43[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '040822'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.50.14-06.50.40[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '065014'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.50.43-06.51.28[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '065043'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.56.56-06.58.02[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '065656'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/09/09.18.31-09.19.09[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '091831'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/09/09.47.54-09.55.00[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '094754'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/09/09.55.00-09.55.50[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '095500'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/10/10.20.23-10.20.44[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '102023'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/10/10.24.24-10.24.44[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '102424'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/11/11.00.39-11.01.34[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '110039'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/13/13.26.22-13.26.53[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '132622'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.00.09-16.01.04[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '160009'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.38.46-16.39.15[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '163846'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.56.05-16.56.30[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '165605'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.56.30-16.57.05[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '165630'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.24.56-19.25.33[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '192456'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.51.13-19.52.00[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '195113'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.52.37-19.53.10[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '195237'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.05.29-20.06.02[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '200529'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.26.44-20.27.38[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '202644'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.35.20-20.35.41[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '203520'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.38.57-20.39.17[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '203857'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.40.49-20.41.11[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '204049'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.44.27-20.44.47[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '204427'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.49.09-20.49.46[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '204909'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.51.09-20.51.58[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '205109'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.33.25-22.33.46[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '223325'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.38.48-22.39.10[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '223848'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.50.14-22.50.35[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '225014'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.04.43-23.05.03[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '230443'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.08.18-23.08.40[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '230818'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.19.51-23.20.11[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '231951'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.23.27-23.23.48[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '232327'



`
If I remove the comment and do the ffmpeg thing it fails for some files because $fullpath is wrong :


$cat flist.txt
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.01.33-00.01.55[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '000133'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.29.26-00.29.48[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '002926'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/00/00.33.09-00.33.32[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '003309'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/02/02.23.35-02.23.56[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '022335'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/02/02.27.19-02.27.40[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '022719'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/04/04.08.22-04.08.43[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '040822'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.50.14-06.50.40[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '065014'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.50.43-06.51.28[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '065043'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/06/06.56.56-06.58.02[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '065656'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/09/09.18.31-09.19.09[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '091831'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/09/09.47.54-09.55.00[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '094754'
fullpath '1/dav/09/09.55.00-09.55.50[M][0@0][0].dav'
lenght 41
basedate '][0@][].'
basetime '095500'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/10/10.20.23-10.20.44[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '102023'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/10/10.24.24-10.24.44[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '102424'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/11/11.00.39-11.01.34[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '110039'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/13/13.26.22-13.26.53[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '132622'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.00.09-16.01.04[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '160009'
fullpath 'dia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.38.46-16.39.15[M][0@0][0].dav'
lenght 116
basedate '20220611'
basetime '163846'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.56.05-16.56.30[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '165605'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/16/16.56.30-16.57.05[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '165630'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.24.56-19.25.33[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '192456'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.51.13-19.52.00[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '195113'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/19/19.52.37-19.53.10[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '195237'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.05.29-20.06.02[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '200529'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.26.44-20.27.38[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '202644'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.35.20-20.35.41[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '203520'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.38.57-20.39.17[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '203857'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.40.49-20.41.11[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '204049'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.44.27-20.44.47[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '204427'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.49.09-20.49.46[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '204909'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/20/20.51.09-20.51.58[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '205109'
fullpath 'edia/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.33.25-22.33.46[M][0@0][0].dav'
lenght 117
basedate '20220611'
basetime '223325'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.38.48-22.39.10[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '223848'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/22/22.50.14-22.50.35[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '225014'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.04.43-23.05.03[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '230443'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.08.18-23.08.40[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '230818'
fullpath '/media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.19.51-23.20.11[M][0@0][0].dav'
lenght 119
basedate '20220611'
basetime '231951'
fullpath 'media/mark/d1d75ed6-f3a5-433b-9090-d95191275f6c/download/camera/2022-06-11/001/dav/23/23.23.27-23.23.48[M][0@0][0].dav'
lenght 118
basedate '20220611'
basetime '232327'



So why does it fail when ffmpeg is not commented out ?


Follow-up : found this post


https://unix.stackexchange.com/questions/241535/problem-with-ffmpeg-in-bash-loop


I think this relates to my problem but I don't know how to change my code accordingly.


Edit2, I think I found the solution


ffmpeg -y -i $fullpath -c:v copy -movflags +faststart $newfilename < /dev/null &> /dev/null;



-
ffmpeg concat doesn't sync to manual frame by frame concatenation
5 juillet 2022, par memoI have hundreds of short (10-120seconds) videos (H264 mp4) with audio (aac). (let's call these 'clips'). All identical video and audio codecs, resolution, framerate, crf, pixel format, sample rate etc.


concat_demux :


If I concat these with ffmpeg concat (demuxer), I get a single nice H264 mp4 with audio perfectly synced to the video (as expected).


cmd_args = ['ffmpeg',
 '-f concat',
 '-safe 0',
 f'-i "{output_filelist_path}"',
 '-c copy',
 '-y',
 '-r 30', # trying this out of desperation
 f'"{output_concat_demux}"'
 ]

cmd = ' '.join(cmd_args)
r = subprocess.call(cmd, shell=True, cwd=args.output_dir)



frame_by_frame :


However, if I manually iterate every frame of every clip video and write the frames to an mp4 using skvideo.io, this video drifts out of sync with the concat_demux version.


input_dict = { '-r':str(fps) } 
output_dict = { '-r':str(fps), '-pix_fmt':'yuv420p', '-vcodec':'libx264', '-crf':'18' }
video_writer = skvideo.io.FFmpegWriter(output_path, inputdict=input_dict, outputdict=output_dict) 

for video_path in video_paths:
 video = skvideo.io.vread(video_path) # read all frames into np.array
 for frame in video:
 video_writer.writeFrame(frame)
video_writer.close()



When I compare these two files in a video editor (e.g. AfterEffects) and step through frame by frame, I can see that with every new clip, the frame_by_frame version slips 1 or 2 frames ahead of the ffmpeg concat_demux version. What is going on ? How can I fix - or at least debug - this ?


On a side note, I do need to concatenate manually frame by frame, as I'm also doing a ton of other stuff (triggering events on clip change, overlaying additional elements etc). And I need to be able to sync a concatenated audio. I was hoping to concatenate the video manually frame by frame and do my post-processing, and then mux with the audio from the ffmpeg concat_demux version. But alas they drift out of sync.



(I've found quite a few posts on SO where the problem is using ffmpeg concat results in videos which are out of sync with the audio. However, this is not my problem. My video created with ffmpeg concat is perfectly in sync with the audio, but it's out of sync with a manually frame-by-frame concatenated video.)



Update - concat_protocol


I've tried using the concat protocol. Now the output of this gives a file where the video is frame synced to the frame_by_frame version, BUT the audio is synced to the audio of the concat_demux version. So its audio is out of sync with the video.


intermediate_paths = []
for p in clip_file_list:
 intermediate_path = os.path.join(args.output_dir, 'intermediate', os.path.basename(p) + '.ts')
 intermediate_paths.append(intermediate_path)
 cmd_args = ['ffmpeg',
 f'-i "{p}"',
 '-c copy -bsf:v h264_mp4toannexb -f mpegts -y',
 f'"{intermediate_path}"'
 ]

 cmd = ' '.join(cmd_args)
 r = subprocess.call(cmd, shell=True, cwd=args.output_dir)


intermediate_paths = '|'.join(intermediate_paths)
cmd_args = ['ffmpeg',
 f'-i "concat:{intermediate_paths}"',
 '-c copy -bsf:a aac_adtstoasc',
 f'"{output_concat_path}"'
 ]

cmd = ' '.join(cmd_args)
r = subprocess.call(cmd, shell=True, cwd=args.output_dir)



I am getting loads of errors like below


corrupt input packet in stream 0
[mp4 @ 0x137e043d0] Non-monotonous DTS in output stream 0:1; previous: 83027966, current: 83027198; changing to 83027967. This may result in incorrect timestamps in the output file.




here's the info on the two output files. Input #0 is the ffmpeg concat_demux. Input #1 is the manual frame-by-frame. Note the concat.mp4 has a framerate of 29.94 fps. I'm not sure if this is the problem. I couldn't figure out how to make this 30 (see '-r 30' in the ffmpeg concat command above)


ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
 built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
 configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
 libavutil 57. 17.100 / 57. 17.100
 libavcodec 59. 18.100 / 59. 18.100
 libavformat 59. 16.100 / 59. 16.100
 libavdevice 59. 4.100 / 59. 4.100
 libavfilter 8. 24.100 / 8. 24.100
 libswscale 6. 4.100 / 6. 4.100
 libswresample 4. 3.100 / 4. 3.100
 libpostproc 56. 3.100 / 56. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clips_concat.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf59.16.100
 Duration: 00:01:43.22, start: 0.000000, bitrate: 5412 kb/s
 Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 5276 kb/s, 29.94 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'clips_frames.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf59.16.100
 Duration: 00:01:43.00, start: 0.000000, bitrate: 4917 kb/s
 Stream #1:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080, 4914 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]




here's info on first few clips (the manual concat is already 2 frames out of sync with the ffmpeg concat version by the second clip !)


ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
 built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
 configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
 libavutil 57. 17.100 / 57. 17.100
 libavcodec 59. 18.100 / 59. 18.100
 libavformat 59. 16.100 / 59. 16.100
 libavdevice 59. 4.100 / 59. 4.100
 libavfilter 8. 24.100 / 8. 24.100
 libswscale 6. 4.100 / 6. 4.100
 libswresample 4. 3.100 / 4. 3.100
 libpostproc 56. 3.100 / 56. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_0.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:05.02, start: 0.000000, bitrate: 3944 kb/s
 Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 3818 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 131 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_1.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:05.02, start: 0.000000, bitrate: 4557 kb/s
 Stream #1:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 4438 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #1:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_2.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:11.02, start: 0.000000, bitrate: 5447 kb/s
 Stream #2:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 5320 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #2:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_3.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:11.02, start: 0.000000, bitrate: 5978 kb/s
 Stream #3:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 5851 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #3:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #4, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_4.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:16.02, start: 0.000000, bitrate: 6570 kb/s
 Stream #4:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 6441 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #4:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #5, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_5.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:13.02, start: 0.000000, bitrate: 5069 kb/s
 Stream #5:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 4940 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #5:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #6, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_6.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:22.02, start: 0.000000, bitrate: 4775 kb/s
 Stream #6:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 4642 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #6:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]
Input #7, mov,mp4,m4a,3gp,3g2,mj2, from 'clip_1080px_7.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:22.02, start: 0.000000, bitrate: 5402 kb/s
 Stream #7:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1080x1080 [SAR 1:1 DAR 1:1], 5269 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
 Metadata:
 handler_name : VideoHandler
 vendor_id : [0][0][0][0]
 Stream #7:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 handler_name : SoundHandler
 vendor_id : [0][0][0][0]