ffmpeg、ffplay、ffprobe命令的使用
1. ffmpeg、ffplay、ffprobe命令使用
⭐ffmpeg命令
多用于转码,从url/现场 音频/视频源抓取输入源
主要参数:
- -i 指定输入流
- -f 指定输出格式
- -ss xx:xx:xx 指定从什么时间开始转换
- -t xx:xx:xx 指定输出文件的时长
- -y 覆盖已有文件
- -fs limit_size 设置文件大小上限
关于视频的参数
- -bv: 640K 设定视频码率为640k
- -minratee 600k 设定视频码率最小阈值为700k
- -maxrate 700k 设定视频码率最大阈值为700k
- -r 60 设定视频帧率fps=60
- -s 720x352 设定画面的宽与高为720X352
- -aspect 16:9 设定画面的比例为16:9
- -vn 不处理视频(比如只提取音频的时候)
- -vcodec 设定视频编解码器,(比如-vcodec codec,表示使用输入流的格式, -vcodec xvid表示使用XVID编码压缩视频)
音频参数:
- -ar 22500 设定采样率(audio rate)为22.5khz
- -b:a 640k 设定音频码率为640k
- -ac 2 设定声音的Channel数为2
- -acodec 设定声音编解码器(比如-acodec codec,表示使用输入流的格式, -acodec aac表示使用aac编解码)
- -an 不处理音频
举例说明:
视频转码:
ffmpeg -i .\test.mp4 output.ts问题:失真严重,默认设置通常注重兼容性或性能,而非高质量输出。
通过设置参数转码:
ffmpeg -i .\test.mp4 -c:v libx264 -crf 18 -preset slow output.ts
-c:v libx264:指定使用 H.264 编码器。
-crf(Constant Rate Factor):
- 控制视频质量,范围是 0-51,值越小质量越高。
- 推荐值:18(接近无损质量),22(中等质量)
-preset:
- 控制编码速度和压缩效率的平衡。
- 常见值:
ultrafast(最快)到veryslow(最慢但质量最佳)。
提取原始数据/文件
(原始数据无法通过ffplay播放)
- 提取原始音频数据:
ffmpeg -i test.mp4 -f s16le out.pcm(s16le表示(signed 16 bits little endian, 有符号 16 位小端))- 提取yuv420p数据:
ffmpeg -i test.mp4 -pix_fmt yuv420p out.yuv- 提取出音频文件:
ffmpeg -i test.mp4 -vn music.aac- 删除视频的音频流:
ffmpeg -i test.mp4 -vcodec copy -an output.mp4
添加水印:
ffmpeg -i test.mp4 -i logo.png -filter_complex overlay output.mp4
-filter_complex是 FFmpeg 中用于应用复杂过滤器图(filtergraph)的选项。允许你同时应用多个滤镜,或者处理多个输入和输出流。 这个选项通常用于处理更复杂的场景,比如多个视频流的拼接、合并、特效应用等。
去除水印:
ffmpeg.exe -i output.mp4 -vf "delogo=x=0:y=0:w=200:h=100:show=1" test1.mp4,尝试去除失败
保存视频帧:
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 img/pic-%03d.jpeg
ffplay命令
FFplay是一个非常简单和可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg API的测试平台
最简单的播放命令:ffplay input.avi
常用快捷键:
- q,ESC : 退出。
- f : 切换全屏。
- P,空格键 : 停下来。
- m : 切换静音。
- a : 在当前程序中循环音频通道。
- v : 循环视频频道。
- t : 当前程序中的循环字幕通道。
- c : 循环程序。
- w:循环视频过滤器或显示模式。
- s : 进入下一帧
- left/right : 寻找向后/向前10秒。
- down/up : 向后/前进1分钟。
- page down/page up : 寻找上一视频/下一视频。或者,如果没有,请向后/向前寻求10分钟。
ffprobe命令
ffprobe用来查看多媒体文件的信息
常用命令:ffprobe -show_packets input.mp4
也可通过:ffprobe -v error -show_entries stream=width,height -of csv=p=0 input.mp4查看基本信息
# 视频包
[PACKET]
codec_type=video
stream_index=0
pts=170000
pts_time=5.666667
dts=170000
dts_time=5.666667
duration=1000
duration_time=0.033333
convergence_duration=N/A
convergence_duration_time=N/A
size=2018
pos=1541272
flags=__
[/PACKET]
# 音频包
[PACKET]
codec_type=audio
stream_index=1
pts=260096
pts_time=5.418667
dts=260096
dts_time=5.418667
duration=1024
duration_time=0.021333
convergence_duration=N/A
convergence_duration_time=N/A
size=466
pos=1543290
flags=K_
[/PACKET]
ffprobe将音视频数据分解成多个PACKET是因为音视频文件的本质是由一系列的 数据包(packet) 组成,这些数据包按照时间顺序存储音视频流的具体内容。
- codec_type : 帧类型,如视频包video、音频包audio等
- stream_index : 多媒体的stream索引(上图的stream0表示video数据,steam1表示audio数据)
- ★pts(Presentation Time Stamp) : 显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
- ★dts(Decoding Time Stamp) : 解码时间戳,表示在什么时候解码的这一帧数据。
- duration : 数据包的持续时间,表示这个数据包覆盖的时间范围。(需要持续多久切换下一帧)
- size : 数据包该帧的字节大小
- pos : 该帧所在的文件偏移位置
- flags : 该帧标记,如关键帧K_与非关键帧__的标记
 
                    
                     
                    
                 
                    
                

 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号