Как разделить видео со странными ключевыми кадрами "pkt_pts_time = N / A"? - PullRequest
0 голосов
/ 06 апреля 2019

Я могу запустить такую ​​команду на обычных видео (h264 на mkv):
avconv -i videofile.avi -c copy -flags +global_header -segment_time 60 -f segment "videofile-part."%03d".mp4"

, но на видео с этим форматом и контейнером (те, которые у меня есть по крайней мере) это не получится:
MPEG-4 в файле .avi

, если я проверю его, я получу ключевые кадры, которые игнорируются сплиттером:
ffprobe videofile.avi -show_entries frame=key_frame,pict_type,pkt_pts_time -select_streams v -of compact -v 0 | grep frame=1 (из этого совета https://stackoverflow.com/a/48687236/1422630)

и я получаю многое из этого:
"frame | key_frame = 1 | pkt_pts_time = N / A | pict_type = I"

нормальное видео будет выводить строки, подобные этой:
"frame | key_frame = 1 | pkt_pts_time = 44.252542 | pict_type = I"

, поэтому для работы avconv требуется действительное значение "pkt_pts_time" ...

В качестве альтернативы (не требуется командаинструмент линии):
любой быстрый способ добавить правильные ключевые кадры (pkt_pts_time со значением) к видео, чтобы его можно было правильно разделить с помощью avconv?
или, может быть, мне следует быстро преобразовать большое видео (скопироваввидео поток) в формат, который имеет нормальные ключевые кадры, обнаруженные avconv?

Obs.:
Я использую Linux UBUntu.
Я создаю сценарий bash с использованием avconv, но другие скриптовые инструменты (инструменты командной строки) приемлемы, если они работают.

PS.: будет лучшена unix stackexchange?

1 Ответ

1 голос
/ 06 апреля 2019

Используя последнюю версию ffmpeg (4.0+), используйте

ffmpeg -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"

Genpts назначит недостающий PTS.

...