ffmpeg 音视频处理神器

news2024/11/16 13:30:45

1 FFmpeg是什么

  ffmpeg是一套用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它包含了非常先进的音频/视频编解码库libavcodec,提供了录制、转换以及流化音视频的完整解决方案。

  许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward",即Fast forword mpeg,音视频转换器。

github地址
https://github.com/FFmpeg/FFmpeg

2 FFmpeg能做什么

1 色彩转换、缩放视频尺寸、视频抽帧、去噪、模糊、压缩、剪切、转码、截图、旋转、添加/去除水印、播放速度、封面、转换3D的VR视频、 图片转视频

2 音频转码、剪切、拼接、各类音效、音量、抽象音频、音乐频谱波形图

3 安装FFmpeg

	//mac
	brew search ffmpeg
	brew install ffmpeg
	
	//linux
	yum install ffmpeg
	sudo apt install ffmpeg

验证安装

tom@bogon ~ % ffmpeg -version
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/6.0 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
libavutil      58.  2.100 / 58.  2.100
libavcodec     60.  3.100 / 60.  3.100
libavformat    60.  3.100 / 60.  3.100
libavdevice    60.  1.100 / 60.  1.100
libavfilter     9.  3.100 /  9.  3.100
libswscale      7.  1.100 /  7.  1.100
libswresample   4. 10.100 /  4. 10.100
libpostproc    57.  1.100 / 57.  1.100

版本信息里有ffmpeg的版本6.0,平台apple,配置configuration以及核心模块

4 核心模块

名称说明
libavutil工具库,比如算数运算、字符操作等
libavcodec音视频编解码核心库
libavformatI/O操作和封装格式(muxer/demuxer)处理
libavdevice各种设备的输入输出
libavfilter滤镜特效处理
libswscale视频像素处理,包括缩放图像尺寸、色彩映射转换、像素颜色空间转换等
libswresample音频重采样,格式转换和混音
libpostproc后期效果处理,如图像的去块效应

一般转码过程

5 常见参数说明

Per-file main options:
-f fmt              force format
-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
-to time_stop       record or transcode stop time
-fs limit_size      set the limit file size in bytes
-ss time_off        set the start time offset
-sseof time_off     set the start time offset relative to EOF
-seek_timestamp     enable/disable seeking by timestamp with -ss
-timestamp time     set the recording timestamp ('now' to set the current time)
-metadata string=string  add metadata
-program title=string:st=number...  add program with specified streams
-target type        specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad               audio pad
-frames number      set the number of frames to output
-filter filter_graph  set stream filtergraph
-filter_script filename  read stream filtergraph description from a file
-reinit_filter      reinit filtergraph on input parameter changes
-discard            discard
-disposition        disposition

Video options:
-vframes number     set the number of video frames to output
-r rate             set frame rate (Hz value, fraction or abbreviation)
-fpsmax rate        set max 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)
-display_rotation angle  set pure counter-clockwise rotation in degrees for stream(s)
-display_hflip      set display horizontal flip for stream(s) (overrides any display rotation if it is not set)
-display_vflip      set display vertical flip for stream(s) (overrides any display rotation if it is not set)
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff  set initial TimeCode value.
-pass n             select the pass number (1 to 3)
-vf filter_graph    set video filters
-b bitrate          video bitrate (please use -b:v)
-dn                 disable data

Audio options:
-aframes number     set the number of audio frames to output
-aq quality         set audio quality (codec-specific)
-ar rate            set audio sampling rate (in Hz)
-ac channels        set number of audio channels
-an                 disable audio
-acodec codec       force audio codec ('copy' to copy stream)
-ab bitrate         audio bitrate (please use -b:a)
-af filter_graph    set audio filters

6 简单Demo

6.1 图片生成视频

ffmpeg -r 25 -f image2 -i ./xuanmu/activity_%d.png -vcodec libx265 -vtag hvc1 -crf 25  -pix_fmt yuv420p out.mp4 -y

6.2 视频旋转90度

ffmpeg -i out.mp4 -vf transpose=1 test.mp4

6.3 视频翻转

ffmpeg -i input.mp4 -vf reverse -an output.mp4

6.4 视频截图

ffmpeg -ss 0 -i input.mp4 -f image2 -vframes 1 -an screenshot.jpg

6.5 视频水印

ffmpeg -i qd.mp4 -i 46x46.png -filter_complex overlay=10:20 watermark.mp4

6.6 转换3D的VR视频

ffmpeg -i qd.mp4 -filter_complex stereo3d=sbsl:arbg stereo3d.mp4 -y

6.7 音频混音

ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=first -vn mix.mp3

6.8 空灵音效(没太听出来效果)

ffmpeg -i input.mp3 -af aecho=0.8:0.8:1000:0.5 echo.mp3

6.9 搞笑音效

ffmpeg -i 1.mp3 -filter_complex atempo=2 atempo.mp3

6.10 音乐频谱波形图(安河桥)

ffmpeg -i 1.mp3 -filter_complex showwavespic=s=1280x720 waveform.png

6.11 音频拼接

ffmpeg -i concat:"1.mp3|2.mp3" -acodec copy -vn concat.mp3

6.12 视频自定义宽高

ffmpeg -i qd.mp4 -s 720x480  -threads 4 -c:a copy target.mp4 -y

参考文档

1 https://trac.ffmpeg.org/wiki/TitleIndex
2 https://zhuanlan.zhihu.com/p/37516093
3 ffmpeg official document
4 https://blog.csdn.net/u011686167/article/details/120879467
5 https://blog.csdn.net/u011686167/article/details/120879467

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

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

相关文章

AWS Lambda 介绍

计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 什么是AWS Lambda? AWS lambda的核心是事件驱动,驱动可能来自,Alexa,SNS,DynamoDB,S3,Kinesis等&…

什么是队列?Python中如何使用队列(62)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 什么是队列? 队列有哪些接口(api)? 在Python中如何表示队列? 什么是队列 队…

HDFS的工作原理是怎么样的?是如何实现HA模式?

原文链接:http://www.ibearzmblog.com/#/technology/info?id714dcb3957e29185493239b269a9ef65 前言 HDFS是能够提供一个分布式文件存储的系统,在大型数据文件的存储中,能够提供高吞吐量的数据访问,那么它是如何实现数据文件的…

电机调速执行

一、建立思维导图,将功能分析近而转换成技术要点,逐步实现。 二、编码器 1、机械编码器 (1)机械编码器是什么,张啥样? 如下图,这个就是我们生活应用中常见的机械编码器,我们又叫旋…

【C++】模板初阶——函数模板和类模板

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C 🛹Linux 📕 学习格言:博观而约取&#xff0…

鲍威尔一句话,BTC冲破30000!币圈涨跌不再依赖美联储降息?

仅仅一夜,全球最大的加密货币比特币价格突破30000美元关键阻力位,最高突破至30800美元,创2023年4月以来的最高价。而美联储主席鲍威尔的证词,竟是这波行情的最大催化剂。 鲍威尔周三出席众议院金融服务委员会接受质询,…

为什么独立站做不好?80%的人都走过这5个弯路

最近接触了不少卖家,发现不少独立站因为犯下一些常见的错误,导致最终失败,但是这些都是完全可以避免的。 那些新手卖家常见的问题就是许多人对独立站运营没有基本概念,同时并没有把脑袋中的零散的技巧串起来。要知道独立站运营是…

青大数据结构【2018】【单选、简答】

关键字: 计算机数据结构、存储方式、递归设计、矩阵压缩存储、二叉树形态、哈希冲突、希尔排序 一、单选 二、简答 对于线性表的存储,当采用顺序存储时,插入和删除元素平均需要移动半个表长,而链式存储结构只需要修改相应的指针就可以了。 递归设计要注意递归函数式的内…

【Java系列】深入解析Stream API

序言 你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 希望这篇文章能让你不仅有一定的收获,而且…

看完这篇 教你玩转渗透测试靶机vulnhub—Emplre: Lupinone

Vulnhub靶机Emplre: Lupinone渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:SSH私钥爆破登入:③:pip提权&#xf…

[晕事]今天做了件晕事14,查单词charp

从内核模块的代码里看到一个单词charp,去尝试查单词,发现了一个 Charp impact value 【机】 夏比冲击值 这个直接是音译,肯定不是想要的, 后来使用bing搜索引擎,里面有一个链接: 这个网页真是很有迷惑性&am…

GEE:实现 Lee 杂波滤波器(Lee speckle filter)降低或去除SAR图像中的杂波(speckle noise)

作者:CSDN @ _养乐多_ 这段代码实现了一种叫做Refined Lee滤波器的雷达图像处理算法。Lee speckle filter(Lee杂波滤波器)是一种常用的合成孔径雷达(SAR)图像处理算法,用于降低或去除SAR图像中的杂波(speckle noise)。SAR图像中的杂波是由于SAR工作原理导致的干涉和散…

图形编辑器开发:缩放至适应画布

大家好,我是前端西瓜哥。 之前我们实现了画布缩放的功能,本文来讲讲如何让内容缩放至适应画布大小(Zoom to fit)。 我们看看效果。 文中的动图演示来自我正在开发的图形设计工具: https://github.com/F-star/suika 线…

SpringBoot 统⼀功能处理

目录 SpringBoot 统一功能处理概念 统一用户登录权限验证 登录功能代码 Spring拦截器实现步骤: 统一项目访问前缀 第一种方法:重写configurePathMatch方法进行配置 第二种方法:在系统的配置文件.properties中进行配置 统一异常处理返回…

香橙派4 2. 驱动usb2.0芯片cy7c68013

0. 环境 - 香橙派4(Orangepi4_2.1.2_ubuntu_bionic_desktop_linux4.4.179.img) - EZ-USB FX2LP CY7C68013A USB 核心板 1. 下载FX3_SDK_1.3.4_linux EZ-USB™ FX3 Software Development Kit https://www.infineon.com/cms/en/design-support/tools/sdk…

Autosar模式管理实战系列08-BswM与EcuM模块交互详解

本文框架 前言EcuM及BswM交互EcuM及BswM交互总览启动时BswM与EcuM的状态管理交接下电时BswM与EcuM的状态管理交接前言 在Autosar模式管理系列介绍01-BswM文章中,我们对BswM基本内容进行了介绍,我们知道了BswM是根据既定的仲裁规则对来自应用层SWCs或其他底层BSW模块,同时也…

InnoDB 和 MyISAM 的区别

1、InnoDB支持事务,MyISAM不支持; 2、InnoDB支持外键,MyISAM不支持; 3、InnoDB是簇索引,MyISAM是非簇索引; 4、Innodb不支持fulltext全文索引,MyISAM支持; 5、InnoDB支持到行级锁&am…

JavaSE基础语法--数组的拷贝

数组的拷贝方法有好几种,第一种是简单的for循环。通过遍历原数组来给新数组赋值完成数组的拷贝代码如下: import java.util.Arrays;public class TestDemo {public static void main(String[] args) {int[] arr1{1,2,3,4,5,6};int[] arr2new int[arr1.l…

MySQL高级SQL语句操作之存储过程

MySQL高级SQL语句操作之存储过程 一、存储过程介绍二、存储过程操作1、创建存储过程2、调用存储过程3、查看存储过程4、存储过程的参数5、删除存储过程6、存储过程的控制语句6.1 条件语句6.2 循环语句 一、存储过程介绍 存储过程是一组为了完成特殊功能的SQL语句集合存储过程在…