Как использовать ffprobe для получения определенной информации о файлах mp4 / h.264

13

Я всего лишь скромный PHP-разработчик, которому поручено получить некоторую основную информацию о сотнях тысяч видеофайлов. У меня было немного удачи , используя FFmpeg экстрагирования video bitrate, video width, video height, duration, и aspect ratioот них, но с коэффициентом ошибок около 5%, это все еще оставляет меня с огромным количеством файлов , которые я не знаю , как бороться с. Видео действительно воспроизводится, но огромное количество данных, которые возвращает ffmpeg, сбивает меня с толку относительно того, как анализировать возвращаемый XML, чтобы найти то, что мне нужно, при всех условиях, с которыми я, похоже, сталкиваюсь. (Файлы представляют собой коллекцию за последние 15 лет или около того, некоторые были недавно закодированы, другие преобразованы несколько лет назад)

Во всяком случае, я нашел следующее использование ffprobeдля получения продолжительности и надеялся, что кто-то здесь, кто понимает сложности использования ffmpeg & ffprobe, будет достаточно любезен, чтобы помочь мне найти другие нужные мне значения более простым способом, чем сумасшедший код, который я создаю, чтобы пролистать полные результаты ffmpeg.

ffprobe -i "video.mp4" -show_entries format=duration -v quiet -of csv="p=0"

Большое спасибо заранее.

ПОЯСНЕНИЯ:

Я должен добавить, что с помощью нижеприведенного cmd я могу «видеть» то, что мне нужно, но я не понимаю, как извлечь то, что мне нужно, например, получить битрейт VIDEO и подавить / игнорировать битрейт AUDIO или определить, какой из 2 различные длительности использования (длительность аудио / видео?)

C:\>ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4

duration=1712.000000
bit_rate=64000
width=320
height=240
duration=1711.946113
bit_rate=359827
duration=1712.000000
bit_rate=N/A
duration=1712.000000
bit_rate=N/A
ВВП
источник

Ответы:

17

Если вы хотите получить информацию только из первого видеопотока, используйте -select_streams v:0:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration,bit_rate -of default=noprint_wrappers=1 input.mp4

Пример вывода:

width=640
height=480
duration=10.000000
bit_rate=942704
  • Для просмотра списка всех записей используйте -show_streamsи / или -show_formatвместо -show_entries.
  • См. Документация FFprobe: Writers для различных стилей форматирования вывода.
  • Смотрите FFmpeg Wiki: FFprobe для большего количества примеров.
llogan
источник
Большое спасибо за помощь .... Я должен был принять другой ответ только потому, что меня сначала предупредили об этом, и он добился цели ...
ВВП
@GDP Пожалуйста, примите во внимание: в этом случае сначала уведомляется, потому что это последний ответ.
p2or
@ Плохо Я отношусь к точке зрения довольно серьезно, но этот ответ не был на моем экране, чтобы принять, пока я не приму другой, затем он появился, таким образом, немедленное извинение. Извините всех ... на самом деле не хотел обидеть.
ВВП
9

С https://trac.ffmpeg.org/wiki/FFprobeTips

Если вы хотите получить битовую скорость 1-го видео потока, вы можете использовать:

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4

Где -select_steams v:0выбирает 1-й поток видео и :nokey=1дает значение без ключа. Вы также можете извлечь информацию, отправив ее в grep, но я не уверен, доступна ли она в вашей системе.

ffprobe -v error -show_entries stream=width,height,bit_rate,duration -of default=noprint_wrappers=1 input.mp4 | grep -oP "(?<=bit_rate\=)[0-9]+"

Надеюсь это поможет!

moorej
источник
"Тяга к Грэпу" ... звучит как то, что я мог бы сделать, будучи подростком, лол ... СПАСИБО за помощь!
ВВП
Спасибо @GDP, но LordNeckbeard - это ответ, который вы, вероятно, должны принять, так как он был опубликован первым
moorej