1 提取视频流/音频流

// 分离视频流和音频流
ffmpeg -i input_file -vcodec copy -an output_file_video
ffmpeg -i input_file -acodec copy -vn output_file_audio

2 视频转封装

ffmpeg –i test.mp4 –vcodec copy –acodec copy –f m4v test.m4v
ffmpeg –i test.avi –vcodec copy –acodec copy –f m4v test.m4v

3 视频转码

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi

部分选项说明:-bf,B 帧数量;-g,gop 大小控制;-s,分辨率。

4 视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5 视频剪切

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi

部分选项说明:-r, 提取图像的频率;-ss,开始时间;-t 持续时间。

6 视频截图

先运行如下命令测试一下:

ffmpeg -ss 00:00:08 -i test.mp4 -f image2 test.jpg

发现截图已经正常生成,但是命令行有如下报错信息:

[image2 @ 0x1370f80] Could not get frame filename number 2 from pattern 'test.jpg' (either set update or use a pattern like %03d within the filename pattern)

av_interleaved_write_frame(): Invalid argument

参考 “Solutions to some ffmpeg errors and messages” 得到原因如下:

这个错误通常是因为输出名不正常或者少了某些选项:

如果输出单幅图像,应添加 “-frames:v 1” 输出选项;

如果输出一系列图像,应当使用正确的名称形式,例如输出文件名为 output_%03d.png 时,将会依次生成 output_001.png, output_002.png, output_003.png 等;

如果输出单幅图像,总是用最新的图像覆盖掉旧图像,应添加 “-update 1” 选项。

根据以上建议,修改命令如下:

  1. 提取单幅图像

    第8秒处的提取一帧图像:
ffmpeg -ss 00:00:08 -i ring.mp4 -frames:v 1 -f image2 ring.jpg

各参数说明如下:

“-ss 00:00:08”:输入选项,截取输入文件中第8秒处的图像

“-frames:v 1”:输出选项,往输出中写入一个视频帧

“-f image2”:输出选项,指定输出格式为image2

注意“-ss 00:00:08”应放在“-i ring.mp4”之前,作为输入选项,可以很快就能获得视频截图。如果放在 “-i ring.mp4” 之后就成了输出选项,作输出选项时,ffmpeg 会一直从输入文件中读取,直到到达指定时间点,才能获取截图,如果凑巧截图的位置在文件尾,则要等整个视频播放完才能得到视频截图。

  1. 提取一系列图像

    每隔 1 秒(1Hz)提取一帧图像:
ffmpeg -i ring.mp4 -r 1 -f image2 ring-%3d.jpg

“-r 1”:输出选项,设置帧率,通过重复(比输入文件帧率大)或丢弃(比输入文件帧率小)视频帧来满足此帧率

从第 8 秒开始的持续 10 秒的视频里,每隔 1 秒(1Hz)提取一帧图像:

ffmpeg -ss 00:00:08 -t 00:00:10 -i ring.mp4 -r 1 -f image2 ring-%03d.jpg

从第 8 秒开始的持续 10 秒的视频里,提取前 3 帧图像:

ffmpeg -ss 00:00:08 -t 00:00:10 -i ring.mp4 -frames:v 3 -f image2 ring-%03d.jpg
  1. 提取一帧中的一场图像

    ffmpeg -i video.avi -frames:v 1 -vf field=top top%d.png

7 视频录制

录制网络流

ffmpeg –i rtsp://192.168.2.104:1235/test –vcodec copy out.avi

录制测试图(testsrc)视频,时长 12 秒

ffmpeg -ss 00:00:00 -t 00:00:12 -f lavfi -i testsrc testsrc.flv

8 保存YUV文件

ffmpeg -i tiger.m2ts -an -c:v rawvideo -pixel_format yuv422p -ss 00:00:08 -frames:v 5 tiger_422_8b.yuv
ffmpeg -i tiger.m2ts -an -c:v rawvideo -pixel_format yuv422p10 -ss 00:00:08 -frames:v 5 tiger_422_10b.yuv
ffmpeg -i fifa.ts -an -c:v rawvideo -vf format=yuv422p -ss 00:01:00 -frames:v 5 fifa_3840x2160_422_8b.yuv
ffmpeg -f lavfi -i nullsrc=s=3840x2160:r=60,lutrgb=0:255:0 -frames:v 5 -vf format=yuv422p -c:v rawvideo green_3840x2160_422p_8b.yuv

FFmpeg命令行示例的更多相关文章

  1. 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffmpeg命令行)

    简介 VCamera SDK Android 版(短视频拍摄SDK)是炫一下(北京)科技有限公司推出的软件开发工具包,为Android开发者提供简单.快捷的接口,帮助开发者实现Android平台上的短 ...

  2. FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe

    一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...

  3. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  4. FFmpeg命令行map参数选择音视频流

    FFmpeg命令行map参数选择音视频流 介绍 -map参数告诉ffmpeg要从输入源中选择/拷贝哪个stream流到输出,可以从输入源中选择多个音视频流作为输出. 不加-map参数,ffmpeg默认 ...

  5. FFmpeg 命令行

    FFmpeg命令行帮助 #>ffmpeg -h #>ffmpeg -h long #>ffmpeg -h full 将视频按照指定的宽高输出 #>ffmpeg -i input ...

  6. FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  7. FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

    一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...

  8. FFmpeg命令行工具学习(四):FFmpeg 采集设备

    在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码.封装.传输等操作. 例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的 ...

  9. 使用FFMpeg命令行录屏推rtmp流

    最近在做局域网内屏幕分享方面的东西,要把录制一台设备的屏幕然后实时推送给内网的一个或多个用户. 做了很多实验,效果还没有达到要求,这里分享一下推rtmp流的实验. 实验使用到的各种工具:FFmpeg. ...

  10. java调用ffmpeg命令行推流遇到的问题

    1.Java调用命令行,如果没有额外环境变量,不指定工作路径,Runtime有两个方法 public Process exec(String command) public Process exec( ...

随机推荐

  1. Runtime类的简单应用

    1.描述 Runtime:描述运行时状态. 在整个JVM中,Runtime类是唯一一个与JVM运行状态有关的类,且默认提供一个该类的实例化对象. 由于在每一个JVM进程中只允许提供一个Runtime类 ...

  2. 洛谷 P1540 [NOIP2010 提高组] 机器翻译

    题目概括 给定 N 个整数,和一个容量为 M 的"字典",从头到尾依次翻译,每次翻译先看自家字典,没有的话再看别人的字典并存到自家字典,如果自家字典满了,当前单词的翻译会代替最早进 ...

  3. 5.1 Vim及其安装

    通过前面的学习我们知道,Linux 系统中"一切皆文件",因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器. 作为一名 Linux 初学者,你必须熟练掌握 Linux ...

  4. 模态内重叠优化,简单有效的CLIP微调方法 | BMVC'24 Oral

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: CLIP Adaptation by Intra-modal Overlap Reduction 论文地址:https://arxiv.org ...

  5. Python中函数或者类对象带()与不带()的区别——闭包和函数返回时的常见现象

    Python中函数或者类对象带()与不带()的区别-----闭包和函数返回时的常见现象 - 函数不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成,返回一个已定义函 ...

  6. SQL排序分组

    --按某一字段分组取最大(小)值所在行的数据(2007-10-23于浙江杭州) /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3: ...

  7. vant+vue控制列表展开

    <van-list v-model="loading" :finished="finished" finished-text="没有更多了&qu ...

  8. API接口之设计篇

    在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用. 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性.可重复调用.稳定性.好 ...

  9. Blazor 组件库 BootstrapBlazor 中Button组件介绍

    组件介绍 按钮组件,应该是最基础的组件之一了.感觉没什么可介绍的,但是BootstrapBlazor的按钮,还是有很多不错的特性. 首先是最基础的,boostrap5的按钮样式: 代码如下: < ...

  10. CCPC Henan Provincial Contest 2020

    CCPC Henan Provincial Contest 2020 Problem B. 广告投放 n集节目按顺序播出,节目组决定在某些节目中投放广告,节目最初播出时有m名观众,若\(i\)集投放广 ...