กำหนดบิตเรตวิดีโอโดยใช้ ffmpeg


17

ฉันพยายามหาบิตเรตของวิดีโอ (สำหรับการแปลงรหัส) โดยใช้คำสั่ง ffmpeg ฉันลองใช้คำสั่งต่อไปนี้

ffmpeg -i 28572615.wmv

และสร้างผลลัพธ์ต่อไปนี้

    Input #0, asf, from '28572615.wmv':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    encoder         : Lavf57.36.100
  Duration: 00:02:50.92, start: 0.000000, bitrate: 1982 kb/s
    Stream #0:0: Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 640x360, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, 2 channels, fltp, 128 kb/s
At least one output file must be specified

ถ้าฉันใช้วิดีโออื่น

ffmpeg -i with_out_sound.mp4

จากนั้นฉันจะได้รับผลลัพธ์ต่อไปนี้

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'with_out_sound.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6avc1mp41
    creation_time   : 2015-04-21 05:14:57
  Duration: 00:00:27.86, start: 0.000000, bitrate: 500 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 622x480 [SAR 1:1 DAR 311:240], 100 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
    Metadata:
      creation_time   : 2015-04-21 05:14:57
      handler_name    : VideoHandler
At least one output file must be specified

จุดที่ฉันสับสนคือฉันควรดูในบรรทัด metadata Duration หรือ Video metadata line (Stream # 0: 0) สำหรับ bitrate ของวิดีโอหรือไม่


สำหรับไฟล์ที่สองขนาดของไฟล์คืออะไร?
Gyan

ขนาดไฟล์วิดีโอ @Mulvya ที่สองคือ 1.66 MB
user2528012

ดังนั้นการอ่านทั้งคู่จึงผิด - บิตเรตที่แท้จริงคือ 61 kb / s อาจเป็นเพราะมันเป็นเซ็กเมนต์ DASH
Gyan

คำตอบ:


16

บิตเรตวิดีโอจะแสดงในข้อมูลสตรีมวิดีโอ ข้อมูลรูปแบบมีบิตเรตสำหรับสตรีมทั้งหมดรวมทั้งค่าใช้จ่าย muxing

หากบิตเรตวิดีโอหายไปวิธีที่สกปรกในการรับค่านั้นคือการลบบิตเรตของสตรีมอื่นทั้งหมดจากบิตเรตทั้งหมด

หากวิธีนี้ไม่สามารถใช้งานได้วิธีการที่ยุ่งยากก็คือการเรียกใช้ ffprobe เพื่อแสดงขนาดแพ็กเก็ตและระยะเวลาการสตรีมจากนั้นทำการคำนวณบิตเรตโดยการรวมบรรทัดทั้งหมดยกเว้นหนึ่งบรรทัดสุดท้ายและหารด้วยค่าในบรรทัดสุดท้าย

ffprobe -select_streams v -show_entries packet=size:stream=duration -of compact=p=0:nk=1 video.mp4

เอาท์พุท:

4199      
2627      
1792      
3921      
2993      
...  
2301      
3076
2879
1543.00000

แน่นอนนี่เป็นวิธีแก้ปัญหาสุดท้ายและใช้ได้เฉพาะในกรณีที่ข้อมูลวิดีโอสตรีมไม่ได้เป็นบิตเรตและประเมินบิตเรตโดยการลดอัตราของสตรีมอื่น ๆ ก็ไม่สามารถทำได้เช่นกัน

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