ffprobe получает количество последнего аудио / видео пакета - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть mov файл, который мне нужен, чтобы получить окончание pts для аудио и видео потоков.Я могу сделать это, выполнив следующее (вручную):

ffprobe -show_packets file.mov

, что дает мне вывод, как (со многими другими пакетами, конечно):

[PACKET]
codec_type=audio
stream_index=0
pts=221184
pts_time=5.015510
dts=221184
dts_time=5.015510
duration=580
duration_time=0.013152
convergence_duration=N/A
convergence_duration_time=N/A
size=304
pos=4833575
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=1
pts=29800
pts_time=4.966667
dts=29400
dts_time=4.900000
duration=200
duration_time=0.033333
convergence_duration=N/A
convergence_duration_time=N/A
size=20707
pos=4837376
flags=__
[/PACKET]

В приведенном выше сценарии конечное значение pts равно 221764 для аудио и 30000 для видео (pts + duration).

Мне было интересно, есть ли простой способ получить финалпакет аудио / видео пакетов напрямую через флаги ffprobe или путем интеллектуального анализа вывода.

1 Ответ

0 голосов
/ 17 ноября 2018

Выполнить

ffprobe -v 0 -show_entries packet=pts,duration -of compact=p=0:nk=1 -read_intervals 999999 -select_streams v video.mp4  | tail -1

Это напечатает значения в виде 118231200|3600, где первое значение - это число точек, а второе - длительность последнего пакета видеопотока.

Вам просто нужно убедиться, что значение -read_intervals в секундах равно или больше, чем продолжительность файла.999999 является безопасным значением.Хвост необходим для видеопотоков, так как ffprobe напечатает всю последнюю GOP.

...