FFmpeg教程(干货快速上手)

什么是FFmpeg?

FFmpeg是一款免费、开源的跨平台多媒体处理工具,它支持几乎所有的视频格式和编码标准。FFmpeg包含了一系列的子项目和工具,如ffmpeg命令行工具用于转码和处理视频和音频文件,ffplay用于播放多媒体内容,而ffprobe则用于分析多媒体流的信息。

如何安装FFmpeg?

Windows

  • 下载最新版的FFmpeg:访问官方网站或github下载。
  • 解压缩到指定目录,例如:C:\FFmpeg
  • 添加FFmpeg到系统环境变量,确保能在任何路径下调用FFmpeg。
    如果在尝试运行 ffprobe 时收到 “不是内部或外部命令,也不是可运行的程序或批处理文件。” 的错误,这通常意味着 ffprobe(随 FFmpeg 一起安装)没有被添加到你的系统环境变量

macOS

推荐使用Homebrew,一个macOS的包管理器,通过简单的命令brew install ffmpeg即可完成安装。

Linux

大部分Linux发行版的包管理器都包含FFmpeg。以Ubuntu为例,使用sudo apt-get install ffmpeg命令即可安装。

如何添加 FFmpeg 到环境变量?

在 Windows 上:

  1. 找到 FFmpeg 的安装路径:记录下你解压缩 FFmpeg 的文件夹路径,需要找到 bin 目录的路径,例如 C:\ffmpeg\bin
  2. 编辑环境变量
    • 在搜索栏中搜索并打开“系统环境变量”或“编辑系统环境变量”。
    • 点击“环境变量”按钮。
    • 在“系统变量”区域找到并选择变量名为“Path”的变量,然后点击“编辑”。
    • 在编辑环境变量窗口,点击“新建”,然后粘贴你的 FFmpeg bin 目录路径(例如 C:\ffmpeg\bin)。
    • 点击“确定”保存你的更改,并关闭所有剩余的系统属性窗口。
  3. 验证安装:打开一个新的命令提示符窗口,输入 ffprobe -version,如果安装成功,你将看到 FFmpeg 的版本信息,如下图所示即为成功:在这里插入图片描述

在 macOS 或 Linux 上,通常通过终端安装 FFmpeg,路径会自动添加到环境变量中。如果遇到路径问题,可以手动添加路径到您的 shell 配置文件(如 .bash_profile, .bashrc, .zshrc 等)中。

查看视频的编码信息(重要

最大的作用是用来分析视频的兼容性问题!

  1. 打开命令行界面:这可以是 Windows 的命令提示符、PowerShell,或者是 macOS/Linux 的终端。

  2. 运行 ffprobe 命令:使用以下命令格式来获取视频文件的详细信息:

    ffprobe -v error -show_format -show_streams   路径+视频名称.格式
    
比如:ffprobe -v error -show_format -show_streams "C:\Users\lenovo\Desktop\红黑树\2.mp4"

这里,-v error 选项意味着只显示错误消息,-show_format-show_streams 选项用于显示文件的格式和各个流的详细信息。你需要将 your_video_file.mp4 替换为你想要检查的视频文件的路径和文件名。

运行这个命令后,ffprobe 会输出该视频文件的一系列信息,包括每个流(视频、音频等)的编解码器类型、分辨率、帧率等详细信息。具体地,你可以在输出中查找以下信息:

  • 视频流(Video stream):查找 codec_name 字段可以知道视频编码类型(如 h264hevc 等),widthheight 字段显示视频分辨率,avg_frame_rater_frame_rate 显示帧率。

  • 音频流(Audio stream):同样地,codec_name 字段表示音频编码类型(如 aacmp3 等)。

这些信息对于理解为何某些视频文件无法在特定的播放器或浏览器中播放非常有用,因为它可以帮助你确认文件是否使用了不被支持的编码格式。如果发现问题,您可以使用 FFmpeg 将视频转码为更兼容的格式。
以下是一个示例视频的编码信息:

[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_tag_string=[27][0][0][0]
codec_tag=0x001b
width=850
height=480
coded_width=850
coded_height=480
closed_captions=0
film_grain=0
has_b_frames=2
sample_aspect_ratio=256:255
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=30
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=progressive
refs=1
is_avc=false
nal_length_size=0
ts_id=1
ts_packetsize=188
id=0x100
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
start_pts=133200
start_time=1.480000
duration_ts=156337200
duration=1737.080000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=41
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_tag_string=[15][0][0][0]
codec_tag=0x000f
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
initial_padding=0
ts_id=1
ts_packetsize=188
id=0x101
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/90000
start_pts=129020
start_time=1.433556
duration_ts=156328910
duration=1736.987889
bit_rate=67783
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:language=eng
[/STREAM]
[FORMAT]
filename=C:\Users\lenovo\Desktop\浠嶤++绾㈤粦鏍戣璧?涓嶅彲鎾斁\浠嶤++绾㈤粦鏍戣璧穃绗竴绔?1\璇炬椂1-浠嶤++绾㈤粦鏍戣璧?mp4
nb_streams=2
nb_programs=1
nb_stream_groups=0
format_name=mpegts
format_long_name=MPEG-TS (MPEG-2 Transport Stream)
start_time=1.433556
duration=1737.126444
size=41636080
bit_rate=191746
probe_score=50
[/FORMAT]

基础使用技巧

视频转码

转码是FFmpeg最常见的应用之一。例如,将MKV格式转换为MP4:

ffmpeg -i input.mkv -codec copy output.mp4

裁剪视频

FFmpeg可以根据时间裁剪视频,无需重新编码:

ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output.mp4

合并视频

FFmpeg可以合并同格式的视频文件:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

其中filelist.txt包含了所有要合并视频文件的列表。

提取音频

从视频文件中提取音频轨道:

ffmpeg -i input.mp4 -vn -acodec copy output.aac

高级应用

批量处理

FFmpeg支持批量处理文件,结合Shell脚本可以大幅提高工作效率。

实时流处理

FFmpeg支持处理实时视频流,可以用于直播场景。通过RTMP或HLS等协议推流和拉流。

视频滤镜

FFmpeg拥有丰富的滤镜库,支持视频剪辑、色彩校正、字幕添加等高级编辑功能。

ffmpeg -i input.mp4 -vf "fps=25,scale=1280:-1:flags=lanczos" -c:v libx264 -preset fast -c:a aac output.mp4

学习资源推荐

  • FFmpeg官方文档:深入理解FFmpeg的最好资源。
  • GitHub:许多开源项目使用FFmpeg,从中学习实际应用。

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

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

相关文章

穿越牛熊,股市的春天还有多远?

2023年,资本市场的严冬令无数投资者和机构投资者都感受到了前所未有的压力。VC/PE、公募基金、股权投资类公司等机构,在这一年里业绩普遍不佳,寒意弥漫。VC/PE机构的营业收入普遍呈现负增长,公募基金更是历史上首次连续两年亏损&a…

LeetCode 刷题 [C++] 第3题.无重复字符的最长子串

题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 题目分析 可以使用滑动窗口加哈希表来实现: 使用start和end两个变脸来表示滑动窗口的头部位置和尾部位置,两者开始均为0;借助哈希表来记录已经遍…

redis数据结构类型

文章目录 数据结构特殊的数据结构bitmap 1.string命令1.单值缓存2.对象缓存3.分布式锁4.计数器 2.Hash常用命令应用场景应用场景 4.Set5.Sorted Setzset为什么不用红黑树和用B树 合理的数据编码扩容机制 数据结构 string:最基本的数据类型,二进制安全的…

Unity 给刚体一个力或速度

创建平面和小球,给力或给速度让其弹起 给小球挂载刚体(Rigibdody)和脚本 (力是累计或者衰减的,直接给速度就是赋值,但如果速度就和力类似了) using System.Collections; using System.Collect…

解决 ucore lab3 无法触发 page fault 的问题

问题描述 完成清华大学操作系统实验课 ucore(x86) lab3 时,发现无法触发 page fault 异常,具体来说时 check_pgfault() 函数会在执行如下代码时报错 static void check_pgfault(void) {// ......uintptr_t addr 0x100;assert(find_vma(mm, addr) vma…

three.js 射线Ray,三维空间中绘制线框

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…

serial库串口通讯

前言 Python的pyserial库允许与不同的设备进行通信。 安装 python > 3.4 pip install pyserial 基本流程 import serial# 1. 打开串口 ser serial.Serial()# 2. 设置串口参数&#xff08;例如波特率、数据位、校验位、停止位&#xff09; ser.port /dev/ttyS0 # 这是一…

CDN介绍

概念介绍 CDN Content Delivery Network&#xff0c;缩写&#xff1a;CDN&#xff09;是一种提供更快互联网访问的服务&#xff0c;通过在网络的边缘或核心交换区域部署内容代理服务器来实现。这些服务器利用全局负载调度机制来分发内容&#xff0c;从而构建了一个覆盖范围广…

nRF52832——GPIOTE与外部中断

这里写目录标题 GPIOTE 原理分析GPIOTE 输入事件应用GPIOTE 事件寄存器应用GPIOTE 事件组件的应用&#xff08;库函数&#xff09;GPIOTE PORT 事件应用 GPIOTE 任务应用GPIOTE 任务触发 LED 寄存器操作组件方式进行任务配置 GPIOTE 原理分析 GPIO 任务和时间&#xff08;GPIO…

仿牛客网项目---Elasticsearch分布式搜索引擎

1.什么是ElasticSearch分布式搜索引擎&#xff1f; Elasticsearch是一个开源的分布式搜索引擎&#xff0c;提供实时的、高可用性的搜索和分析解决方案。它支持快速索引和搜索大规模数据&#xff0c;具有分布式架构、RESTful API、基于JSON的查询语言等功能&#xff0c;适用于各…

windows下搭建虚拟机

Windows下搭建虚拟机 安装Linux虚拟机 下载&安装VirtualBox&#xff1a;https://www.virtualbox.org/&#xff0c;点击 download virtualbox 6.x&#xff0c;选择对应平台的版本&#xff1a;Windows hosts → https://download.virtualbox.org/virtualbox/6.1.38/Virtual…

蓝桥杯集训·每日一题2024 (二分,双指针)

前言&#xff1a; 开学了&#xff0c;平时学习的压力也逐渐大起来了&#xff0c;不过还算可以接受&#xff0c;等到后面阶段考的时候就不一样了&#xff0c;我目前为了转专业退选了很多课&#xff0c;这些课我都需要花时间来刷绩点&#xff0c;不然保研就没有竞争力了。我自己会…

【 深度学习相关的线性代数知识点】

深度学习相关的线性代数知识点 在机器学习和深度学习中&#xff0c;线性代数的知识点主要包括标量、向量、矩阵和张量。 线性代数在机器学习和深度学习中扮演着基础且关键的角色。它不仅涉及到算法的设计和优化&#xff0c;而且对于数据的表示、处理和分析都至关重要。例如&a…

洛谷: P1531 I Hate It(线段树)

记录一道线段树单点修改题目。 创建线段树的时间复杂度为O(n),每次查找和修改的时间复杂度均为O(logn) 代码: #include <bits/stdc.h> using namespace std; const int maxn 1e6 10; int arr[maxn], tree[maxn], n, m; void build(int node, int start, int end) {/…

OpenCASCADE+Qt创建建模平台

1、建模平台效果 2、三维控件OCCWidget 将V3d_View视图与控件句柄绑定即可实现3d视图嵌入Qt中&#xff0c;为了方便也可以基于QOpenGLWidget控件进行封装&#xff0c;方便嵌入各种窗体使用并自由缩放。 #ifndef OCCTWIDGET_H #define OCCTWIDGET_H#include <QWidget> #i…

javaWebssh药品进销存信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh药品进销存信息管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOM…

【Python】使用 onnxruntime-gpu 进行推理,解决运行时间久了显存被拉爆了

1. 问题 使用 onnxruntime-gpu 进行推理&#xff0c;解决运行时间久了显存被拉爆了 2. C/Python 配置 运行时&#xff0c;配置 provder , gpu_mem_limit 参数来进行限制&#xff0c;比如2G显存 21474836482 * 1024 * 1024 * 1024 Python providers [("TensorrtExecu…

【机器学习300问】29、训练数据少该怎么办?数据增强

一、什么时候会遇到训练数据少的情况&#xff1f; 在机器学习和深度学习中&#xff0c;遇到训练样本不足的情况通常发生在出现了新的任务、高昂的采集数据成本&#xff0c;稀有事件或小众领域等。接下来我展开说三种情形并分别举个例子。 &#xff08;1&#xff09;出现新的任…

392.判断子序列(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位…

Filter过滤器+JWT令牌实现登陆验证

一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限&#xff0c;比如没有登陆时就不能进行其他操作。如果他需要进行其他操作&#xff0c;而在这之前他没有登陆过&#xff0c;服务端则需要将该请求拦截下来&#xff0c;这就需要用到过滤器&#xff0c;过滤器可以…