从视频ffmpeg / ffprobe中提取关键帧信息和字节偏移

时间:2018-12-22 19:51:43

标签: video ffmpeg keyframe ffprobe

如何使用ffmpeg / ffprobe从视频中检索每个关键帧信息。

我已经阅读了很多关于此的stackoverflow问题和答案,但是该命令仅返回关键帧持续时间。

我已使用此命令提取关键帧持续时间

ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv "/var/www/html/YoutubeTesting/1080p.mp4"

但是我从每个关键帧中需要的信息都是

与视频字节大小的1字节偏移

2-关键帧的持续时间

谢谢!

3 个答案:

答案 0 :(得分:0)

使用

import React, { Component } from "react"; 
import { Pagination } from "react-bootstrap"; 
import PropTypes from "prop-types";

export default class PaginationHandler extends Component {  

   constructor(props) {
    super(props);
    this.state = {
      paging: {
        offset: 0,
        limit: 10
      },
      active: 0
    };  
    }

  pagingHandler = () => {
    let offset = parseInt(event.target.id);
    this.setState({
      active: offset
    });
    this.props.pageHandler(event.target.id - 1);   };

  nextHandler = () => {
    let active = this.state.active;
    this.setState({
      active: active + 1
    });
    this.props.pageHandler(active + 1);   };

  backHandler = () => {
    let active = this.state.active;
    this.setState({
      active: active - 1
    });
    this.props.pageHandler(active - 1);   };

  renderPageNumbers = (pageNumbers, totalPages) => {
    let { active } = this.state;
    return (
      <Pagination>
        <Pagination.Prev disabled={active < 5} onClick={ active >5 && this.backHandler} />

        {
      pageNumbers.map(number => {
              if (
                number >= parseInt(active) - 3 &&
                number <= parseInt(active) + 3 
              ) {
                return (
                  <Pagination.Item
                    id={number}
                    active={number == active}
                    onClick={this.pagingHandler}
                  >
                    {number}
                  </Pagination.Item>
                );
              } else {
                return null;
              }
        })}
        <Pagination.Next onClick={ active <= totalPages -4 && this.nextHandler} />
      </Pagination>
    );   };

  buildComponent = (props, state) => {
    const { totalPages } = props;
    const pageNumbers = [];
    for (let i = 1; i <= totalPages; i++) {
      pageNumbers.push(i);
    }
    return (
      <div className="pull-right">
      {this.renderPageNumbers(pageNumbers ,totalPages)}
      </div>
    );   
};

  render() {
    return this.buildComponent(this.props, this.state);
  } 

} 
   PaginationHandler.propTypes = 
   {
    paging: PropTypes.object,
    pageHandler: PropTypes.func,
    totalPages: PropTypes.object 
   };

答案 1 :(得分:0)

只是发现自己要提取有关按键图的所有信息。对某人有用。

只需将 -skip_frame nokey 添加到命令中

AllworksFragment

它将显示关键帧的信息,该信息将包含时间,持续时间,偏移字节等。

答案 2 :(得分:0)

您可以使用以下命令获取关键帧偏移字节以及帧号。

ffprobe -skip_frame nokey -select_streams v:0 -count_frames -show_entries frame=pkt_pos,best_effort_timestamp_time -of csv INPUT