ubuntu小技巧24--快速入门ffmpeg

2023-11-11

1 介绍

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。

笔者偶尔会做一些音视频的简单剪辑工具,多使用Ubuntu系统,且不想下载过多的工具软件,因此整理了一些 ffmpeg 常用的音视频操作方法,方便后续用 ffmpeg 做基础的音视频剪辑。
后续也会在本文持续更新 ffmpeg 相关的操作技巧和注意事项!

2 使用方法

2.1 ffmpeg命令剪辑音视频文件

视频格式转换

从mp4 转化为avi格式
ffmpeg -i v_input.mp4 v_input.avi

将音视频输出到mpg文件中

ffmpeg -i m_input.mp -i v_input.mp4 v_input.mpg

从视频中提取图片

ffmpeg -i v_input.mp4 -r 1  -f image2 v-%03d.jpeg
每秒从视频中提取一帧图片输出,格式为v-001.jpeg

将图片合并为视频

ffmpeg -f image2 -framerate 12 -i v-%03d.jpeg  v.avi
将v-001.jpeg 类别的图片合并为一个视频,每秒12帧

剪辑音乐

ffmpeg -ss 60 -i dayu.mp3 -t 10  dayu1.mp3
-ss 表示起始偏移时间,此处即从60s开始剪辑
-t 表示时间周期,此处为需要剪辑10s
最终即为剪辑 0:60 - 0:70 的音乐 

剪辑视频

ffmpeg -ss 60 -i v_input.mp4 -t 10  v_input1.mp4
-ss 表示起始偏移时间,此处即从60s开始剪辑
-t 表示时间周期,此处为需要剪辑10s
最终即为剪辑 0:60 - 0:70 的视频

拼接多个音频

cat dayu.txt 
file dayu1.mp3
file dayu2.mp3
将目标文件按照file filename 逐行写入到文件dayu.txt中
ffmpeg -f concat -i dayu.txt -c copy dayu60-80.mp3
通过-f concat -i dayu.txt 指定合并和文件源,并输出到 dayu60-80.mp3 中即可

2.2 python脚本剪辑音视频文件

输出视频基础信息

from __future__ import unicode_literals, print_function
import argparse
import ffmpeg
import sys


parser = argparse.ArgumentParser(description='Get video information')
parser.add_argument('in_filename', help='Input filename')


if __name__ == '__main__':
    args = parser.parse_args()

    try:
        probe = ffmpeg.probe(args.in_filename)
    except ffmpeg.Error as e:
        print(e.stderr, file=sys.stderr)
        sys.exit(1)

    video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
    if video_stream is None:
        print('No video stream found', file=sys.stderr)
        sys.exit(1)

    width = int(video_stream['width'])
    height = int(video_stream['height'])
    num_frames = int(video_stream['nb_frames'])
    print('width: {}'.format(width))
    print('height: {}'.format(height))
    print('num_frames: {}'.format(num_frames))

############################################
测试
############################################
# python3 video_info.py v_input.mp4 
width: 1920
height: 1080
num_frames: 1984

在这里插入图片描述
水平翻转视频(对每一帧进行左右翻转)

import ffmpeg
stream = ffmpeg.input('v_input1.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'v_output1.mp4')
ffmpeg.run(stream)

3 注意事项

  1. ffmpeg 有很多命令和参数,实际中如果不是需要精细处理,可以省略掉不必要的参数。

4 说明

软件环境
Ubuntu Desktop 20.04
ffmpeg version 4.2.4-1ubuntu0.1
参考文档
百度百科–ffmpeg
ffmpeg 官方文档
FFmpeg常用命令汇总+文档汇总
ffmpeg-python 0.1.1
github.com/kkroening/ffmpeg-python

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu小技巧24--快速入门ffmpeg 的相关文章

  • 使用 MediaRecorder 录制屏幕特定视图

    我想录制特定的屏幕视频View链接只想记录里面执行的动作LinearLayout 现在 MediaRecorder正在录制整个屏幕 如何录制屏幕的特定部分 MediaRecorder 通过媒体投影API 记录整个屏幕 至少从 Android
  • 使用 ffmpeg 将 h.264 avi 容器转换为 mp4

    我想使用 ffmpeg 将 h 264 avi 容器转换为 mp4 容器 我发现这个有效 ffmpeg i myfile avi vcodec copy myfile mp4 ffmpeg version N 51169 gcedf276
  • Google Cloud Platform:将上传的 MP4 文件转换为 HLS 文件

    我正在构建一个平台 允许用户将一些视频文件 20 40 秒 从手机上传到服务器 所有这些上传目前都运行良好 文件通过nodejs云功能存储在谷歌存储桶中 现在我想创建一个 gcp 转码器作业 它将上传的 mp4 视频文件转换为 hls 视频
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • MP4 到 DASH(bash 脚本)

    我有一个网站 用户可以在其中上传视频文件 我想使用 DASH 流式传输所有内容以获得自适应比特率流式传输 因此 我编写了一个 bash 脚本 由 cron 运行 将所有 mp4 文件转换为 DASH 但它无法正常工作 出了什么问题 例如 使
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • 使用 Ffmpeg 编辑视频元数据

    我想更改视频元数据 原始视频信息 ffmpeg i video mp4 Metadata major brand mp42 minor version 0 compatible brands isomavc1mp42 creation ti
  • ffmpeg:音频样本的字节顺序

    我使用 ffmpeg 的 avcodec 从我的 C 应用程序中的音乐文件中检索原始音频样本 对于我测试的文件 这些文件样本的字节序似乎是小字节序 但我想知道对于我尝试解码的所有文件是否总是如此 即来自 ffmpeg 的实现或至少它的体系结
  • 在 ffmpeg 中,如何使用scale2ref 过滤器缩放 dvdsub 字幕以匹配视频大小?

    我有一个从直播电视录制的 mpeg 文件 其中包含视频以及多个音频和字幕流 我的最终目标是能够创建较小的视频文件 因为 mpeg 文件大小为数 GB 我在这条道路上的第一步只是能够选择视频 音频和字幕流中的每一个并将它们复制到 mkv 文件
  • OpenCV IP 相机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片

    我在 cpp 中有一个 opencv 应用程序 它使用 opencv 的简单结构捕获视频流并将其保存到视频文件中 它与我的网络摄像头完美配合 但是 当我运行它从 IP 摄像机捕获流时 它可能会在大约十秒后崩溃 我的编译命令是 g O3 IP
  • 使用FFMpeg确定视频类型,然后进行转换?

    我正在尝试以编程方式确定文件的真实类型 看来我必须使用 FFMPeg 来实现这一点 我想确定上传的文件实际上是否是 MP4 或 FLV 对于 Flash 视频 或 WebM 对于 HTML5 我知道 FFMPeg 中的 i 运算符 但我不知
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将
  • 连接 2 个迷你音频文件并循环播放并添加背景音乐

    我需要用循环连接 2 个小音频文件并在单个命令中添加背景音乐 我能够将两个音频文件与背景音乐连接起来 我上面给出的代码正在运行 ffmpeg i 1 mp3 i 2 mp3 i background mp3 filter complex 0
  • FFMPEG - 具有持续时间过滤器问题的连接解复用器

    我正在尝试使用图像生成视频ffmpeg concat 解复用器 我正在创建一个带有图像文件路径的文本文件 由于图像的持续时间可能不同 我正在使用duration过滤器指定每个图像的持续时间 示例文本文件如下 文件1 jpg 持续时间3 文件
  • 无法从 webm 视频中提取 webp 中的帧

    我无法从 8K webp 视频中提取帧 我正在使用 ffmpeg 来提取帧 这是我正在使用的命令 ffmpeg i content to extract webm frame 2d webp 我得到的输出文件中没有任何数据 但是 当我导出为
  • ffmpeg计算视频比特率

    我想知道如何计算该视频的比特率 http jell yfish us media jellyfish 30 mbps hd hevc mkv http jell yfish us media jellyfish 30 mbps hd hev
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • FFmpeg 缩放不是平滑中心(而是锯齿形)

    我尝试执行基本操作zoompan https www ffmpeg org ffmpeg all html zoompan with FFmpeg 我有一个输入图像 png 1280x720 并从中创建一个 8 秒的视频 mp4 320x1
  • PowerShell 脚本 ffmpeg

    作为一名优秀的 Windows 系统管理员 我终于开始学习 PowerShell 话虽这么说 我不知道我在做什么 惊讶 惊讶 我认为远离生产环境 在家里使用 PowerShell 对我来说将是一次很好的学习经历 最近 我开始使用 FFMPE

随机推荐

  • bat 将指令执行结果赋给变量

    linux shell脚本将指令执行结果赋值给变量很容易 比如 bin bash file name ls wc l echo file name file list ls l awk print 1 NF echo file list 很
  • 夜深人静写算法(二十二)- 最小编辑距离

    文章目录 一 前言 二 最小编辑距离的定义 1 莱文斯坦距离 2 达梅劳 莱文斯坦距离 3 LCS 距离 4 汉明距离 三 最小编辑距离的求解 1 设计状态 1 插入 2 删除 3 替换 4 边界处理 2 状态转移方程 3 时间复杂度分析
  • 安装grub到U盘分区,实现多系统引导

    安装grub到U盘分区 实现多系统引导 目录 1 分区工具及分区类型 1 1 显示分区表和分区信息 1 1 1 fdisk l 1 1 2 gdisk l 1 1 3 parted l 1 2 常见分区类型 1 3 分区样例 1 3 1 B
  • Kubernetes滚动更新介绍及使用-minReadySeconds

    滚动升级Deployment 现在我们将刚刚保存的yaml文件中的nginx镜像修改为 nginx 1 13 3 然后在spec下面添加滚动升级策略 1
  • 使用递归调用实现N的阶乘

    递归的定义 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求
  • 设计模式--facade外观模式 VS Mediator 模式

    facade模式 为一组具有复杂且全面的接口对象提供一个简单且特定的接口 例如 图1中的DB类 该类为java sql包中复杂且全面的接口类提供了一个非常简单的 特定于ProductData的接口 图1 facade模式 是以明显且受限的方
  • Java的OOP(面向对象编程)总结,有这一篇足矣

    前言 OOP是Java语言中重要组成部分 其中面向对象编程是Java中核心编程思想 今天就将OOP知识进行总结 目录 一 思维导图 二 面对对象 1 首先要了解面对对象是什么 2 具体说法 3 面对对象三大基本特征 三 对象与类 1 对象
  • java抽象类和接口区别

    java抽象类和接口区别 这里需要谈到抽象类和Interface的差别 abstract class和interface是支持抽象类定义的两种机制 正是由于这两种机制的存在 才赋予了Java强大的面向对象能力 两者的区别如下 1 相同点 A
  • 笨办法学python 习题28

    习题28 返回值 python 都是给布尔表达式返回的两个被操作对象中的一个 而非False和True False and 1 gt False True and 1 gt 1 此处就涉及到短路逻辑 短路逻辑 简单理解 第一句中 False
  • docker容器cpu使用率——通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现

    root bogon docker run itd centos stress bin bash b0237fc264dec2ace935f917e8079d98ee4135c7f980666c59c2793ec56f9871 root b
  • IntelliJ IDEA 创建 Git 分支并且 Push 到远程

    在 IntelliJ 的右下角 你可以看到当前的 Git 分支 然后你可以单击这个分支后 在弹出的界面的最上方有一个新建分支的选项 然后再弹出的界面中 输入你要创建的分支名称后回车输入 然后从项目中找到需要的 Git 选项 然后在仓库中选择
  • python通过setup.py安装模块(源码安装) vs pip install

    python安装模块不止可以pip install 还有其他的方法 还可以用setup py 这也就是所谓的从源码安装 并且有些时候我们发现一些模块没有提供pip install 命令和安装教程 只提供了一个setup py文件 步骤 cd
  • 【华为机试真题Python】从入门到入职-真题列表导读

    写在前面 本专栏有100 道题 持续更新中 都是往期的HW机试真题 根据过往同学的经验基本都会考到原题 大家有什么不懂的都可以留言 华为机试有三道题目 第一道和第二道属于简单或中等题 分值为100分 第三道为中等或困难题 分值为200分 总
  • 图机器学习课程笔记5

    维生素C吃多了会上火 个人CSDN博文目录 cs224w 图机器学习 2021冬季课程学习笔记集合 目录 1 思维大纲 2 中文笔记 1 思维大纲 2 中文笔记 笔记5 提取码 1111
  • stm32f103使用DM542控制42相步进电机的原理和可行性分析

    步进电机是一种能够实现准确位置控制的电机 通常应用于需要高精度定位的场合 例如3D打印机 机器人和自动化系统等 而STM32F103是一种高性能 低功耗的微控制器 它拥有广泛的外设 适合用于控制各种电机 本文将介绍使用STM32F103控制
  • 【数据手册】LM1117L3芯片的使用

    1 特征 可调或固定输出 1A输出电流 低损耗 在1A输出电流时最大电压为1 3V 0 04 的线路调节 0 2 负载调节 100 热极限燃烧 快速瞬态响应 2 描述 LM1117系列正可调和固定调节器设计提供1A高电流效率 所有内部电路设
  • Python基础入门(一)——Anaconda的安装

    人生苦短 我用Python 相比C Java等开发语言 Python给大多数人的感觉都是入手容易啊 同时它又是数据分析 智能运算的利器 所以学的人 用的人 你懂的 那么 让我们一起开始Python之旅吧 当然 先从最简单的开始 1 先上一个
  • CSerialPort教程4.3.x (6) - CSerialPort作为第三方库的使用

    CSerialPort教程4 3 x 6 CSerialPort作为第三方库的使用 环境 系统 windows 10 CentOS 7 cmake 3 22 1 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库
  • 在linux下如何使用yum查看安装了哪些软件包

    Linux系统下yum命令查看安装了哪些软件包 yum list installed 列出所有已安装的软件包 yum针对软件包操作常用命令 1 使用YUM查找软件包 命令 yum search 2 列出所有可安装的软件包 命令 yum li
  • ubuntu小技巧24--快速入门ffmpeg

    ubuntu小技巧24 快速入门ffmpeg 1 介绍 2 使用方法 2 1 ffmpeg命令剪辑音视频文件 2 2 python脚本剪辑音视频文件 3 注意事项 4 说明 1 介绍 FFmpeg是一套可以用来记录 转换数字音频 视频 并能