ดึงจำนวนเฟรมด้วย ffmpeg


113

ไม่มีใครรู้วิธีดึงจำนวนเฟรมทั้งหมดจากไฟล์วิดีโอโดยใช้ ffmpeg? ผลลัพธ์การแสดงผลของ ffmpeg แสดงเฟรมปัจจุบันและฉันต้องการจำนวนเฟรมเพื่อคำนวณความคืบหน้าเป็นเปอร์เซ็นต์


คำตอบ:


159

หมายเหตุ: การมีรายการแก้ไขใน MP4 / M4V / M4A / MOV อาจส่งผลต่อหมายเลขเฟรมของคุณ ดูแก้ไขรายการด้านล่าง


ffprobe: ค้นหาคอนเทนเนอร์

ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mp4
  • นี่เป็นวิธีการที่รวดเร็ว
  • ไม่ใช่ทุกรูปแบบ (เช่น Matroska) จะรายงานจำนวนเฟรมที่เป็นผลลัพธ์ของN/Aไฟล์. ดูวิธีการอื่น ๆ ตามรายการด้านล่าง

ffprobe: นับจำนวนเฟรม

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mkv
  • นี่เป็นวิธีการที่ช้า
  • เพิ่ม-skip_frame nokeyตัวเลือกเพื่อนับเฉพาะคีย์เฟรม

ffmpeg: นับจำนวนเฟรม

หากคุณไม่มีffprobeคุณสามารถใช้ffmpegแทนได้:

ffmpeg -i input.mkv -map 0:v:0 -c copy -f null -
  • นี่เป็นวิธีที่ค่อนข้างเร็ว
  • อ้างถึงframe=ส่วนท้ายของเอาต์พุตคอนโซล
  • เพิ่ม-discard nokeyตัวเลือกการป้อนข้อมูล (ก่อนหน้า-i) เพื่อนับเฉพาะคีย์เฟรม

แก้ไขรายการ

ละเว้นรายการแก้ไข MP4 / M4V / M4A / MOV ด้วย-ignore_editlist 1ตัวเลือกอินพุต ค่าเริ่มต้นคือไม่เพิกเฉยต่อรายการแก้ไข

ความหมายของตัวเลือก ffprobe

  • -v error ซึ่งจะซ่อนเอาต์พุต "ข้อมูล" (ข้อมูลเวอร์ชัน ฯลฯ ) ซึ่งทำให้การแยกวิเคราะห์ง่ายขึ้น

  • -count_frames นับจำนวนเฟรมต่อสตรีมและรายงานในส่วนสตรีมที่เกี่ยวข้อง

  • -select_streams v:0 เลือกเฉพาะสตรีมวิดีโอ

  • -show_entries stream=nb_framesหรือ-show_entries stream=nb_read_framesแสดงเฉพาะรายการสำหรับหรือnb_framesnb_read_frames

  • -of default=nokey=1:noprint_wrappers=1ตั้งค่ารูปแบบผลลัพธ์ (หรือที่เรียกว่า "writer") เป็นdefaultอย่าพิมพ์คีย์ของแต่ละฟิลด์ ( nokey=1) และอย่าพิมพ์ส่วนหัวและส่วนท้าย ( noprint_wrappers=1) มีทางเลือกที่สั้นกว่าเช่น-of csv=p=0.

ดูด้วย


mediainfo

mediainfoเครื่องมือที่รู้จักกันดีสามารถส่งออกจำนวนเฟรม:

mediainfo --Output="Video;%FrameCount%" input.avi

MP4Box

สำหรับไฟล์ MP4 / M4V / M4A

MP4Box จาก gpac สามารถแสดงจำนวนเฟรม:

MP4Box -info input.mp4

อ้างถึงMedia Infoบรรทัดในเอาต์พุตสำหรับสตรีมวิดีโอที่เป็นปัญหา:

Media Info: Language "Undetermined (und)" - Type "vide:avc1" - 2525 samples

ในตัวอย่างนี้สตรีมวิดีโอมี 2525 เฟรม


boxdumper

สำหรับไฟล์ MP4 / M4V / M4A / MOV

boxdumperเป็นเครื่องมือง่ายๆจาก l-smash มันจะส่งออกข้อมูลจำนวนมาก ภายใต้stszส่วนกล่องขนาดตัวอย่างอ้างถึงsample_countจำนวนเฟรม ในตัวอย่างนี้อินพุตมีเฟรมวิดีโอ 1900 เฟรม:

boxdumper input.mp4
  ...
  [stsz: Sample Size Box]
    position = 342641
    size = 7620
    version = 0
    flags = 0x000000
    sample_size = 0 (variable)
    sample_count = 1900
  • โปรดทราบว่าไฟล์อาจมีมากกว่าหนึ่งstszอะตอม

5
หรือถ้าคุณต้องการความเร็วที่มากขึ้นและถ้า nb_frames มีความน่าเชื่อถือเพียงพอให้ลดความซับซ้อนเป็น:ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mkv
juanitogan

สิ่งนี้ให้คำตอบสองครั้งสำหรับฉัน (เช่น 2600 \ n 2600) มีเหตุผลอะไรที่จะเกิดขึ้น?
jbodily

@jbodily ตัวอย่างของฉันหรือของ juanitogan? ฉันไม่สามารถทำซ้ำได้โดยใช้อย่างใดอย่างหนึ่ง ไม่ค่อยได้ทำงานกับที่นี่
llogan

+1 ไม่น้อยเพราะไม่เหมือนคำตอบอื่น ๆ เกี่ยวกับเครื่องมือบรรทัดคำสั่งใด ๆ อันนี้อธิบายตัวเลือกบรรทัดคำสั่งทั้งหมด ขอบคุณ.
Ray

1
โปรดทราบว่าตัวเลือกแรกค้นหาคอนเทนเนอร์ประมวลผลไฟล์เนื่องจาก count_frames ดูความคิดเห็นของ @ juanitogan
aggieNick02

25

ใน Unix สิ่งนี้ทำงานได้อย่างมีเสน่ห์:

ffmpeg -i 00000.avi -vcodec copy -acodec copy -f null /dev/null 2>&1 | grep 'frame=' | cut -f 2 -d ' '

3
เป็นสิ่งที่ดีจริงๆ เพียงแค่คุณไม่จำเป็นต้องคัดลอกสตรีมเสียง คุณสามารถใช้ -an instat
rekire

1
@PrakharMohanSrivastava ตรวจสอบคำตอบนี้
Antonio

4
สิ่งนี้ดูเหมือนจะรวดเร็วและเชื่อถือได้:ffmpeg -i 00000.avi -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1
Timothy Zorn

1
@ Michael ขอบคุณสำหรับรอยยิ้มกับกาแฟยามเช้าของฉัน :-)
Lloyd Moore

1
@TimothyZorn คุณทำให้วันของฉัน!
Mladen Danic

13

คำนวณตามเวลาแทน

นั่นคือสิ่งที่ฉันทำและได้ผลดีสำหรับฉันและอื่น ๆ อีกมากมาย) ขั้นแรกค้นหาความยาวของวิดีโอในตัวอย่างด้านล่าง:

Seems stream 0 codec frame rate differs from container frame rate: 5994.00 
(5994/1) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/stu/Movies/District9.mov':
  Duration: 00:02:32.20, start: 0.000000, bitrate: 9808 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 1920x1056, 29.97tbr, 2997tbn, 5994tbc
    Stream #0.1(eng): Audio: aac, 44100 Hz, 2 channels, s16
    Stream #0.2(eng): Data: tmcd / 0x64636D74

คุณจะสามารถค้นหา Duration: hh:mm:ss.nnขนาดคลิปวิดีโอต้นทางได้อย่างสม่ำเสมอและปลอดภัย จากนั้นสำหรับแต่ละบรรทัดการอัปเดต (CR, ไม่มี LF) คุณสามารถแยกวิเคราะห์ข้อความสำหรับเครื่องหมายเวลาปัจจุบันได้ที่:

frame=   84 fps= 18 q=10.0 size=       5kB time=1.68 bitrate=  26.1kbits/s    
frame=   90 fps= 17 q=10.0 size=       6kB time=1.92 bitrate=  23.8kbits/s    
frame=   94 fps= 16 q=10.0 size=     232kB time=2.08 bitrate= 913.0kbits/s    

เพียงระมัดระวังที่จะไม่คาดหวังผลลัพธ์ที่สมบูรณ์แบบจากบรรทัดสถานะเหล่านี้เสมอไป สามารถรวมข้อความแสดงข้อผิดพลาดดังต่อไปนี้:

frame=   24 fps= 24 q=-1.0 size=       0kB time=1.42 bitrate=   0.3kbits/s    
frame=   41 fps= 26 q=-1.0 size=       0kB time=2.41 bitrate=   0.2kbits/s    
[h264 @ 0x1013000]Cannot parallelize deblocking type 1, decoding such frames in
sequential order
frame=   49 fps= 24 q=26.0 size=       4kB time=0.28 bitrate= 118.1kbits/s    
frame=   56 fps= 22 q=23.0 size=       4kB time=0.56 bitrate=  62.9kbits/s    

time / durration * 100 = % doneเมื่อคุณมีเวลาก็เป็นคณิตศาสตร์ที่เรียบง่าย:


1
ขอโทษที่โง่ แต่ฉันจะทำเวลา / ระยะเวลาได้อย่างไรเมื่อระยะเวลาอยู่ในรูปแบบ hh: mm: ss.nn และเวลาเป็นรูปแบบ xx.yy เสมอ
Omar Ali

2
@Omar ในฐานะที่เป็น dev .NET, สิ่งที่ฉันทำคือผมสร้างจากมันแล้วใช้TimeSpan currentDurationTimeSpan.Ticks / (totalDurationTimeSpan.Ticks / 100)TimeSpan ยังมีฟังก์ชัน Parse ที่ทรงพลังอีกด้วยลองดู
Shimmy Weitzhandler

ทางออกที่ยอดเยี่ยมเวลาของฉันอยู่ที่ hh: mm: ss: ms ดังนั้นฉันคิดว่าใน 3 ปี FFMPEG ได้ปรับปรุงรูปแบบเวลาส่งออก
ElektroStudios

1
โปรดทราบว่าเอาต์พุตคอนโซลอาจระบุว่า 29.97 แต่สั้นสำหรับ 30000/1001 เหมือนกันสำหรับ 23.98 ซึ่งคือ 24000/1001 และ 59.94 คือ 60000/1001
llogan

โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับวิดีโอเฟรมเรตแบบแปรผัน (เห็นได้ชัด)
Timothy Zorn

8

ไม่ใช่ทุกรูปแบบที่จัดเก็บจำนวนเฟรมหรือระยะเวลาทั้งหมด - แม้ว่าจะทำเช่นนั้นไฟล์ก็อาจไม่สมบูรณ์ดังนั้น ffmpeg จึงไม่ตรวจพบอย่างใดอย่างหนึ่งตามค่าเริ่มต้น

ให้ลองหาจุดสิ้นสุดของไฟล์และอ่านเวลาจากนั้นนับเวลาปัจจุบันขณะที่คุณไป

หรือคุณสามารถลองAVFormatContext->nb_index_entriesหรือระยะเวลาที่ตรวจพบซึ่งควรใช้งานได้ดีอย่างน้อย AVI / MOV ที่ไม่เสียหายหรือไลบรารี FFMS2 ซึ่งอาจช้าเกินไปที่จะรบกวนแถบความคืบหน้า


8

ลองสิ่งที่ชอบ:

ffmpeg -i "path to file" -f null /dev/null

มันเขียนหมายเลขเฟรมไปที่ stderr เพื่อให้คุณสามารถดึงข้อมูลเฟรมสุดท้ายจากสิ่งนี้ได้


8

คุณสามารถใช้ffprobe เพื่อรับหมายเลขเฟรมด้วยคำสั่งต่อไปนี้

  1. วิธีแรก

ffprobe.exe -i video_name -print_format json -loglevel fatal -show_streams -count_frames -select_streams v

ซึ่งบอกให้พิมพ์ข้อมูลในjsonรูปแบบ

select_streams vจะบอกffprobeเพียงแค่ให้videoข้อมูลสตรีมกับเราและหากคุณลบออกก็จะให้audioข้อมูลแก่คุณเช่นกัน

และผลลัพธ์จะเป็นอย่างไร

{
    "streams": [
        {
            "index": 0,
            "codec_name": "mpeg4",
            "codec_long_name": "MPEG-4 part 2",
            "profile": "Simple Profile",
            "codec_type": "video",
            "codec_time_base": "1/25",
            "codec_tag_string": "mp4v",
            "codec_tag": "0x7634706d",
            "width": 640,
            "height": 480,
            "coded_width": 640,
            "coded_height": 480,
            "has_b_frames": 1,
            "sample_aspect_ratio": "1:1",
            "display_aspect_ratio": "4:3",
            "pix_fmt": "yuv420p",
            "level": 1,
            "chroma_location": "left",
            "refs": 1,
            "quarter_sample": "0",
            "divx_packed": "0",
            "r_frame_rate": "10/1",
            "avg_frame_rate": "10/1",
            "time_base": "1/3000",
            "start_pts": 0,
            "start_time": "0:00:00.000000",
            "duration_ts": 256500,
            "duration": "0:01:25.500000",
            "bit_rate": "261.816000 Kbit/s",
            "nb_frames": "855",
            "nb_read_frames": "855",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0
            },
            "tags": {
                "creation_time": "2005-10-17 22:54:33",
                "language": "eng",
                "handler_name": "Apple Video Media Handler",
                "encoder": "3ivx D4 4.5.1"
            }
        }
    ]
}

2. คุณสามารถใช้

ffprobe -v error -show_format -show_streams video_name

ซึ่งจะให้ข้อมูลสตรีมหากคุณต้องการข้อมูลที่เลือกเช่นอัตราเฟรมให้ใช้คำสั่งต่อไปนี้

ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 video_name

ซึ่งให้ตัวเลขตามข้อมูลวิดีโอของคุณปัญหาคือเมื่อคุณใช้วิธีนี้อาจเป็นไปได้ที่คุณจะได้N/Aผลลัพธ์เป็นผลลัพธ์

สำหรับข้อมูลเพิ่มเติมโปรดดูหน้านี้FFProbe Tips



3

เนื่องจากความคิดเห็นของฉันได้รับการโหวตเพิ่มขึ้นเล็กน้อยฉันจึงคิดว่าจะปล่อยให้มันเป็นคำตอบ:

ffmpeg -i 00000.avi -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1

สิ่งนี้ควรจะรวดเร็วเนื่องจากไม่มีการเข้ารหัส ffmpegจะ demux ไฟล์และอ่าน (ถอดรหัส) สตรีมวิดีโอแรกโดยเร็วที่สุด grepคำสั่งแรกจะจับข้อความที่แสดงกรอบ grepคำสั่งที่สองจะจับเพียงตัวเลขจากนั้น tailคำสั่งก็จะแสดงบรรทัดสุดท้าย (นับเฟรมสุดท้าย)


2

เพื่อสร้างคำตอบของสตู นี่คือวิธีที่ฉันพบอัตราเฟรมสำหรับวิดีโอจากโทรศัพท์มือถือของฉัน ฉันรันคำสั่งต่อไปนี้ชั่วขณะ ฉันปล่อยให้จำนวนเฟรมสูงถึงประมาณ 10,000 ก่อนที่ฉันจะหมดความอดทนและกด ^ C:

$ ffmpeg -i 2013-07-07\ 12.00.59.mp4 -f null /dev/null 2>&1
...
Press [q] to stop, [?] for help
[null @ 0x7fcc80836000] Encoder did not produce proper pts, making some up.
frame= 7989 fps= 92 q=0.0 Lsize=N/A time=00:04:26.30 bitrate=N/A dup=10 drop=0    
video:749kB audio:49828kB subtitle:0 global headers:0kB muxing overhead -100.000042%
Received signal 2: terminating.
$

จากนั้นฉันคว้าข้อมูลสองชิ้นจากบรรทัดนั้นซึ่งเริ่มต้นด้วย "frame =" จำนวนเฟรม 7989 และเวลา 00: 04: 26.30 น. ก่อนอื่นคุณต้องแปลงเวลาเป็นวินาทีจากนั้นหารจำนวนเฟรมทีละวินาทีจึงจะได้ "เฟรมต่อวินาที" "เฟรมต่อวินาที" คืออัตราเฟรมของคุณ

$ bc -l
0*60*60 + 4*60 + 26.3
266.3

7989/(4*60+26.3)
30.00000000000000000000
$

อัตราเฟรมสำหรับวิดีโอของฉันคือ 30 fps


2

สิ่งเดียวที่แม่นยำที่ฉันทำได้มีดังต่อไปนี้:

ffprobe -i my_video.mp4 -show_frames 2>&1|grep -c '^\[FRAME'

เพื่อให้แน่ใจว่าสิ่งนี้ใช้ได้กับวิดีโอ:

ffprobe -i my_video.mp4 -show_frames 2>&1 | grep -c media_type=video

ฉันเพิ่มคะแนนคำตอบของคุณ แต่จะใช้ได้ก็ต่อเมื่อวิดีโอไม่มีเสียง หากมีสิ่งนี้จะใช้งานได้:ffprobe -i my_video.mp4 -show_frames 2>&1 | grep -c media_type=video
โกเบ

2

ขออภัยสำหรับคำตอบ necro แต่อาจจะต้องใช้สิ่งนี้ (เนื่องจากฉันไม่พบวิธีแก้ปัญหาสำหรับ ffmpeg รุ่นล่าสุด

ด้วย ffmpeg 3.3.4 ฉันพบว่ามีสิ่งต่อไปนี้:

ffprobe -i video.mp4 -show_streams -hide_banner | grep "nb_frames"

ในตอนท้ายจะส่งออกจำนวนเฟรม มันใช้ได้ผลกับฉันในวิดีโอพร้อมเสียง แม้ว่าจะให้บรรทัด "nb_frames" สองครั้ง แต่บรรทัดแรกคือจำนวนเฟรมจริงในวิดีโอที่ฉันทดสอบ


ขอบคุณ @ acidrums4. ยืนยันว่าวิธีนี้ใช้ได้กับเวอร์ชันล่าสุดจาก github ที่ฉันสร้างขึ้นในวันนี้
Paul J

1

ฉันใช้ php_ffmpeg จากนั้นฉันสามารถรับเวลาและเฟรมทั้งหมดของภาพยนตร์ได้ ดังต่อไปนี้

$input_file='/home/strone/workspace/play/CI/abc.rmvb';
$ffmpegObj = new ffmpeg_movie($input_file);
echo $ffmpegObj->getDuration();
    echo $ffmpegObj->getFrameCount();

จากนั้นรายละเอียดจะอยู่ในหน้า

http://ffmpeg-php.sourceforge.net/doc/api/ffmpeg_movie.php


1
Cmd ->

ffprobe.exe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration -of default=nw=1 "d:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4"

Result ->

r_frame_rate=24000/1001
duration=8177.794625

Calculation ->

Frames=24000/1001*8177.794625=196071

Proof -> 

ffmpeg -i "d:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4" -f null /dev/null
ffmpeg version N-92938-g0aaaca25e0-ffmpeg-windows-pacman Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.2.0 (GCC)
  configuration: --pkg-config=pkg-config --pkg-config-flags=--static --extra-version=ffmpeg-windows-pacman --enable-version3 --disable-debug --disable-w32threads --arch=x86_64 --target-os=mingw32 --cross-prefix=/opt/sandbox/cross_compilers/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --enable-libcaca --enable-gray --enable-libtesseract --enable-fontconfig --enable-gmp --enable-gnutls --enable-libass --enable-libbluray --enable-libbs2b --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libzimg --enable-libzvbi --enable-libmysofa --enable-libaom --enable-libopenjpeg --enable-libopenh264 --enable-liblensfun --enable-nvenc --enable-nvdec --extra-libs=-lm --extra-libs=-lpthread --extra-cflags=-DLIBTWOLAME_STATIC --extra-cflags=-DMODPLUG_STATIC --extra-cflags=-DCACA_STATIC --enable-amf --enable-libmfx --enable-gpl --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-librubberband --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxavs --enable-avresample --extra-cflags='-march=core2' --extra-cflags=-O2 --enable-static --disable-shared --prefix=/opt/sandbox/cross_compilers/mingw-w64-x86_64/x86_64-w64-mingw32 --enable-nonfree --enable-decklink --enable-libfdk-aac
  libavutil      56. 25.100 / 56. 25.100
  libavcodec     58. 43.100 / 58. 43.100
  libavformat    58. 25.100 / 58. 25.100
  libavdevice    58.  6.101 / 58.  6.101
  libavfilter     7. 47.100 /  7. 47.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'd:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.25.100
  Duration: 02:16:17.91, start: 0.000000, bitrate: 2497 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 2397 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 93 kb/s (default)
    Metadata:
      handler_name    : GPAC ISO Audio Handler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
  Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to '/dev/null':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.25.100
    Stream #0:0(und): Video: wrapped_avframe, yuv420p, 1920x800 [SAR 1:1 DAR 12:5], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.43.100 wrapped_avframe
    Stream #0:1(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
    Metadata:
      handler_name    : GPAC ISO Audio Handler
      encoder         : Lavc58.43.100 pcm_s16le
frame=196071 fps=331 q=-0.0 Lsize=N/A time=02:16:17.90 bitrate=N/A speed=13.8x
video:102631kB audio:1408772kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

โดยปกติเฟรมเรตจะคำนวณจากสองพารามิเตอร์ r_frame_rate = 24000/1001 (= 23,97602397602397 ... ) ปัดเศษโดย ffmpeg เป็น: 23.98 Duration = hours * 3600 + minutes * 60 + seconds.remainder = 8177,91 ในขณะที่พารามิเตอร์ระยะเวลา = 8177.794625 แต่เฟรม = 24000/1001 * 8177.794625 = 196071 ให้จำนวนเฟรมที่แน่นอน (ไม่ได้ล้อเล่น).
Gerard Wensink

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