音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的99八十一难
《1》我的实验所使用的视频文件告知读者
1.
这是我在ubuntu环境上实验使用的视频文件, 我在windows上查看了详细信息,然后拖进ubuntu内,重命名为video-test.mp4
2.
这是我在windows环境上实验使用的视频文件
《2》开始实验
<1>播放音频
-window_title LMW:窗口名起名为-window_title LMW:窗口名起名为LMW
-loop 2:循环播放两次
-autoexit:播放完毕后自动退出
ffplay -window_title myplayer -loop 2 -autoexit hello.wav (windows、Linux实测适用)
<2>播放视频
ffplay test.mp4 (windows、Linux实测适用)
结束播放后,可以看到相关的视频参数:
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 206 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)
这显示该视频详细信息为h264编码,格式为yuv420p, 分辨率为1280x720, 码流为206kb/s等。
<3>以固定窗口大小播放视频 -autoexit:播放完毕后自动退出
ffplay -x 640 -y 480 -autoexit test.mp4 (windows、Linux实测适用)
-window_title LMW:窗口名起名为LMW
ffplay -window_title LMW -x 640 -y 480 -autoexit test.mp4 (windows、Linux实测适用)
<4>视频转码 -an: audio not 不需要音频,剔除音频
ffmpeg -i test.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv (windows、Linux实测适用)
下面截图来自ubuntu上的实验
PS:文件大小比对
原视频13.8MB
out.yuv达到了惊人的近500MB,而且不含音频信息。
所以说,音视频文件需要编码啊,降低文件大小同时又保持高画质,很必要。
<5>播放yuv420p格式的视频:out.yuv, 此时需要指定其正确的视频分辨率,否则不能正常显示该视频
ffplay -pix_fmt yuv420p -s 1280x720 out.yuv (windows实测有效)
ffplay -pix_fmt yuv420p -s 1080x1920 out.yuv (Linux实测有效,注意,这里1080在前面,1920在后面)
或者
ffplay -pix_fmt yuv420p -s 1080x1920 -x 640 -y 320 -window_title LMW -autoexit out.yuv
(Linux实测有效,注意,这里1080在前面,1920在后面)
<6>只提取y分量并播放该视频,视频变成了黑白电视的效果
-vf: 简单滤波器
ffplay -s 1280x720 -vf extractplanes='y' out.yuv
<7>只提取u分量并播放该视频
ffplay -s 1280x720 -vf extractplanes='u' out.yuv
<8>只提取v分量并播放该视频
ffplay -s 1280x720 -vf extractplanes='v' out.yuv
<9>录制音频
mac:
ffmpeg -f avfoundation -i:0 out.wav
windows:
chcp 65001
敲入该命令,使得windows的cmd命令提示符窗口可以正确显示出中文 UTF-8
ffmpeg -list_devices true -f dshow -i dummy
执行该指令,然后查看 DirectShow video devices ,会列出音频设备和视频设备的名字
ffmpeg -f dshow -i audio="麦克风阵列 (Realtek Audio)" -acodec libmp3lame test.mp3
录制音频,按下ctrl+c可以结束录制音频
ffmpeg -f dshow -i video="HD User Facing" -t 10 -vcodec libx264 test.mp4
录制10秒钟的视频,采用H264编码,保存为文件。 video=”XX” XX是上面ffmpeg -list_devices查看到的视频设备的名字
参考【window系统 实现FFmpeg 录制音视频-CSDN博客】
https://blog.csdn.net/david_jiahuan/article/details/103634013
Linux:
方式1
arecord -D plughw:0,0 -f S16_LE -c 2 -r 22050 out.wav
这个没使用ffmpeg,使用了alsa。 arecord 是ALSA声卡驱动程序的命令行声音文件记录器
方式2
ffmpeg -f alsa -ac 2 -i hw:0,0 out.avi
ffplay out.avi
使用ffmpeg方式录制音频,不过我使用笔记本录制,音量很小。
<10> 录制屏幕
Linux:
方式1 实测有画面没声音
ffmpeg -f x11grab -r 30 -i :0.0 -f alsa -i hw:0,0 -acodec flac -vcodec ffvhuff out.mkv // 采用mkv格式
ffplay out.mkv
方式2 实测有画面没声音
ffmpeg -s 800x600 -r 25 -f x11grab -i :0.0 -f alsa -ac 2 -ar 44100 -i pulse -qscale 0.01 output.flv
ffplay output.flv
方式3 实测有画面没声音 而且分辨率设置太大,画面会不清晰
ffmpeg -s 1688x966 -r 25 -f x11grab -i :0.0 -f alsa -ac 2 -ar 44100 -i pulse -t 60 test.mp4
<11> 录制摄像头视频
Linux:
实测有画面有声音,但是播放时音视频不同步
ffmpeg -f alsa -i default -f v4l2 -s 1024x768 -i /dev/video0 -acodec flac -vcodec ffvhuff out.mkv
ffplay -window_title LMW_Family -autoexit out.mkv
音视频都有,且播放同步
待探索
《3》ubuntu 64位 环境下编译 ffmpeg:
1 官网下载源文件压缩包,解压,进入到解压后的文件夹ffmpeg
2 配置编译脚本
可以执行./configure --help查看帮助信息。
例如我想知道如何进行使能音频操作的配置,执行./configure --help | grep aac 即可查询到需要进行的配置是 --enable-libfdk-aac
敲入如下配置参数:
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --disable-static --enable-shared --enable-libx264 --enable-filter=delogo --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libopus
可以看到此时出现了报错:yasm太老了, 但是我们可以使用--disable-x86asm参数解决该报错,make 、make install, 然后这样得到的只是一个crippled build, 即功能残缺的编译。
我们不想要功能残缺的,所以我们必须解决yasm太老的问题。
3 安装yasm
http://www.tortall.net/projects/yasm/releases/
我当前使用的是ubuntu系统,所以选择下载了一个tar.gz版本
之后解压,进入解压后的文件夹
./configure --prefix=/home/lmw/MINE/ffmpeg/yasm_steup_here
make
make install
这样就安装好了yasm。
最后添加至环境变量
4
我们再回头,try agian ,重新配置下ffmpeg 的configure脚本,
又遇到ERROR:libfdk_aac not found
现在我们面临的是编译过程中遇到的第二个问题,调整好心态,经过百度,我有了解决方案,下面开始:
下载fdk-aac
https://sourceforge.net/projects/opencore-amr/files/fdk-aac/
下载后拖进ubuntu,解压,进入解压后的文件夹
./configure
make
make install
这样就解决了我们面临的第二个问题了。
5
我们再次 try agian ,重新配置下ffmpeg 的configure脚本,
好吧,很无奈,但是也没办法,我们现在遇到了面临的第三个报错。
opus是啥呢,重要吗?
看来是音频编解码相关,所以我们必须要解决这第三个报错。
下载opus
https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
5.1 ./configure --prefix=/home/lmw/MINE/ffmpeg/opus_stup_here
5.2 make
5.3 make install
5.4 将/home/lmw/MINE/ffmpeg/opus_stup_here/include/opus 拷贝到系统的/usr/include/下
将 /home/lmw/MINE/ffmpeg/opus_stup_here/lib/* 拷贝到系统的/usr/lib/下
6.
我们再次 try agian
挺高兴的,这是我们遇到的第四个错误。为什么高兴呢?因为之前在百度解决之前三个报错的时候,我就顺带看到了这个libx264的报错,说明大家都遇到了这个问题,
侧面说明咱们的编译ffmpeg的进展之路还是蛮顺利的。
接着来解决这第四个报错:
6.1 下载x264安装包
https://www.videolan.org/developers/x264.html
本来的理想步骤是下面这样,一路执行下去就安装完事了。
cd x264-master
make uninstall
make distclean
./configure --enable-static --disable-opencl
make
make install
但是在执行./configure --enable-static --disable-opencl这句配置时,又遇到了问题
而这个汇编器是需要的,我们必须解决这个问题。 ps: 这是遇到的第5个问题了, 保持淡定。
6.2 下载nasm
https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/
解压:tar -jxvf nasm-2.13.03.tar.bz2
cd nasm-2.13.03
./configure
make
make install
安装完成nasm之后再重新进入x264-master目录下执行6.1的步骤:
make uninstall
make distclean
./configure --enable-static --disable-opencl
现在执行完以后提示我们可以make啦,很开心,哈哈
make
make install
贴个图,现在x264也搞定了
7.
我们再次 try agian
没遇到报错,看来ffmpeg的配置这步已经搞定了。
之后
make -j4
重装下libx264试试,环境安装这事情,有些事也说不准,多试试
这就重装好了。
8. 再次try again
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --disable-static --enable-shared --enable-libx264 --enable-filter=delogo --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libopus
如下图:
make
现在好了,make顺利了
make install
一切顺利, ffmpeg就算编译安装好了。
最后可以看到我们指定的ffmpeg的按量路径下有了bin文件夹,进入到bin文件夹我们看到了三个程序。
将下面的三个程序所在的全路径,添加至系统环境变量内
9. 最后进行几波测试
9.1 测试1
解决方法:
需要配置环境变量:
vim.tiny /etc/ld.so.conf
在文件中添加如下的路径:
/usr/local/ffmpeg/lib
保存后,更新环境变量
ldconfig
再次测试播放:
ffplay -x 640 -y 480 -autoexit video-test.mp4
测试正常,有画面有声音
PS: 最好将声卡和摄像头都连接至ubuntu内
9.2 测试2
ffmpeg -i video-test.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 3.aac
测试播放提取出来的音频文件也成功了。
--------------------------------------------------------
编写本博文查阅过的参考文章,在此表示感谢
1. Ubuntu下opus的安装及使用
https://blog.csdn.net/chidaoqi1607/article/details/106260048/
这篇文章内还提供了一个PCM音频编解码的程序示例,在编译好ffmpeg后,我们可以实测体验一下该程序跑起来的效果。
2. ERROR:libfdk_aac not found
https://blog.csdn.net/longbei9029/article/details/79402504
3. Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure with --disable-asm.
https://blog.csdn.net/qq_39759656/article/details/80776550
4.
https://www.it610.com/article/1279155905220329472.htm
.
音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的99八十一难的更多相关文章
- FFmpeg命令行工具学习(四):FFmpeg 采集设备
在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码.封装.传输等操作. 例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的 ...
- FFmpeg命令行工具学习(五):FFmpeg 调整音视频播放速度
FFmpeg对音频.视频播放速度的调整的原理不一样.下面简单的说一下各自的原理及实现方式: 一.调整视频速率 调整视频速率的原理为:修改视频的pts,dts 实现: ffmpeg -i input.m ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- iOS开发ffmpeg SDK 编译和集成
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它提供了录制.转换以及流化音视频的完整解决方案.同时,FFmpeg是一套跨平台的方案,所以我们可以在iOS开发中使 ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- 音视频】5.ffmpeg命令分类与使用
GT其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定 G: 熟练使用ffmpeg命令!T :不要死记硬背,看一遍,自己找下规律,敲一遍, ...
- 音视频编解码流程与如何使用 FFMPEG 命令进行音视频处理
一.前言 FFMPEG 是特别强大的专门用于处理音视频的开源库.你既可以使用它的 API 对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频 ...
- 音视频入门-02-RGB拼图
* 音视频入门文章目录 * 图片 & 像素点 & RGB 平时浏览的图片看不出像素点: 图片放大时,可以看出图片是一个个像素点组成的: 每个像素点的颜色可以用 RGB 表示: RGB ...
- 多媒体开发(4):在视频上显示文字或图片--ffmpeg命令
小白:我录了段视频,里面用的音乐是有版权的,而且快过期了,能把音乐去掉吗? 小程拿到视频后,一个快捷键打开命令终端,快速打下一行命令: ffmpeg -i 小白.flv -vcodec copy -a ...
- 堪称教科书级别的Android音视频入门进阶学习手册,开源分享!
概述 随着整个互联网的崛起,数据传递的形式也在不断升级变化,总的流行趋势如下: 纯文本的短信,QQ -> 空间,微博,朋友圈的图片文字结合 -> 微信语音 -> 各大直播软件 -&g ...
随机推荐
- [oeasy]python0016_编码_encode_编号_字节_计算机
编码(encode) 回忆上次内容 上次找到了字符和字节状态之间的映射对应关系 字符对应着二进制字节 二进制字节也对应着字符 这种字节状态是用2位16进制数来表示的 hex(n)可以把数字转化为 ...
- 手写数字识别-使用TensorFlow构建和训练一个简单的神经网络
下面是一个具体的Python代码示例,展示如何使用TensorFlow实现一个简单的神经网络来解决手写数字识别问题(使用MNIST数据集).以下是一个完整的Python代码示例,展示如何使用Tenso ...
- 假期小结3Hadoop学习
学习Hadoop是一个很好的选择,因为它是大数据处理和分析领域最流行的框架之一.Hadoop提供了可靠.可扩展的分布式数据处理能力,适用于处理大规模数据和构建可靠的数据管道. 在学习Hadoop时,以 ...
- windows10使用scp命令
windows10使用scp命令 windows自带scp命令 windows上传文件到linux//使用方法:scp 源文件路径 账户@地址:目的路径scp C:\Users\zbh\Deskt ...
- 对比python学julia(第四章:人工智能)--(第二节)人脸识别
2.1. 项目简介 人脸识别是基于人的脸部特征信息进行身份识别的一种图像识别技术.使用0PenCV 进行人脸识别的过程如下. (1) 针对每个识别对象收集大量的人脸图傣作为样本. (2) 将样本 ...
- 推荐一款好用的PDF转换工具,可以拆分、合并,亲测好用!!!
推荐一款好用的PDF转换工具,可以拆分.合并,等等操作,亲测好用. PS. 因为经常会遇到PDF的拆分需要,以前在网上的都是免费的,后来的也都变成付费的无水印的了,再然后就变成全都要收费了.尴尬的是, ...
- 【转载】 EdgeX Foundry试运行
原文地址: https://www.cnblogs.com/charlieroro/p/14843335.html ========================================== ...
- MindSpore1.3.0 GPU pip方式安装 —— Ubuntu18.04系统 (最终安装结果为成功)需要管理员权限,sudo安装
官网地址: https://www.mindspore.cn/install =========================================================== 安 ...
- 【转载】 【WarpDrive】GPU加速RL: 一块V100运行上千个智能体、数千个环境,这个「曲率引擎」框架实现RL百倍提速
原文地址: https://mp.weixin.qq.com/s/Vw39k2PteEIGLRhmh2raLQ ============================================ ...
- Leetcode: 586. Customer Placing the Largest Number of Orders
题目要求如下: 给出的例子如下: 简单地说就是要找出表中订单最多客户的ID. 使用如下的代码进行实现: import pandas as pd def largest_orders(orders: p ...