Como usar o ffprobe para obter determinadas informações sobre arquivos mp4 / h.264

12

Eu sou apenas um desenvolvedor PHP humilde que foi encarregado de recuperar algumas informações básicas sobre centenas de milhares de arquivos de vídeo. Eu tive um pouco de sorte usando ffmpeg extrair o video bitrate, video width, video height, duration, e aspect ratiocom eles, mas com uma taxa de erro de cerca de 5%, isso ainda me deixa com um enorme número de arquivos que eu não sei como lidar com. Os vídeos são reproduzidos, mas a enorme quantidade de dados que o ffmpeg retorna me deixa perplexa quanto à análise do XML retornado para encontrar o que eu preciso com todas as condições que pareço encontrar. (Os arquivos são uma coleção dos últimos 15 anos, alguns codificados recentemente, outros convertidos anos atrás)

De qualquer forma, achei o seguinte uso ffprobepara obter duração e esperava que alguém aqui que entendesse as complexidades do uso de ffmpeg & ffprobe tivesse a gentileza de me ajudar a encontrar os outros valores que eu precisava de uma maneira mais direta do que a código louco Estou me criando criando para acessar os resultados completos do ffmpeg.

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

Muito obrigado antecipadamente.

ESCLARECIMENTO:

Devo acrescentar que, com o cmd abaixo, posso "ver" o que preciso, mas não entendo como extrair o que preciso, por exemplo, recuperando a taxa de bits do VÍDEO e suprimindo / ignorando a taxa de bits do ÁUDIO ou determinando qual das 2 durações diferentes para usar (durações de áudio / vídeo?)

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
PIB
fonte

Respostas:

15

Se você deseja apenas as informações do primeiro fluxo de vídeo, use -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

Exemplo de saída:

width=640
height=480
duration=10.000000
bit_rate=942704
llogan
fonte
Agradecimentos tanto para o ajudar .... eu tinha que aceitar a outra resposta só porque eu estava alertado de que em primeiro lugar, e que fez o truque ..
PIB
@GDP Por favor, considere: notificado primeiro neste caso, porque é a resposta mais recente.
p2ou 9/09/15
@poor Eu levo muito a sério o ponto de representante, mas essa resposta não estava na minha tela para aceitar até eu aceitar o outro, então apareceu, portanto, o pedido de desculpas imediato. Desculpe todo mundo ... realmente não quis ofender.
PIB
8

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

Se você deseja obter o bit_rate do 1º fluxo de vídeo, pode usar:

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

Onde -select_steams v:0está selecionando o 1º fluxo de vídeo e :nokey=1fornece o valor sem a tecla Você também pode extrair as informações canalizando-as para grep, mas não tenho certeza se elas estão disponíveis no seu sistema.

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

Espero que isto ajude!

moorej
fonte
"canalizar para grep" ... parece algo que eu poderia ter feito na adolescência, lol ... OBRIGADO pela ajuda!
PIB
Graças @GDP mas LordNeckbeard de é a resposta que você provavelmente deve aceitar como foi publicado pela primeira vez
moorej