Cách sử dụng ffprobe để có được thông tin nhất định về các tệp mp4 / h.264


12

Tôi nhưng là một nhà phát triển PHP thấp, được giao nhiệm vụ lấy một số thông tin cơ bản về 100 nghìn tệp video. Tôi đã có một số may mắn sử dụng ffmpeg chiết xuất video bitrate, video width, video height, duration, và aspect ratiotừ họ, nhưng với một tỷ lệ sai số khoảng 5%, điều này vẫn còn để cho tôi với một số lượng rất lớn các tập tin mà tôi không biết làm thế nào để đối phó với. Các video DO phát, nhưng lượng dữ liệu khổng lồ mà ffmpeg trả về khiến tôi gặp khó khăn khi phân tích cú pháp XML được trả về để tìm những gì tôi cần với tất cả các điều kiện mà tôi dường như đang gặp phải. (Các tệp này là một bộ sưu tập từ 15 năm trước hoặc lâu hơn, một số được mã hóa mới, một số khác được chuyển đổi từ nhiều năm trước)

Ở mức độ nào, tôi đã tìm thấy cách sử dụng sau đây ffprobeđể có được thời lượng và hy vọng rằng ai đó ở đây hiểu được sự phức tạp của việc sử dụng ffmpeg & ffprobe sẽ đủ tốt để giúp tôi tìm ra các giá trị khác mà tôi cần theo cách đơn giản hơn mã điên Tôi thấy mình đang tạo ra để trèo qua kết quả đầy đủ của ffmpeg.

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

Cảm ơn rất nhiều trước.

LÀM RÕ:

Tôi nên thêm rằng với cmd bên dưới, tôi có thể "nhìn thấy" những gì tôi cần, nhưng tôi không hiểu làm thế nào để trích xuất những gì tôi cần, ví dụ như lấy bitrate VIDEO và loại bỏ / bỏ qua bitrate AUDIO hoặc xác định 2 thời lượng khác nhau để sử dụng (thời lượng âm thanh / video?)

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

Câu trả lời:


15

Nếu bạn chỉ muốn thông tin từ luồng video đầu tiên, hãy sử dụng -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

Ví dụ đầu ra:

width=640
height=480
duration=10.000000
bit_rate=942704
  • Để xem danh sách tất cả các mục sử dụng -show_streamsvà / hoặc -show_formatthay vì -show_entries.
  • Xem Tài liệu FFprobe: Nhà văn cho các kiểu định dạng đầu ra khác nhau.
  • Xem FFmpeg Wiki: FFprobe để biết thêm ví dụ.

Cảm ơn rất nhiều vì sự giúp đỡ .... Tôi phải chấp nhận câu trả lời khác chỉ vì tôi được cảnh báo trước, và nó đã thực hiện được mánh khóe ..
GDP

@GDP Vui lòng xem xét: được thông báo trước trong trường hợp này, vì đó là câu trả lời mới nhất.
p2or

@poor Tôi rất coi trọng điểm đại diện, nhưng câu trả lời này không phải trên màn hình của tôi để chấp nhận cho đến khi tôi chấp nhận cái kia, sau đó nó xuất hiện, do đó, lời xin lỗi ngay lập tức. Xin lỗi mọi người ... thực sự không có ý xúc phạm.
GDP

8

Từ https://trac.ffmpeg.org/wiki/FFprobeTips

Nếu bạn muốn lấy bit_rate của luồng video đầu tiên, bạn có thể sử dụng:

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

Nơi -select_steams v:0đang chọn luồng video đầu tiên và :nokey=1đưa ra giá trị mà không cần khóa. Bạn cũng có thể trích xuất thông tin bằng cách chuyển thông tin đến grep nhưng tôi không chắc liệu nó có sẵn trên hệ thống của bạn không.

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

Hi vọng điêu nay co ich!


"Đường ống đến grep" ... nghe có vẻ như là một điều mà tôi có thể đã làm khi còn là một thiếu niên, lol ... CẢM ƠN sự giúp đỡ!
GDP

Cảm ơn @GDP nhưng LordNeckbeard là câu trả lời bạn có thể nên chấp nhận vì nó đã được xuất bản đầu tiên
moorej
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.