1.从文件中获取音频数据和视频数据
1.1 从文件中抽取音频数据
ffmpeg -i test.mp4 -vn -acodec copy test.aac
-i url (input) // 输入的文件地址
-vn // 阻止文件中的所有视频流
-acodec // 编解码器 https://blog.csdn.net/NewTWG/article/details/86393378
copy // 编码同原始音频
ffmpeg -i test.mp4 -vn -acodec copy test.wav
1.2 从文件中抽取视频数据
ffmpeg -i test.mp4 -vcodec copy -an NoSoundVideo.mp4
-i url (input) // 输入的文件地址
-an // 阻止文件中的所有音频流
ffmpeg -i test.mp4 -vcodec copy -an NoSoundVideo.h264
ffmpeg -i test.mp4 out.yuv
2.格式转换
2.1 aac 转 wav
ffmpeg -i audio.aac audio.wav
2.2 wav 转 aac
2.3 wav 转 PCM
ffmpeg -i input.wav -f s16be -ar 8000 -ac 1 -acodec pcm_s16be output.pcm
-f format // 格式 // https://blog.csdn.net/xifens/article/details/73188987
-ar freq // 采样频率
-ac channels // 采样通道数
-acodec codec // 编解码器 https://blog.csdn.net/NewTWG/article/details/86393378
2.4 pcm 转 wav
ffmpeg -f s16be -ar 8000 -ac 1 -acodec pcm_s16be -i output.pcm output.wav
2.5 rgba 转 bmp
ffmpeg -pix_fmt rgba -s 640x480 -i test.yuv test.bmp
2.6 mp4 转 yuv
1. 转换
ffmpeg -i xx.mp4 -s 1080x1920 -pix_fmt yuv420p xx.yuv
-s:设置yuv数据的分辨率
-pix_fmt:设置yuv数据的具体格式
2.播放
ffplay -f rawvideo -video_size 1080x1920 -i xx.yuv
ffplay -f rawvideo -video_size 864x486 -pix_fmt yuv420p xx.yuv
2.7 yuv 转 mp4
ffmpeg -pix_fmt bgra -s 1080x1920 -i engine_bgra.yuv output.mp4
2.8 视频保存成一组图片
ffmpeg -i output.mp4 -f image2 output_%05d.png
2.9 查询 ffmpeg 支持哪些视频格式
ffmpeg -pix_fmts
2.10 查询 ffmpeg 支持哪些音频采样格式
ffmpeg -sample_fmts
name depth
u8 8
s16 16
s32 32
flt 32
dbl 64
u8p 8
s16p 16
s32p 32
fltp 32
dblp 64
s64 64
s64p 64
ffmpeg 其他参数查询
3.播放软件
音频原始数据可以使用 : audacity
视频原始数据可以使用:YUV player
4. 采集电脑设备音视频数据
4.1 查看当前电脑支持 directshow 的设备
ffmpeg -list_devices true -f dshow -i dummy
4.2 使用摄像头录制视频
ffmpeg -f dshow -i video="Integrated Camera" camera.mp4
4.3 用 ffplay 实时播放摄像头采集到的画面
ffplay -showmode 0 -f dshow -i video="Integrated Camera"
5. 滤镜
给视频增加帧号水印
ffmpeg -i input.mp4 -vf "drawtext=fontfile=C\\:/Windows/fonts/consola.ttf:fontsize=72:fontcolor='white':text='%{frame_num}':boxcolor=0x000000AA:box=1:x=860-text_w/2:y=960" -y -c:a copy output.mp4
6. ffprobe
6.1 查看视频中音频或视频每一帧的码率
ffprobe -v error -select_streams v:0 -show_entries frame=pkt_size -of csv=p=0 xx.mp4
ffprobe -v error -select_streams a:0 -show_entries frame=pkt_size -of csv=p=0 xx.mp4
6.2 获取视频中是否有 b 帧
windows 平台
ffprobe -show_frames xxx.mp4 | findstr "pict_type"
linux 平台
ffprobe -show_frames xxx.mp4 | grep "pict_type"
6.3 打印每一帧数据信息
ffprobe -i url -show_frames -select_streams v -show_entries frame=width,height,pict_type
- show_frames 打印每一帧的信息
视频是这些数据
[FRAME]
media_type=video
stream_index=1
key_frame=0
pkt_pts=1987033
pkt_pts_time=1987.033000
pkt_dts=1987017
pkt_dts_time=1987.017000
best_effort_timestamp=1987033
best_effort_timestamp_time=1987.033000
pkt_duration=16
pkt_duration_time=0.016000
pkt_pos=165322
pkt_size=5368
width=1920
height=1080
pix_fmt=yuv420p
sample_aspect_ratio=1:1
pict_type=P
coded_picture_number=10
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=tv
color_space=smpte170m
color_primaries=smpte170m
color_transfer=smpte170m
chroma_location=left
[/FRAME]
音频是这些数据
[FRAME]
media_type=audio
stream_index=0
key_frame=1
pkt_pts=1986995
pkt_pts_time=1986.995000
pkt_dts=1986995
pkt_dts_time=1986.995000
best_effort_timestamp=1986995
best_effort_timestamp_time=1986.995000
pkt_duration=21
pkt_duration_time=0.021000
pkt_pos=171036
pkt_size=356
sample_fmt=fltp
nb_samples=1024
channels=1
channel_layout=mono
[/FRAME]
- select_streams 打印哪路流的数据,可以指定只打印视频
- show_entries 选择打印哪些项,比如width,height,pict_type。中间通过逗号分割
x.其他
拉取一段时间的音视频数据
ffmpeg -i http:/xxx.com/obj/yyy.mp4 -t 30 xxx.mp4
ffplay 使用硬件加速播放视频
ffplay.exe -vcodec hevc_qsv -i filePath
硬件可以用下面框中的名字
ffplay 常用快捷键
音量控制
静音 : M 键可切换 静音 / 非静音 状态 ;
减少音量 : 9 或 / 按键 , 减少音量 ;
增加音量 : 0 或 * 按键 ,增加音量 ;
参考文献
https://dangger.github.io/2015/10/30/index.html
https://blog.csdn.net/Tang_Chuanlin/article/details/85234841