FFmpeg命令行示例
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” 选项。
根据以上建议,修改命令如下:
- 提取单幅图像
第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 秒(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
- 提取一帧中的一场图像
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命令行示例的更多相关文章
- 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffmpeg命令行)
简介 VCamera SDK Android 版(短视频拍摄SDK)是炫一下(北京)科技有限公司推出的软件开发工具包,为Android开发者提供简单.快捷的接口,帮助开发者实现Android平台上的短 ...
- FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- FFmpeg命令行map参数选择音视频流
FFmpeg命令行map参数选择音视频流 介绍 -map参数告诉ffmpeg要从输入源中选择/拷贝哪个stream流到输出,可以从输入源中选择多个音视频流作为输出. 不加-map参数,ffmpeg默认 ...
- FFmpeg 命令行
FFmpeg命令行帮助 #>ffmpeg -h #>ffmpeg -h long #>ffmpeg -h full 将视频按照指定的宽高输出 #>ffmpeg -i input ...
- FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...
- FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...
- FFmpeg命令行工具学习(四):FFmpeg 采集设备
在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码.封装.传输等操作. 例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的 ...
- 使用FFMpeg命令行录屏推rtmp流
最近在做局域网内屏幕分享方面的东西,要把录制一台设备的屏幕然后实时推送给内网的一个或多个用户. 做了很多实验,效果还没有达到要求,这里分享一下推rtmp流的实验. 实验使用到的各种工具:FFmpeg. ...
- java调用ffmpeg命令行推流遇到的问题
1.Java调用命令行,如果没有额外环境变量,不指定工作路径,Runtime有两个方法 public Process exec(String command) public Process exec( ...
随机推荐
- KubeSphere 社区双周报 | OpenFunction v1.0.0 发布 | 2023.03.03-03.16
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 指针进阶(数组指针 )(C语言)
1. 数组名的理解 在指针入门中我们在使用指针访问数组的内容时,有这样的代码: int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int *p = &arr[0]; ...
- mysql临时启动不了的问题处理。
getenforce SELinux状态 setenforce 0 临时关闭SELinux 然后启动mysql就能成功
- 【VMware VCF】使用 Offline Bundle Transfer Utility(OBTU)配置 VCF 脱机库。
VMware Cloud Foundation 环境中,软件包仓库的来源支持两种方式,分别是 Online Depot 和 Offline Depot.第一种方式,是在 VCF 环境能够连接互联网的情 ...
- CMake 生成器表达式---条件表达式和逻辑运算符
[写在前面] CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中.这些表达式允许你根据不同的平台.配置或编译器来定制构建过程. 本文引用的 ...
- mysql 查询两个日期之间所有天数(查询近两个月所有日期)
本文转自博文:https://blog.csdn.net/qq_42795259/article/details/126722209 遇到一个需求需要查询近两个月所有日期,如下图: 首先实现解决问题如 ...
- 如何在原生鸿蒙中进行RN热加载
一.背景 在上一篇博客中,我分享了将RN的bundle包在原生鸿蒙开发中进行使用.但是如果我们在实际的开发过程中,每次修改完代码都需要打包,然后重新运行原生项目的话效率就有点太低了. 原生鸿蒙支持RN ...
- requests发送http请求、https请求
requests是一个python的第三方库,用来发送http请求,也可以发送https请求 发送http请求时不需要ssl证书: url="http://xxxxx.com" r ...
- STM32的中断刨析(完结)
STM32中断刨析 一直以来,学习了 stm32 和 freertos 但在思考 RTOS 的任务调度时,涉及到 stm32 的中断相关的 PendSV 就感觉糊里糊涂.本篇记录刨析 stm32 的中 ...
- Dell 塔式t440 安装centos (Non-Raid 成功版)
前情提要 这篇文章是2021年我发布在csdn上,最近搬到博客园了,我把这篇文章重新整理发布下.有的图带有水印 csdn@at_the_Moment正常的,这就是我在csdn的账号. 提前声明一下这是 ...