zoukankan      html  css  js  c++  java
  • A script for splitting videos using ffmpeg v2

     //author:hnrayer@gmail.com
    #if _MSC_VER
    #define inline __inline
    #endif
    #include <libavformat/avformat.h>
    #include <libavcodec/avcodec.h>
    #include <libavutil/log.h>
    #include <stdio.h>
    #include <stdlib.h>
    #pragma warning(disable : 4996)
    int main(int argc, char **argv)
    {
    AVFormatContext *piFormatCtx = NULL;
    //the number of segments
    char *pszSegments = NULL;
    int   i_segments;       
    //the duration of each segment
    int sum_secs = 0;
    int step = 0;
    char szcmd[128];//command
    char *pszFullname;
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
    if (argc < 3)
    {
    printf("usage: ffsplit infile num [num:the number of segments]\n");
    return -1;
    }
    pszSegments = argv[2];
    i_segments = atoi(pszSegments);
    //Register all formats and codecs
    av_register_all();
    //Open video file
    if(avformat_open_input(&piFormatCtx, argv[1], NULL, NULL) != 0)
    {
    return -1; 
    }
    //Retrieve stream information
    if(avformat_find_stream_info(piFormatCtx, NULL) < 0)
    {
    return -1; 
    }
    //print the info of duration
    av_log(NULL, AV_LOG_INFO, "  Duration: ");
    if (piFormatCtx->duration != AV_NOPTS_VALUE)
    {
    int hours, mins, secs, us;
    int64_t duration = piFormatCtx->duration + 5000;  
    secs = duration / AV_TIME_BASE;
    us = duration % AV_TIME_BASE; 
    mins = secs / 60;
    secs %= 60;
    hours = mins / 60;
    mins %= 60;
    av_log(NULL, AV_LOG_INFO, "%02d:%02d:%02d.%02d\n", hours, mins, secs, (100 * us) / AV_TIME_BASE); 
    sum_secs = hours*60*60 + mins*60 +secs;
    else 
    {
    av_log(NULL, AV_LOG_INFO, "N/A");
    }
    step = sum_secs / i_segments;
    pszFullname = piFormatCtx->filename;
    _splitpath(pszFullname, drive, dir, fname, ext);
    /////////////////////////////////////////
    sprintf(szcmd, "ffmpeg -i %s -codec copy -map 0 -f segment -segment_time %d %s_%%03d%s", argv[1], step, fname, ext);
    puts(szcmd);
    system(szcmd);
    ////////////////////////////////////////
    //Close the video file
    avformat_close_input(&piFormatCtx);
    return 0;
    }
  • 相关阅读:
    java.lang.NoClassDefFoundError: org.junit.runner.Runner
    SpringMVC 八大注解
    spring @autowired使用总结
    Git使用入门
    N21_栈的压入弹出序列。
    N20_包含min函数的栈
    N19_顺时针打印指针
    N17_判断树B是不是树A的子结构
    N16_合并两个排序链表
    N15_反转链表后,输出新链表的表头。
  • 原文地址:https://www.cnblogs.com/elesos/p/3008523.html
Copyright © 2011-2022 走看看