Я пытаюсь перекодировать видео в HLS, сначала разбивая видео на сегменты без изменений кодировки, а затем перекодируя все сегменты по отдельности. Я пытаюсь добиться этого, поэтому я могу перекодировать видео в нескольких экземплярах EC2 параллельно, чтобы сэкономить время.
Я использую этот скрипт прямо сейчас
# Split input file in multiple segments
ffmpeg -hide_banner -y -i $input -c copy -map 0 -an -segment_time 4 -reset_timestamps 1 -f segment output%03d.webm
# Transcode each segments in multiple resolutions
find . -name 'output*.webm' -exec ffmpeg -hide_banner -y -i {} \
-vf "scale=-2:360" -c:v libx264 -profile:v main -crf 20 -sc_threshold 0 -b:v 800k -maxrate 856k -bufsize 1200k {}.360p.ts \
-vf "scale=-2:480" -c:v libx264 -profile:v main -crf 20 -sc_threshold 0 -b:v 1400k -maxrate 1498k -bufsize 2100k {}.480p.ts \
-vf "scale=-2:720" -c:v libx264 -profile:v main -crf 20 -sc_threshold 0 -b:v 2800k -maxrate 2996k -bufsize 4200k {}.720p.ts \
-vf "scale=-2:1080" -c:v libx264 -profile:v main -crf 20 -sc_threshold 0 -b:v 5000k -maxrate 5350k -bufsize 7500k {}.1080p.ts \;
Но потом, когда я попытался получить продолжительность всех сегментов, чтобы создать плейлист m3u8 (с помощью команды ниже)
# List segments duration
find . -name 'output*.webm.360p.ts' \
-exec echo -n {} \; \
-exec ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {} \;
, я получил этот результат
output000.webm.360p.ts 5.120000
output001.webm.360p.ts 5.120000
output002.webm.360p.ts 4.400000
output003.webm.360p.ts 5.480000
output004.webm.360p.ts 0.360000
output005.webm.360p.ts 5.120000
output006.webm.360p.ts 4.960000
output007.webm.360p.ts 0.001000
Я не могу понять, почему мой output004
длится всего 0.360000
секунд.
Когда я пытался воспроизвести его с VL C, он просто показывает один или два кадра, а затем main decoder error: buffer deadlock prevented
.
Спасибо, что пытались мне помочь!