利用qt和ffmpeg软件来制作视频裁剪工具

0 什么是ffmpeg?

Libav(旧称:FFmpeg)是一个自由软件,可以运行音频和视频多种格式的录影、转档、流功能[1],包含了libavcodec ─这是一个用于多个专案中音频和视频的解码器库,以及 libavformat ——一个音频与视频格式转换库。

libav的旧称"FFmpeg"这个单词中的 "FF" 指的是 "Fast Forward"[2]。有些新手写信给"FFmpeg"的项目负责人,询问FF是不是代表“Fast Free”或者“Fast Fourier”等意思,"FFmpeg"的项目负责人回信说“Just for the record, the original meaning of "FF" in FFmpeg is "Fast Forward"...”

http://zh.wikipedia.org/wiki/Libav

 

 一 下载ffmpeg

官方网站:     http://ffmpeg.zeranoe.com/

访问               http://ffmpeg.zeranoe.com/builds/

下载ffmpeg windows下发布版

FFmpeg git-f514695 32-bit Shared (Latest) 

 

二 在命令行下学会ffmpeg使用

cd 进入ffmpeg解压缩目录下的bin目录

ffmpeg.exe -i D:/source.avi -vcodec copy -y -r 25 -ss 8 -t 971 D:/demo.mp4  >> D:\clip_info.txt 2>&1

 

这里-vcodec copy参数一定要加,这样裁剪的时候不会改变视频的编码方式,裁剪非常快。

 

ffmpeg主要参数一览

Hyper fast Audio and Video encoder

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Main options:
-L                  show license
-h                  show help
-?                  show help
-help               show help
--help              show help
-version            show version
-formats            show available formats
-codecs             show available codecs
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-sample_fmts        show available audio sample formats
-loglevel loglevel  set libav* logging level
-v loglevel         set libav* logging level
-debug flags        set debug flags
-report             generate a report
-max_alloc bytes    set maximum size of a single allocated block
-f fmt              force format
-i filename         input file name
-y                  overwrite output files
-n                  do not overwrite output files
-c codec            codec name
-codec codec        codec name
-pre preset         preset name
-map_metadata outfile[,metadata]:infile[,metadata]  set metadata information of outfile from infile
-t duration         record or transcode "duration" seconds of audio/video
-fs limit_size      set the limit file size in bytes
-ss time_off        set the start time offset
-itsoffset time_off  set the input ts offset
-itsscale scale     set the input ts scale
-timestamp time     set the recording timestamp ('now' to set the current time)
-metadata string=string  add metadata
-dframes number     set the number of data frames to record
-timelimit limit    set max runtime in seconds
-target type        specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...)
-xerror             exit on error
-frames number      set the number of frames to record
-tag fourcc/tag     force codec tag/fourcc
-filter filter_list  set stream filterchain
-stats              print progress report during encoding
-attach filename    add an attachment to the output file
-dump_attachment filename  extract an attachment into a file
-bsf bitstream_filters  A comma-separated list of bitstream filters
-dcodec codec       force data codec ('copy' to copy stream)

Advanced options:
-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_s  set input stream mapping
-map_channel file.stream.channel[:syncfile.syncstream]  map an audio channel from one stream to another
-map_chapters input_file_index  set chapters mapping
-benchmark          add timings for benchmarking
-dump               dump each input packet
-hex                when dumping packets, also dump the payload
-re                 read input at native frame rate
-loop_input         deprecated, use -loop
-loop_output        deprecated, use -loop
-vsync              video sync method
-async              audio sync method
-adrift_threshold threshold  audio drift threshold
-copyts             copy timestamps
-copytb source      copy input stream time base when stream copying
-shortest           finish encoding within shortest input
-dts_delta_threshold threshold  timestamp discontinuity delta threshold
-copyinkf           copy initial non-keyframes
-q q                use fixed quality scale (VBR)
-qscale q           use fixed quality scale (VBR)
-streamid streamIndex:value  set the value of an outfile streamid
-muxdelay seconds   set the maximum demux-decode delay
-muxpreload seconds  set the initial demux-decode delay
-fpre filename      set options from indicated preset file

Video options:
-vframes number     set the number of video frames to record
-r rate             set frame rate (Hz value, fraction or abbreviation)
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number  set the number of bits per raw sample
-croptop size       Removed, use the crop filter instead
-cropbottom size    Removed, use the crop filter instead
-cropleft size      Removed, use the crop filter instead
-cropright size     Removed, use the crop filter instead
-padtop size        Removed, use the pad filter instead
-padbottom size     Removed, use the pad filter instead
-padleft size       Removed, use the pad filter instead
-padright size      Removed, use the pad filter instead
-padcolor color     Removed, use the pad filter instead
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-sameq              use same quantizer as source (implies VBR)
-same_quant         use same quantizer as source (implies VBR)
-pass n             select the pass number (1 or 2)
-passlogfile prefix  select two pass log file name prefix
-vf filter list     video filters
-b bitrate          video bitrate (please use -b:v)
-dn                 disable data

 

三 利用QT4做个简单图形界面工具

 

 

这里主要用了QProcess这个类,可以调用外部程序。

关键代码: 

 

    QString program = "D:\\maxview_video_demo\\ffmpeg\\ffmpeg-git-985e768-win64-static\\bin\\ffmpeg.exe";
    QString inputPath = ui->videopathLineEdit->text();
    QFile sourceFile(inputPath);
    if(!sourceFile.exists()){
        QMessageBox::information(this,QString::fromUtf8("提示"),QString::fromUtf8("找不到源文件"));
        return;
    }

    QString outputPath = QFileInfo(sourceFile).absolutePath() +"/clip.mp4";

    QFile destFile(outputPath);
    if(destFile.exists()){
        destFile.remove();
    }

    QString startTime = ui->videoStartTimeEdit->time().toString("hh:mm:ss");
    QString len= ui->videoLengthTimeEdit->time().toString("hh:mm:ss");
    QStringList arguments;
    arguments << "-i" << inputPath << "-r" << "25"<<"-ss";
    arguments <<startTime<< "-t" << len<< outputPath;

    QProcess *clipProcess = new QProcess(this);
    connect(clipProcess,SIGNAL(finished(int)),this,SLOT(clipVideoFinished(int)));

    clipProcess->start(program, arguments);

 

当视频截取完成后,进程会发生信号finished(int),并被QProcess捕捉到,这样可以调用

clipVideoFinished函数来通知程序视频裁剪完成了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践

近年来&#xff0c;银行各项业务发展迅猛&#xff0c;客户数目不断增加&#xff0c;后台服务系统压力也越来越大&#xff0c;系统的各项硬件资源也变得非常紧张。因此&#xff0c;在技术风险可控的基础上&#xff0c;希望引入大数据技术&#xff0c;利用大数据技术优化现有IT系…

推荐一个接口文档工具

ShowDoc 转载于:https://www.cnblogs.com/LW-baiyun/p/8003975.html

云计算的概念_云计算概念掀起涨停潮 美利云奠定板块龙头地位

温馨提示&#xff1a;股市风险时刻存在&#xff0c;文中所提个股仅为个人观点&#xff0c;请勿盲目跟随操作&#xff0c;笔者希望大家都做到不贪婪&#xff0c;不恐惧&#xff0c;不瞎猜&#xff0c;不跟风做一个纪律严明轻松淡定的股票交易者。社4月26日讯&#xff0c;沪深两市…

Python 第三方模块之 PDFMiner(pdf信息提取)

PDFMiner简介 pdf提取目前的解决方案大致只有pyPDF和PDFMiner。据说PDFMiner更适合文本的解析&#xff0c;首先说明的是解析PDF是非常蛋疼的事&#xff0c;即使是PDFMiner对于格式不工整的PDF解析效果也不怎么样&#xff0c;所以连PDFMiner的开发者都吐槽PDF is evil. 不过这些…

TFS2017持续发布中调用PowerShell启停远程应用程序

目前团队项目中有多个Web、服务以及与大数据平台对接接口等应用&#xff0c;每次的发布和部署采用手工的方式进行。停止应用程序&#xff0c;拷贝发布包&#xff0c;启动应用程序&#xff0c;不停的循环着&#xff0c;并且时不时地会出现一些人为错误性问题。这种模式消耗的很多…

Flask 多线程

参数 app.run()中可以接受两个参数&#xff0c;分别是threaded和processes&#xff0c;用于开启线程支持和进程支持。 threaded&#xff1a; 是否开启多线程&#xff0c;默认不开启。 if __name__ __main__:app.run(threadedTrue)processes&#xff1a;进程数量&#xff0c…

基于LVS对LAMP做负载均衡集群

一、简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分&#xff0c;在Linux2.4内核以前&#xff0c;使用LVS时必须要…

Python_Day1

1、猜年龄游戏&#xff1a; &#xff08;1&#xff09;&#xff1a;每循环3次&#xff0c;counter值返回为0&#xff0c;重新开始循环&#xff1b;&#xff08;2&#xff09;&#xff1a;continue 意思是跳出当前循环&#xff1b;&#xff08;3&#xff09;&#xff1…

kafka 入门

初识 Kafka 什么是 Kafka Kafka 是由 Linkedin 公司开发的&#xff0c;它是一个分布式的&#xff0c;支持多分区、多副本&#xff0c;基于 Zookeeper 的分布式消息流平台&#xff0c;它同时也是一款开源的 基于发布订阅模式的消息引擎系统。 Kafka 的基本术语 消息&#xf…

实体词典 情感词典_tidytextpy包 | 对三体进行情感分析

腾讯课堂 | Python网络爬虫与文本分析TidyTextPy前天我分享了 tidytext | 耳目一新的R-style文本分析库 但是tidytext不够完善&#xff0c;我在tidytext基础上增加了情感词典&#xff0c;可以进行情感计算&#xff0c;为了区别前者&#xff0c;将其命名为tidytextpy。大家有时间…

Python基础第一天

一、内容 二、练习 练习1 题目&#xff1a;使用while循环输出1 2 3 4 5 6 8 9 10 方法一&#xff1a; 图示&#xff1a; 代码&#xff1a; count 1 while count < 11:if count ! 7:print(count)count 1输出结果&#xff1a; 1 2 3 4 5 6 8 9 10 View Code方法二&#xff1…

vaOJ10369 - Arctic Network

1 /*2 The first line of each test case contains 1 < S < 100, the number of satellite channels!3 注意&#xff1a;S表示一共有多少个卫星&#xff0c;那么就是有 最多有S-1个通道&#xff01; 然后将最小生成树中的后边的 S-1通道去掉就行了&#xff01; 4…

在ffmpeg中加入x264模块

引言&#xff1a;最近一直致力于多媒体应用开发&#xff0c;一说起编码解码就不得不说下FFmpeg。FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统&#xff0c;但是可以在大多数操作系统中编译和使用。下面就详细介…

RabbitMQ实例教程:发布/订阅者消息队列

消息交换机&#xff08;Exchange&#xff09; RabbitMQ消息模型的核心理念是生产者永远不会直接发送任何消息给队列&#xff0c;一般的情况生产者甚至不知道消息应该发送到哪些队列。 相反的&#xff0c;生产者只能发送消息给交换机&#xff08;Exchange&#xff09;。交换机的…

OAuth 2.0(网转)

&#xff08;一&#xff09;背景知识 OAuth 2.0很可能是下一代的“用户验证和授权”标准&#xff0c;目前在国内还没有很靠谱的技术资料。为了弘扬“开放精神”&#xff0c;让业内的人更容易理解“开放平台”相关技术&#xff0c;进而长远地促进国内开放平台领域的发展&#xf…

kafka 自动提交 和 手动提交

Consumer 需要向 Kafka 汇报自己的位移数据&#xff0c;这个汇报过程被称为提交位移&#xff08;Committing Offsets&#xff09;。因为 Consumer 能够同时消费多个分区的数据&#xff0c;所以位移的提交实际上是在分区粒度上进行的&#xff0c;即 Consumer 需要为分配给它的每…

前端之 JavaScript 常用数据类型和操作

JavaScript 常用数据类型有&#xff1a;数字、字符串、布尔、Null、Undefined、对象 JavaScript 拥有动态类型 JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型 var x; // 此时x是undefined var x 1; // 此时x是数字 var x "Alex" …

Postgres中tuple的组装与插入

1.相关的数据类型 我们先看相关的数据类型&#xff1a; HeapTupleData(src/include/access/htup.h) typedef struct HeapTupleData {uint32 t_len; /* length of *t_data */ItemPointerData t_self; /* SelfItemPointer */Oid t_tableOid; /* ta…

Python 自动生成环境依赖包 requirements

一、生成当前 python 环境 安装的所有依赖包 1、命令 # cd 到项目路径下&#xff0c;执行以下命令 pip freeze > requirements.txt# 或者使用如下命令 pip list --formatfreeze > requirements.txt 2、常见问题 1、中使用 pip freeze > requirements.txt 命令导出…

DenyHosts 加固centos系统安全

DenyHosts是Python语言写的一个程序&#xff0c;它会分析sshd的日志文件&#xff08;/var/log/secure&#xff09;&#xff0c;当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件&#xff0c;从而达到自动屏IP的功能 DenyHosts官方网站 http://denyhosts.sourceforge.net 下…