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;
    }
  • 相关阅读:
    12306站点推出图片验证 反破解
    android自己定义控件之飞入飞出控件
    ORACLE 从一个实例迁移到另外一个实例实战记录
    通信协议:HTTP、TCP、UDP
    先打11.2.0.3.8这个PSU,后建库
    C# 多线程參数传递
    运维笔记10 (Linux软件的安装与管理(rpm,yum))
    为RecyclerView打造通用Adapter
    大话设计模式(四)单例模式
    Java代码质量监控工具Sonar安装
  • 原文地址:https://www.cnblogs.com/elesos/p/3008523.html
Copyright © 2011-2022 走看看