ffplay
ffplay不仅仅是播放器,也可以作为音视频数据图形化分析工具,ffplay也可以看到视频图像的运动估计方向、音视频波形等,同时也是测试ffmpeg的codec引擎、format引擎、filter引擎工具,还可以进行可视化的媒体参数分析,可以通过ffplay –help来查看:
字段 |
说明 |
x |
强制设置视频显示窗口的宽度 |
y |
视频显示窗口的高度 |
s |
设置视频显示的宽高 |
fs |
强制设置全屏显示 |
an |
屏蔽音频 |
vn |
屏蔽视频 |
sn |
屏蔽字幕 |
ss |
根据设置的秒进行定位拖动 |
t |
设置播放长度 |
bytes |
设置定位拖动的策略,0不可拖动,1为可拖动,-1为自动 |
nodisp |
关闭图形化显示窗口 |
f |
强制使用设置的格式进行解析 |
window_title |
设置窗口的标题 |
af |
设置音频的滤镜 |
codec |
强制使用设置的codec进行解码 |
autorotate |
自动旋转视频 |
举个例:
1 2
| ffplay -window_title "我的视频播放窗口" output.mp4
|
ffprobe
ffprobe是ffmpeg中一个查看多媒体文件信息的模块。此模块可以用来查看多媒体文件格式以及编码。ffprobe的命令较多,这里只简单的列举了一些比较常用的命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| -L 显示协议 -h/-?/-help/--help topic 帮助可以选择话题 -version 显示版本 -buildconf 展示编译配置选项 -formats 显示支持的编码 -muxers 展示支持的封装器 -demuxers 展示支持的解封装器 -devices 展示支持的设备 -codecs 展示支持的编码 -decoders 显示支持的解码器 -encoders 显示支持的编码器 -bsfs 显示支持的比特流过滤器 -protocols 展示支持的协议 -filters 展示支持的过滤器 -pix_fmts 显示支持的像素格式 -layouts 展示支持的声道格式 -sample_fmts 显示支持的采样格式 -colors 展示支持的颜色名称 -loglevel loglevel 设置日志级别 -v loglevel 设置日志级别 -report 生成报告 -max_alloc bytes 设置单个已分配块的最大大小 -cpuflags flags 指定cpu标志 -hide_banner hide_banner 不显示程序横幅 -sources device 列出源的输出设备 -sinks device 列出输出设备的接收器 -f format 指定格式 -unit 显示显示值的单位 -prefix 对显示的值使用SI前缀 -byte_binary_prefix 对字节单位使用二进制前缀 -sexagesimal 对时间单位使用六十进制格式 HOURS:MM:SS.MICROSECONDS -pretty 美化显示输出的值,让人可读 -print_format format 设置打印格式 (available formats are: default, compact, csv, flat, ini, json, xml) -of format -print_format的编码 -select_streams stream_specifier 选择指定的stream -sections 打印节结构和节信息,然后退出 -show_data 显示数据包信息 -show_data_hash 显示数据包hash值 -show_error 显示探测中的错误 -show_format 显示格式/容器信息 -show_frames 显示帧信息 -show_format_entry entry 显示格式/容器信息中的特定条目 -show_entries entry_list 显示一组指定的项 -show_log 显示log -show_packets 显示packet信息 -show_programs 显示程序信息 -show_streams 显示stream的信息 -show_chapters 显示chapters的信息 -count_frames 每个stream中的帧数 -count_packets 每个stream中的包数量 -show_program_version ffprobe的版本 -show_library_versions 库的版本 -show_versions 程序和库的版本号 -show_pixel_formats 展示像素格式描述 -show_private_data 显示私有数据 -private 和显示私有数据一样 -bitexact 强制提取bit输出 -read_intervals read_intervals 设置读取间隔 -default 默认所有选项 -i input_file 读取指定文件 -print_filename print_file 重新显示输入的文件名 -find_stream_info 读取并解码流,用启发式方法填充缺失的信息
|
举个例子说明一下:
1
| ffprobe -show_format output.mp4 -print_format json
|
输出为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "format": { "filename": "output.mkv", "nb_streams": 3, "nb_programs": 0, "format_name": "matroska,webm", "format_long_name": "Matroska / WebM", "start_time": "0.000000", "duration": "5611.648000", "size": "3212871221", "bit_rate": "4580289", "probe_score": 100, "tags": { "ENCODER": "Lavf58.45.100" } } }
|
ffmpeg
1 2 3 4 5 6 7 8
| 1、视频剪切
ffmpeg -ss 00:00:00 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split.mp4
ffmpeg -ss 00:00:30 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split1.mp4
|
1 2 3 4 5 6 7 8 9
| 2、视频合并
内容如下: file ./split.mp4 file ./split1.mp4
ffmpeg -f concat -i list.txt -c copy concat.mp4
|
1 2 3 4
| 3、格式转换
转化为视频:ffmpeg -i video.m4s -c copy video.mp4 转化为音频:ffmpeg -i audio.m4s -c copy audio.aac
|
1 2 3 4 5 6 7 8 9 10 11
|
4、将原有视频的音频消除 ffmpeg -i video原版.mp4 -vcodec copy -an video去音频版.mp4
5、加入新的音频 ffmpeg -i video去音频版.mp4 -i audio原版.mp3 -vcodec copy -acodec copy 音视频合并版.mp4
|
1 2 3 4 5 6 7 8 9 10 11
| 6、去除水印 delogo=x=0:y=0:w=100:h=77 (去除多个水印可以使用 ”,“ 分隔使用)
ffmpeg -i output1.mp4 -vf "delogo=x=199:y=190:w=436:h=120:show=1,delogo=x=400:y=450:w=436:h=120:show=1,delogo=x=1400:y=950:w=436:h=120:show=1" -c:a copy test123.mp4
|
1 2 3 4 5 6 7 8 9 10 11 12
| 7、指定视频与指定音频合并生成新的视频文件 -map [-]input_file_id[:stream_specifier][?][,sync_file_id[:stream_specifier]] | [linklabel] (output)
ffmpeg -i input.mkv -map 0:0 -map 0:2 -c copy -y output.mkv
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy -y output.mkv
|
1 2 3 4 5 6
| 8、批量格式转换
for i in *.mp4; do echo"${i%.*}.mp3"; ffmpeg -i "$i" "${i%.*}.mp3";done
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 9、修改多音轨视频的默认音轨
ffmpeg -i input.mkv -map 0:0 -map 0:2 -map 0:1 -c copy -disposition:a:0 default -y output.mkv
|
更多指令感兴趣的可以前往 ffmpeg官网 查看