J'essaie de créer quelques scripts d'automatisation pour convertir des vidéos à l'aide de ffmpeg. Les images clés se retrouvent au mauvais endroit lorsque le format est défini sur HLS. Cela se produit avec différentes sources (par exemple une version 4k de Big Buck Bunny ). J'utilise une version compilée statique de ffmpeg 4.1 de John Vansickle .
Lorsque je convertis au format MP4 / h264, les images clés sont dans le code temporel prévu (toutes les 2 secondes). C'est la commande que je lance:
ffmpegparams="-c:a aac -ar 22050 -c:v libx264 -profile:v high
-level 4.1 -crf 20 -r 30 -g 180 -keyint_min 30
-force_key_frames expr:gte(t,n_forced*2)"
ffmpeg -hide_banner -y -i video.mp4 \
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease $ffmpegparams \
-b:v 400k -maxrate 428k -bufsize 600k -b:a 64k video-360p.mp4 \
-vf scale=w=854:h=480:force_original_aspect_ratio=increase $ffmpegparams \
-b:v 600k -maxrate 652k -bufsize 900k -b:a 64k video-480p.mp4 \
-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease $ffmpegparams \
-b:v 1000k -maxrate 1070k -bufsize 1500k -b:a 96k video-720p.mp4
Et la commande que je lance pour voir les images clés est
ffprobe -v error -skip_frame nokey -show_entries frame=pkt_pts_time \
-select_streams v -of csv=p=0 video-360p.mp4
qui sort
0.000000
2.000000
4.000000
[...]
Lorsque je convertis la même vidéo en ts / x264 (HLS), les images clés sont décalées de 1,466 seconde. C'est la commande que j'utilise (le même problème se produit si la sortie est segmentée plutôt que dans un seul fichier)
ffmpegparams="-c:a aac -ar 22050 -c:v libx264 -profile:v high -level 4.1
-crf 20 -r 30 -g 180 -keyint_min 30
-force_key_frames expr:gte(t,n_forced*2) -hls_time 6
-hls_playlist_type vod -hls_flags single_file"
ffmpeg -hide_banner -y -i video.mp4 \
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease $ffmpegparams \
-b:v 400k -maxrate 428k -bufsize 600k -b:a 64k \
-hls_segment_filename "video-360p.ts" video-360p.m3u8 \
-vf scale=w=854:h=480:force_original_aspect_ratio=increase $ffmpegparams \
-b:v 600k -maxrate 652k -bufsize 900k -b:a 64k \
-hls_segment_filename "video-480p.ts" video-480p.m3u8 \
-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease $ffmpegparams \
-b:v 1000k -maxrate 1070k -bufsize 1500k -b:a 64k \
-hls_segment_filename "video-720p.ts" video-720p.m3u8
Et exécutez ffprobe sur l’un des ts
fichiers, j’obtiens les codes temporels suivants pour les images clés:
1.466667
3.466667
5.466667
[...]
Lorsque je lis l'un des ts
fichiers au cours des 1,46 premières secondes, l'image est figée.
Je me demande si quelqu'un pourrait m'aider à comprendre ce qui se passe et comment y remédier.
-muxdelay 0 -muxpreload 0
.
ts
:).
ts
fichier correctement encodé . Mais lire les mêmes ts
fichiers dans videojs n’affiche pas ce comportement du tout. Merci beaucoup @Gyan, ton commentaire m'a fait douter de ce que j'avais déjà essayé et le tester à nouveau.