Индивидуально перекодируйте сегменты HLS с помощью FFMPEG - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь перекодировать видео в 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.

Спасибо, что пытались мне помочь!

...