ffmpeg 格式转换

1.学前知识

1.1视频码率值

码率公式: 码率(kbps)=文件大小(KB)*8/时间(秒)

所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的.

ffmpeg 格式转换

接下来,我们便先来学习ffmpeg命令使用

2.ffmpeg常用命令使用

ffmpeg命令- 用于转码的应用程序, 也可以从url/现场音频/视频源抓取输入源

参考:http://ffmpeg.org/ffmpeg.html

常用参数使用

主要参数

  • -i 设定输入流
  • -f 设定输出格式
  • -ss 00:00:15 从制定时间开始转换(如果不加:则表示为秒,比如-ss 70,表示从第70秒开始)
  • -t 00:01:15 设置输出的视频时长时间(如果不加:则表示为秒,比如-t 110,表示110秒)
  • -y 覆盖已有文件
  • -fs limit_size 设置文件大小上限

视频参数

  • -b:v 640k设定视频码率为640k,默认为200Kbit/s
  • -minratee 600k 设定视频码率最小阈值为700k
  • -maxrate 700k 设定视频码率最大阈值为700k
  • -r 60 设定帧速率fps为60,默认为25
  • -s 720×352 设定画面的宽与高为720X352
  • -aspect 16:9 设定画面的比例为16:9 (也可以使用1.3333, 1.7777)
  • -vn 不处理视频(比如只提取音频的时候)
  • -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器(比如-vcodec codec,表示使用输入流的格式, -vcodec xvid表示使用XVID编码压缩视频)
  • -vf scale=960:540 将输入的视频压缩至960X540输出,如果写为960:-1,则输出时保持原始的宽高比

音频参数

  • -ar 22500 设定采样率(audio rate)为22.5khz (单位:Hz),PSP只认24000
  • -b:a 640k 设定音频码率为640k,默认为200Kbit/s
  • -ac 2 设定声音的Channel数为2(1就是单声道,2就是立体声)
  • -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器(比如-acodec codec,表示使用输入流的格式, -acodec aac表示使用aac编解码)
  • -an 不处理音频(比如只提取视频的时候)

示例命令如下所示:

ffmpeg –h //打开帮助

ffmpeg -i input.avi -b:v 640k output.ts          //转换为ts视频文件

ffmpeg -i test.mp4 -f s16le out.pcm         //提取原始音频数据,s16le表示(signed 16 bits little endian, 有符号 16 位小端)

ffmpeg -i v1080.mp4 -t 10 -s 240x128 -pix_fmt yuv420p out240x128.yuv   //提取yuv420p数据,时长10s

ffmpeg -i test.mp4 -vn music.aac                   //提取出音频文件

ffmpeg -i test.mp4 -vn music.aac                   //提取出音频文件

ffmpeg -i input.mp4 -vcodec copy -an output.mp4  //输出的视频取消掉音频流
//-i input.avi:表示输入文件为input.avi
//-b:v 640k:设置输出的视频文件码率值
// output.ts:生成的文件名称

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
//-an:取消output.ts视频文件的音频流

./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
//将logo贴在左上角

 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
//贴在右下角

 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay0:H-h output.mp4
//贴在左下角, overlay W-w:0 贴在右上角

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
//添加过滤器,位置位于[0,0],w=220,h=90,厚度为100(厚度越大,越模糊).1:表示有一个绿色的矩形,设置为0就表示没有

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// -r :设置帧数为1, -q:v:设置jpeg图片质量为高质量(2),所以每隔一秒,存一张图片下来

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// - ss :设置开始时间,-t:设置time时间长度, -f 设定输出格式 , 所以会从input.mp4的第20s时间开始,往下10s,每隔1s就抓一帧,总共会抓10帧。

ffmpeg -i  input.mkv -y -f image2 -ss 10 -r 1 -t 1 –s 350x220 a.jpg
//截取一张第10秒的352x220尺寸大小的,格式为jpg的a.jpg图片

ffplay常用命令使用

ffplay命令- FFplay是一个非常简单和可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg API的测试平台

参考: http://ffmpeg.org/ffplay.html

最简单的播放命令: ffplay input.avi

播放的时候,支持的快捷键有:

  • q,ESC : 退出。
  • f : 切换全屏。
  • P,空格键 : 停下来。
  • m : 切换静音。
  • 9, 0 : 分别减少和增加体积。
  • /, * : 分别减少和增加体积。
  • a : 在当前程序中循环音频通道。
  • v : 循环视频频道。
  • t : 当前程序中的循环字幕通道。
  • c : 循环程序。
  • w:循环视频过滤器或显示模式。
  • s : 进入下一帧
  • left/right : 寻找向后/向前10秒。
  • down/up : 向后/前进1分钟。
  • page down/page up : 寻找上一视频/下一视频。或者,如果没有,请向后/向前寻求10分钟。
  • 鼠标右键单击 : 在文件中寻求与宽度分数相对应的百分比。
  • 鼠标左键双击 : 切换全屏。

ffprobe常用命令使用

ffprobe命令- ffprobe用来查看多媒体文件的信息

常用命令如下所示:

ffprobe -show_packets input.mp4
//获取文件信息并显示文件中每个帧的包信息(包含audio和video包),如下图所示:

ffmpeg 格式转换
  • codec_type : 帧类型,如视频包、音频包等
  • stream_index : 多媒体的stream索引(上图的stream0表示video数据,steam1表示audio数据)
  • pts(Presentation Time Stamp) : 显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
  • pts_time : 将pts换算为时间后的值
  • dts(Decoding Time Stamp) : 解码时间戳,表示在什么时候解码的这一帧数据。
  • dts_time : 将dts换算为时间后的值
  • duration : 该帧占用的时间值(需要持续多久切换下一帧)
  • duration_time : 根据不同格式计算后的多媒体包占用的时间值
  • size : 该帧的大小
  • pos : 该帧所在的文件偏移位置
  • flags : 该帧标记,如关键包与非关键包的标记
ffprobe -show_packets  -show_data input.mp4
//获取文件信息并显示文件中每个帧的包信息以及包里的具体data信息

ffprobe -show_format input.mkv
//获取文件信息以及格式信息,如下图所示:

ffmpeg 格式转换
  • nb_streams : 打开的视频文件中流的数量,一般为2,表示音频流和视频流
  • nb_programs : 节目数
  • format_name : 文件封装格式名称, 该文件的格式是Matroska,webm(MKV的全称)格式
  • format_long_name : 文件封装格式具体的名称
  • start_time : 起始时间
  • duration : 视频总时长
  • size : 文件大小
  • bit_rate : 码率, 码率公式为 码率(kbps)=文件大度小(KB)*8/时间(秒)
  • probe_score : 探测出的视频评分,100是最大的分数,这意味着FFmpeg确信格式是真实的
ffprobe -show_streams input.mkv
//获取视频文件中流的具体信息,比如音频采样率、视频尺寸、帧率等

5.视频解码步骤

首先将读取视频封装,然后通过不同的封装格式读取出视频码流(比如:h.264、mpeg4等),然后再通过视频码流解码出yuv

比如mkv视频: mkv->h.264->yuv

参考:

1.ffmpeg、ffplay、ffprobe命令使用 – 诺谦 – 博客园 (cnblogs.com)

官方帮助文件 doc.zip 提取码:FvkC

Original: https://www.cnblogs.com/xs-xs/p/16329135.html
Author: edolf
Title: ffmpeg 格式转换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582650/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 在Linux下的文件IO操作

    系统调用 为什么用户程序不能直接访问系统内核提供的服务,为了更好地保护内核空间,程序的运行空间被划分为内核空间和用户空间(俗称内核状态和用户模式),它们在不同的级别上逻辑上是相互隔…

    Linux 2023年5月27日
    077
  • Linux系统编程之文件IO

    前言 在学习C语言时,我们接触过如fopen、fclose、fseek、fgets、fputs、fread、fwrite等函数,实际上,这些函数是对于底层系统调用的封装。C默认会打…

    Linux 2023年6月8日
    077
  • Ubuntu16.04部署django+nginx项目

    项目使用django+nginx部署。这个项目断断续续地部署4遍了。感觉每次部署都挺费时间的(找各种配置的资料),于是写一个博客总结一下。 安装vsftpd $ sudo apt-…

    Linux 2023年6月7日
    058
  • 字典服务的设计与管理

    编码问题,谁不想避其锋芒; 一、业务背景 在搜索引擎的功能上,曾经遇到过这样一个问题,数据库中某个公司名称中存在特殊编码,尽管数据已经正常同步到索引中,但是系统中关键词始终也无法匹…

    Linux 2023年6月14日
    069
  • MySQL优化

    1.建立索引 (1)合理的索引能够加速数据读取效率,不合理的索引反而会拖慢响应速度; (2)索引越多,更新数据的速度越慢 (3)尽量在MyIsam作为引擎的时候使用索引 (4)可在…

    Linux 2023年6月7日
    054
  • phpcms安装

    【快速安装开始】 下载解压phpcms,复制安装文件到站点目录”/opt/html”里,给予权限(官网无法访问了,所以下载地址需自行寻找上传) cd /us…

    Linux 2023年6月6日
    060
  • Ansible—Inventory主机清单

    含义 清查;存货清单;财产目录;主机清单 1、增加主机组 官方链接 http://docs….

    Linux 2023年6月6日
    094
  • nginx-add_header指令

    介绍 前端子系统由于业务形态,会有各种相同根域名的子系统相互调用,这时候就需要相应的子系统在nginx上支持跨域配置。 业务使用的样例 add_header ‘Access-Con…

    Linux 2023年6月6日
    086
  • Daydream Controller手柄数据的解析

    参考: How I hacked Google Daydream controller How I hacked Google Daydream controller (Part …

    Linux 2023年6月7日
    078
  • kafka 在 zookeeper 中保存的数据内容

    转载请注明出处: 服务器上下载 kafka : wget https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-3.2.0….

    Linux 2023年6月14日
    078
  • 【Leetcode】53. 最大子数组和

    给你一个整数数组 nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输&am…

    Linux 2023年6月6日
    077
  • 解决word插入新图片后原有图片题注的交叉引用错乱的问题

    引言 在日常工作和生活中,我们经常使用word来撰写文档、论文。为了更好地管理文档中的图片以及在正文中引用图片标题,需要借助题注来实现。通过题注,可以在正文中交叉引用图片,并为引用…

    Linux 2023年6月7日
    0123
  • 每天一个 HTTP 状态码 前言

    HTTP 状态码由 3 位阿拉伯数字构成,其中第一位用于定义 HTTP 响应的类型… 前前言 在重新开始写博文(其实大多也就最多算是日常笔记小结)之际,就想着从短小精悍…

    Linux 2023年6月7日
    087
  • redis应用-sortedset实现排行榜(转载)

    package site.zy9.redisApp.test; import java.util.HashMap; import java.util.List; import ja…

    Linux 2023年5月28日
    096
  • 配置phpstorm支持less自动编译css

    安装node.js 安装less npm install less -g 安装css压缩插件less-plugin-clean-css(此步骤非必选) npm install le…

    Linux 2023年6月13日
    078
  • Windows 10安装

    使用U盘安装操作系统教程 本教程介绍如何使用U盘安装操作系统,以安装Windows 10过程作为举例。 1 获取操作系统iso镜像文件 获取操作系统ISO镜像文件有很多途径,此处介…

    Linux 2023年6月13日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球