FFmpeg命令行示例
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/18636101
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!