Я могу запустить такую команду для обычных видео (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 обнаруживает нормальные ключевые кадры?
Примечания:
Я использую linux ubuntu.
Я создаю сценарий bash с помощью avconv
, но другие инструменты с поддержкой сценариев (инструменты командной строки) приемлемы, если они работают.
PS. это лучше подходит для unix stackexchange?
-fflags +genpts
не получится, сейчас пытаюсь обновить (ubu16.04) 06.04.2019ffmpeg -flags +global_header -fflags +genpts -i videofile.avi -c copy -segment_time 60 -f segment "videofile-part.%03d.mp4"
(+global_header должен присоединиться к ним позже, если я не ошибаюсь). Хитрость заключалась в том, что параметр-fflags +genpts
должен быть ПЕРЕД параметром-i
, иначе он не разделится! Теперь я не знаю, будет ли работать старый ffmpeg, так как я не буду понижать его версию. Я буду смотреть части и снова присоединяюсь, чтобы увидеть, все ли хорошо :) 06.04.2019