วิธีใช้ 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 ฉันสามารถ "ดู" สิ่งที่ฉันต้องการ แต่ฉันไม่เข้าใจวิธีการแยกสิ่งที่ฉันต้องการเช่นการดึงบิตเรตของวิดีโอและการปราบปราม / ละเว้นบิตเรต 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

คำตอบ:


18

หากคุณต้องการข้อมูลจากสตรีมวิดีโอครั้งแรกเท่านั้น-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: นักเขียนสำหรับรูปแบบการจัดรูปแบบเอาต์พุตต่างๆ
  • ดูFFmpeg Wiki: FFprobeสำหรับตัวอย่างเพิ่มเติม

ขอบคุณมากสำหรับความช่วยเหลือ .... ฉันต้องยอมรับคำตอบอื่น ๆ เท่านั้นเพราะฉันได้รับการแจ้งเตือนก่อนแล้วจึงทำได้เคล็ดลับ ..
GDP

@GDP โปรดพิจารณา: รับการแจ้งเตือนครั้งแรกในกรณีนี้เนื่องจากเป็นคำตอบล่าสุด
p2 หรือ

@ ยากจนฉันใช้จุดตัวแทนค่อนข้างจริงจัง แต่คำตอบนี้ไม่ได้อยู่บนหน้าจอของฉันที่จะยอมรับจนกว่าฉันจะยอมรับคนอื่น ๆ จากนั้นก็ปรากฏตัวขึ้นดังนั้นจึงขอโทษทันที ขออภัยทุกคน ... ไม่ได้หมายความว่าทำให้ขุ่นเคือง
GDP

9

จากhttps://trac.ffmpeg.org/wiki/FFprobeTips

หากคุณต้องการ bit_rate ของสตรีมวิดีโอที่ 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]+"

หวังว่านี่จะช่วยได้!


"piping to grep" ... ดูเหมือนว่าบางอย่างที่ฉันอาจทำตอนเป็นวัยรุ่น lol ... ขอบคุณสำหรับความช่วยเหลือ!
GDP

ขอบคุณ @GDP แต่ LordNeckbeard เป็นคำตอบที่คุณอาจจะยอมรับขณะที่มันถูกตีพิมพ์ครั้งแรก
moorej
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.