一、压缩视频文件
例如将 input.mp4 转码成 output.avi。在Windows下,打开cmd,执行:
ffmpeg -i input.mp4 output.aviffmpeg -i input.mp4 output.avi
有很多参数可以指定,见ffmpeg官网 。
例如:
ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast -b:v 6000k output.avi
其中,
:v 代表视频,:a 代表音频;
-c:v libx264 表示使用264编码器,此时可以设置 -preset,ultrafast 表示最快;
-b 6000k 指定码率(比特率),码率低时速度快,但失真严重,码率高时反之;
-vcodec copy 表示不重新编码,在格式未改变的情况采用?;
-t xxx 表示只编码 xxx 秒,写入 xxx 秒后会停止;
-frames xxx 表示只编码 xxx 帧,写入 xxx 帧后会停止;
-f xxx 指定输出格式为 xxx;
-y 表示如果已存在 output.avi 则将其覆盖;
-pix_fmt xxx 表示像素格式为 xxx,有时候会提示 pix_fmt 已失效,要改为 pixel_format,视频默认是 yuv420p,还可以是yuv422p、rgb0、rgb24 等。
二、播放视频文件
使用 ffplay 而不是 ffmpeg,不用写 -i,也不用指定输出,如
ffplay input.mp4
三、.yuv 文件
如果输入文件是原始视频格式 .yuv,则在 -i input.yuv 前面要说明分辨率:
如 -s 1920x1080,有时候会提示 s 已失效,要改为 video_size。
输出文件也可以是 .yuv。
四、发送 UDP 流
类似压缩视频,只是将输出文件改为 udp 地址,在前面必须指定输出格式,即 -f 。
在 -i 前面要加 -re,表示按帧率发送。
ffmpeg -re -i input.mp4 -f h264 udp://233.233.233.233:6666
循环推流 在 -re后面加上-stream_loop -1,表示循环发送。
ffmpeg -re -stream_loop -1 -i input.mp4 -f h264 udp://233.233.233.233:6666
如果输入文件是 .yuv 则前面还要说明分辨率,即 -s。
-f rawvideo 表示发送的格式为原始未打包视频流? 由于未打包,无法接收回来。
要想发送未压缩的视频流可以打包成 TS 流,即 -f mpegts。
ffmpeg -re -s 1920x1080 -i input.yuv -b:v 60000k -f mpegts udp://233.233.233.233:6666
五、接收/播放 UDP 流
类似压缩视频,只是将输入文件改为 udp 地址,在前面要说明格式
ffmpeg -f h264 -i udp://233.233.233.233:6666 output.avi
如果是 rawvideo 格式,前面还要写 -s,但反正 rawvideo 没用。
如果接收的是 TS 流,似乎不需要在前面说明格式,加了 -f mpegts 反而报错。
ffmpeg -i udp://233.233.233.233:6666
播放 udp 流和播放视频文件类似
ffplay udp://233.233.233.233:6666
如需用VLC拉流,需安装VLC播放器,下载链接:VLC下载
内有各个系统的安装包,选择自己的系统下载安装即可。
安装好后,打开网络串流,输入对应的地址即可拉流显示。
本次分享到此结束,感谢大家的阅读!
想了解ffmpeg搭建的朋友请看我另一篇博客
标签:233.233,udp,ffmpeg,Windows,xxx,音视频,mp4,input From: https://blog.csdn.net/xuezhe5212/article/details/139660151