FFmpeg常见命令行
1、ffmpeg命令行 视频生成图片
ffmpeg -i test.mp4 -r 25 -f image2 data/image%3d.jpg
这个命令行使用FFmpeg工具将视频文件(test.mp4)转换为一系列图像文件。
让我们逐个解释每个参数的含义:
-i test.mp4
: 指定输入文件为test.mp4。-i
是FFmpeg用于指定输入文件的选项。-r 25
: 设置输出图像的帧率为25帧/秒。-r
是FFmpeg用于设置帧率的选项。-f image2
: 指定输出格式为image2,表示输出为一系列图像文件。-f
是FFmpeg用于指定输出格式的选项。data/image%3d.jpg
: 指定输出文件的路径和命名模式。data
是输出目录,image%3d.jpg
是输出文件名的模式。%3d
表示以三位数字序列作为文件名中的一部分,从001开始递增。
该命令行将读取test.mp4
视频文件,并以每秒25帧的帧率将其转换为一系列图像文件,保存在data
目录下,文件名以image001.jpg
、image002.jpg
等方式命名。
扩展:
在FFmpeg中,-f
参数用于指定输出文件的格式。这个参数后面可以跟随不同的参数值来选择所需的输出格式。
以下是一些常用的-f
参数值及其对应的输出格式:
image2
: 将输出设置为一系列图像文件。mp4
: 输出为MP4格式的视频文件。avi
: 输出为AVI格式的视频文件。mov
: 输出为MOV格式的视频文件。flv
: 输出为FLV格式的视频文件。matroska
: 输出为Matroska格式(MKV)的视频文件。mpeg
: 输出为MPEG格式的视频文件。gif
: 输出为GIF动画文件。wav
: 输出为WAV音频文件。mp3
: 输出为MP3音频文件。aac
: 输出为AAC音频文件。
这只是其中的一些常见示例,实际上还有许多其他支持的输出格式可以在FFmpeg中使用。你可以通过输入ffmpeg -formats
命令来查看FFmpeg支持的所有格式和编解码器
2、ffmpeg命令行 图片合并视频
ffmpeg -r 25 -f image2 -i data/image%3d.jpg -vcodec libx264 -s 1920*1080 -g 100 -keyint_min 25 -sc_threshold 0 -pix_fmt yuv420p out.mp4
这个命令使用FFmpeg工具将一系列图像文件(data/image001.jpg,data/image002.jpg,…)合并为一个视频文件(out.mp4)。
让我们逐个解释每个参数的含义:
-r 25
: 设置输出视频的帧率为25帧/秒。这意味着每秒将有25个图像帧被添加到视频中。-f image2
: 指定输入格式为image2,表示输入为一系列图像文件。-i data/image%3d.jpg
: 指定输入文件的路径和命名模式。%3d
表示以三位数字序列作为文件名中的一部分,从001开始递增。例如,data/image001.jpg
、data/image002.jpg
等。-vcodec libx264
: 设置视频编码器为libx264,用于将图像序列编码为H.264视频格式。-s 1920x1080
: 设置输出视频的分辨率为1920x1080像素。-g 100
: 设置关键帧间隔为100帧。这意味着每100帧会有一个关键帧,其他帧则通过对前一关键帧的变化进行压缩。-keyint_min 25
: 设置最小关键帧间隔为25帧。-sc_threshold 0
: 设置场景切换阈值为0。这将禁用场景切换检测。-pix_fmt yuv420p
: 设置输出视频的像素格式为YUV420P。这是一种常见的像素格式,广泛支持播放和编码。out.mp4
: 指定输出文件为out.mp4。
综上所述,该命令将以每秒25帧的帧率读取data目录下的图像文件,并使用libx264编码器将其合并为一个1920x1080分辨率的视频文件(out.mp4)。关键帧间隔为100帧,最小关键帧间隔为25帧。所有帧都被视为关键帧,且没有场景切换检测。输出视频的像素格式设置为YUV420P。
3、推拉流
- 查看摄像头列表
ffmpeg -list_devices true -f dshow -i dummy
这个命令使用FFmpeg工具来列出可用的音视频设备列表。
让我们逐个解释每个参数的含义:
-list_devices true
: 启用设备列表功能,将列出可用的音视频设备。-f dshow
: 指定输入格式为dshow,表示使用DirectShow设备作为输入。-i dummy
: 指定一个虚拟的输入设备名称为"dummy"。这里使用dummy设备只是为了触发设备列表的输出,而不是实际打开设备进行采集。
综上所述,该命令将使用FFmpeg工具以DirectShow格式尝试打开名为"dummy"的虚拟输入设备,从而触发设备列表的输出。该列表将包含系统中可用的音视频设备信息。
- 播放摄像头
ffplay -f dshow -i video="HP 5MP Camera"
这个命令使用FFplay工具来播放一个名为"FULL HD webcam"的视频设备。
让我们逐个解释每个参数的含义:
-f dshow
: 指定输入格式为dshow,表示使用DirectShow设备作为输入。-i video="FULL HD webcam"
: 指定视频输入设备名称为"FULL HD webcam"。video=
是用于指定视频设备的前缀,后面跟随设备名称。
综上所述,该命令将使用FFplay工具以DirectShow格式打开名为"FULL HD webcam"的视频设备,并开始播放该视频设备的内容。
- 查看摄像头的分辨率格式
ffmpeg -list_options true -f dshow -i video="HP 5MP Camera"
这个命令使用FFmpeg工具来列出指定视频设备的可用选项。
让我们逐个解释每个参数的含义:
-list_options true
: 启用选项列表功能,将列出指定设备的可用选项。-f dshow
: 指定输入格式为dshow,表示使用DirectShow设备作为输入。-i video="HP 5MP Camera"
: 指定视频输入设备名称为"HP 5MP Camera"。video=
是用于指定视频设备的前缀,后面跟随设备名称。
综上所述,该命令将使用FFmpeg工具以DirectShow格式尝试打开名为"HP 5MP Camera"的视频设备,并列出该设备的可用选项信息。这些选项可以包括视频分辨率、帧率、亮度、对比度等相关设置。
- 摄像头推流到RTMP服务
ffmpeg -f dshow -i video="HP 5MP Camera" -vcodec libx264 -acodec aac -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://192.168.1.9/live/desktop
这个命令使用FFmpeg工具从名为"HP 5MP Camera"的视频设备采集视频,并通过RTMP协议将其实时推流到指定的服务器地址。
让我们逐个解释每个参数的含义:
-f dshow
: 指定输入格式为dshow,表示使用DirectShow设备作为输入。-i video="HP 5MP Camera"
: 指定视频输入设备名称为"HP 5MP Camera"。video=
是用于指定视频设备的前缀,后面跟随设备名称。-vcodec libx264
: 设置视频编码器为libx264,用于对视频进行H.264编码。-acodec aac
: 设置音频编码器为AAC,用于对音频进行AAC编码。-ar 44100
: 设置音频采样率为44100 Hz。-ac 1
: 设置音频通道数为1,即单声道。-r 25
: 设置输出视频的帧率为25帧/秒。-s 1920x1080
: 设置输出视频的分辨率为1920x1080像素。-f flv
: 指定输出格式为FLV(Flash Video)。rtmp://192.168.1.9/live/desktop
: 指定目标服务器的RTMP推流地址。
综上所述,该命令将从名为"HP 5MP Camera"的视频设备采集视频和音频数据,并对其进行H.264和AAC编码。然后,它将以25帧/秒的帧率、1920x1080分辨率的格式,通过RTMP协议推流到指定的服务器地址(rtmp://192.168.1.9/live/desktop)。这样,在指定的服务器上可以接收和处理该实时视频流。
- 摄像头推流到RTSP(rtp over tcp)
ffmpeg -f dshow -i video="HP 5MP Camera" -rtsp_transport tcp -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -f rtsp rtsp://127.0.0.1:8554/webcam
这个命令使用FFmpeg工具从名为"HP 5MP Camera"的视频设备采集视频和音频,并将其通过RTSP协议进行实时传输。
让我们逐个解释每个参数的含义:
-f dshow
: 指定输入格式为dshow,表示使用DirectShow设备作为输入。-i video="HP 5MP Camera"
: 指定视频输入设备名称为"HP 5MP Camera"。video=
是用于指定视频设备的前缀,后面跟随设备名称。-rtsp_transport tcp
: 指定RTSP传输使用TCP协议。默认情况下,FFmpeg使用UDP协议进行RTSP传输,但通过指定此参数,我们可以强制使用TCP协议。-vcodec libx264
: 设置视频编码器为libx264,用于对视频进行H.264编码。-preset ultrafast
: 设置编码速度为ultrafast,以实现更快的编码速度,但可能牺牲一些压缩效率。-acodec libmp3lame
: 设置音频编码器为libmp3lame,用于对音频进行MP3编码。-ar 44100
: 设置音频采样率为44100 Hz。-ac 1
: 设置音频通道数为1,即单声道。-r 25
: 设置输出视频的帧率为25帧/秒。-f rtsp
: 指定输出格式为RTSP(Real-Time Streaming Protocol)。rtsp://127.0.0.1:8554/webcam
: 指定目标服务器的RTSP地址。
综上所述,该命令将从名为"HP 5MP Camera"的视频设备采集视频和音频数据,并使用libx264进行H.264视频编码,使用libmp3lame进行MP3音频编码。然后,它通过RTSP协议将编码后的数据以25帧/秒的帧率实时传输到指定的RTSP地址(rtsp://127.0.0.1:8554/webcam)。这样,在指定的服务器上可以接收并播放该实时视频流。
- windows桌面推流到RTMP服务
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://127.0.0.1/live/desktop
这个命令使用FFmpeg工具从桌面(屏幕)采集视频,并将其编码为H.264格式,音频编码为MP3格式,然后通过RTMP协议将其实时推流到指定的服务器地址。
让我们逐个解释每个参数的含义:
-f gdigrab
: 指定输入格式为gdigrab,用于从桌面采集视频。-i desktop
: 指定采集源为桌面。-vcodec libx264
: 设置视频编码器为libx264,用于对视频进行H.264编码。-preset ultrafast
: 设置编码速度为ultrafast,以实现更快的编码速度,但可能牺牲一些压缩效率。-acodec libmp3lame
: 设置音频编码器为libmp3lame,用于对音频进行MP3编码。-ar 44100
: 设置音频采样率为44100 Hz。-ac 1
: 设置音频通道数为1,即单声道。-r 25
: 设置输出视频的帧率为25帧/秒。-s 1920x1080
: 设置输出视频的分辨率为1920x1080像素。-f flv
: 指定输出格式为FLV(Flash Video)。rtmp://127.0.0.1/live/desktop
: 指定目标服务器的RTMP推流地址。
综上所述,该命令将从桌面采集视频数据,并使用libx264进行H.264视频编码,使用libmp3lame进行MP3音频编码。然后,它通过RTMP协议将编码后的数据以25帧/秒的帧率实时推流到指定的RTMP服务器地址(rtmp://127.0.0.1/live/desktop)。这样,在指定的服务器上可以接收并播放来自桌面的实时视频流。
- windows桌面推流到RTSP服务(rtp over udp)
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -s 1920*1080 -f rtsp rtsp://127.0.0.1:8554/live/desktop
这个命令使用FFmpeg工具从桌面(屏幕)采集视频,并将其编码为H.264格式,音频编码为MP3格式,然后通过RTSP协议将其实时传输到指定的RTSP地址。
让我们逐个解释每个参数的含义:
-f gdigrab
: 指定输入格式为gdigrab,用于从桌面采集视频。-i desktop
: 指定采集源为桌面。-vcodec libx264
: 设置视频编码器为libx264,用于对视频进行H.264编码。-preset ultrafast
: 设置编码速度为ultrafast,以实现更快的编码速度,但可能牺牲一些压缩效率。-acodec libmp3lame
: 设置音频编码器为libmp3lame,用于对音频进行MP3编码。-ar 44100
: 设置音频采样率为44100 Hz。-ac 1
: 设置音频通道数为1,即单声道。-r 25
: 设置输出视频的帧率为25帧/秒。-f rtsp
: 指定输出格式为RTSP(Real-Time Streaming Protocol)。rtsp://127.0.0.1:8554/live/desktop
: 指定目标RTSP地址。
综上所述,该命令将从桌面采集视频数据,并使用libx264进行H.264视频编码,使用libmp3lame进行MP3音频编码。然后,它通过RTSP协议将编码后的数据以25帧/秒的帧率实时传输到指定的RTSP地址(rtsp://127.0.0.1:8554/live/desktop)。这样,在指定的RTSP服务器上可以接收并播放来自桌面的实时视频流。
- RTMP推流
ffmpeg -re -i input.flv -f flv -r 25 -s 1920*1080 -an "rtmp://127.0.0.1/live/test"
这个命令使用FFmpeg工具将输入的FLV文件实时推流到指定的RTMP服务器地址。
让我们逐个解释每个参数的含义:
-re
: 将输入文件以实时模式读取。这将按照文件的原始帧率进行处理,而不是尽可能快地处理。-i input.flv
: 指定输入文件为input.flv
。你需要将此命令中的input.flv
替换为实际的输入文件路径和名称。-f flv
: 指定输出格式为FLV(Flash Video)。-r 25
: 设置输出视频的帧率为25帧/秒。-s 1920x1080
: 设置输出视频的分辨率为1920x1080像素。-an
: 禁用音频流。这将确保在推流过程中没有音频被传输。"rtmp://127.0.0.1/live/test"
: 指定目标RTMP服务器的地址和流名称。你可以根据需要修改此地址和流名称。
综上所述,该命令将以实时模式读取FLV文件,并将其作为FLV格式的视频流通过RTMP协议实时推流到指定的RTMP服务器地址。输出的视频帧率为25帧/秒,分辨率为1920x1080像素,同时禁用了音频流的传输。请确保替换input.flv
为实际的输入文件路径和名称,并根据需要修改RTMP服务器地址和流名称。
- 本地视频文件RTSP循环推流(tcp)
ffmpeg -re -stream_loop -1 -i test.mp4 -rtsp_transport tcp -vcodec h264 -acodec copy -f rtsp rtsp://127.0.0.1:8554/live/test
这是一个使用FFmpeg命令行工具将MP4视频文件通过RTSP协议进行传输的命令。下面是每个选项的解释:
-re
:以实时速度读取输入文件。-stream_loop -1
:设置输入文件循环播放,直到手动停止命令。-i test.mp4
:指定输入文件为test.mp4。-rtsp_transport tcp
:指定使用TCP传输协议进行RTSP传输。-vcodec h264
:使用H.264编码器进行视频编码。-acodec copy
:直接复制音频流,不进行重新编码。-f rtsp
:将输出格式设置为RTSP。rtsp://127.0.0.1:8554/live/test
:指定输出目标为RTSP服务器的地址和流名称。
通过执行该命令,你可以将test.mp4文件的视频流通过RTSP协议传输到本地主机上的名为"test"的RTSP流。请确保已经安装并正确配置了RTSP服务器来接收并处理该流。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!