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;借助哈希表来记录已经遍…

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;适用于各…

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

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

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…

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

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

原创+顶级SCI优化!23年新算法PSA优化CNN-LSTM-Attention一键实现多变量回归预测!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 效果展示 数据介绍 创新点 模型流程 部…

RabbitMQ的web控制端介绍

2.1 web管理界面介绍 connections&#xff1a;无论生产者还是消费者&#xff0c;都需要与RabbitMQ建立连接后才可以完成消息的生产和消费&#xff0c;在这里可以查看连接情况channels&#xff1a;通道&#xff0c;建立连接后&#xff0c;会形成通道&#xff0c;消息的投递、获取…

Vue-Router使用

1.安装 npm install vue-router4 2. 添加路由 新建router文件夹&#xff0c;新建文件 index.ts import { createRouter, createWebHashHistory,createWebHistory} from "vue-router";const routes [{path: /login,component: () > import("../views/Logi…

牛客网——美团2024届秋招笔试第三场编程真题

牛客网——美团2024届秋招笔试第三场编程真题 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题1. 平均数为k的最长连续子数组2. 小球投盒3. 小红结账4. 小美的游戏5. 小美种果树6…

python自学6

第一节第十章 开发图表 第一个可视化图表&#xff0c;折线图的开发 json数据格式 pyecharts模块 图标源码网站 Document gallery.pyecharts.org pyecharts模块的快速入门 pyecharts配置有两个选项 全局配置是对整个可视化界面进行配置&#xff0c;比如名字&#xff0c;工具…

代码复现错误

1. 问题&#xff1a; torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 64.00 MiB (GPU 0; 39.59 GiB total capacity; 37.72 GiB already allocated; 38.19 MiB free; 37.83 GiB reserved in total by PyTorch) If reserved memory is >> allocat…

防御保护 IPSEC VPPN实验

实验背景&#xff1a;FW1和FW2是双机热备 主备备份模式。 实验要求&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置&#xff08;由于是双机热备状态&#xff0c;所以FW1和FW2只需要配置FW1主设…