音视频八股文(3)--ffmpeg常见命令(2)
07-ffplay命令播放媒体
播放本地文件
- 播放本地 MP4 视频文件
test.mp4
的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”:
ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4
- 播放本地 MP3 音频文件
buweishui.mp3
的命令:
ffplay buweishui.mp3
播放网络流
- 播放网络 RTMP 流的命令,使用
-window_title
参数设置窗口标题为 “rtmp stream”,并指定流地址为rtmp://202.69.69.180:443/webcast/bshdlive-pc
:
ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc
强制解码器
- 使用 MPEG-4 解码器播放
test.mp4
视频文件:
ffplay -vcodec mpeg4 test.mp4
- 使用 H.264 解码器播放
test.mp4
视频文件:
ffplay -vcodec h264 test.mp4
这里主要是为了区分两个不同的解码器而使用了 -vcodec
参数,并将其值设为 mpeg4
或 h264
。
禁用音频或视频
- 禁用视频播放,只播放音频:
ffplay test.mp4 -vn
- 禁用音频播放,只播放视频:
ffplay test.mp4 -an
在这里,我们使用了 -vn
参数来禁止播放视频,只播放音频,或者使用 -an
参数来禁止播放音频,只播放视频。
播放YUV数据
- 播放 YUV 数据文件
yuv420p_320x240.yuv
,指定像素格式为yuv420p
,视频大小为 320x240,帧率为 5:
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv
播放RGB数据
- 播放 RGB 数据文件
rgb24_320x240.rgb
,指定像素格式为rgb24
,视频大小为 320x240:
ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb
- 播放 RGB 数据文件
rgb24_320x240.rgb
,指定像素格式为rgb24
,视频大小为 320x240,帧率为 5:
ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb
播放PCM数据
- 播放 PCM 数据文件
48000_2_f32le.pcm
,指定采样率为 48000 Hz,声道数为 2,格式为 32 位浮点型:
ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
-ar set audio sampling rate (in Hz) (from 0 to INT_MAX) (default 0)
-ac set number of audio channels (from 0 to INT_MAX) (default 0)
08-ffplay简单过滤器
视频旋转
- 旋转
test.mp4
视频文件,将它逆时针旋转 90 度并播放:
ffplay -i test.mp4 -vf transpose=1
视频反转
- 水平翻转
test.mp4
视频文件并播放:
ffplay test.mp4 -vf hflip
- 垂直翻转
test.mp4
视频文件并播放:
ffplay test.mp4 -vf vflip
视频旋转和反转
- 先水平翻转,再逆时针旋转 90 度播放
test.mp4
视频文件:
ffplay test.mp4 -vf hflip,transpose=1
这里我们使用了 -vf
参数,指定了两个视频滤镜,先对视频进行水平翻转,再进行逆时针旋转 90 度。
音频变速播放
- 将
test.mp4
视频文件中的音频进行变速播放,加快倍速为原来的 2 倍:
ffplay -i test.mp4 -af atempo=2
这里我们使用了 -af
参数,指定了一个音频滤镜 atempo=2
,表示将音频加快倍速为原来的 2 倍。
视频变速播放
- 将
test.mp4
视频文件进行变速播放,加快倍速为原来的 2 倍:
ffplay -i test.mp4 -vf setpts=PTS/2
这里我们使用了 -vf
参数,指定了一个视频滤镜 setpts=PTS/2
,表示将视频加快倍速为原来的 2 倍。
音视频同时变速
- 将
test.mp4
视频文件中的音频和视频同时进行变速播放,加快倍速为原来的 2 倍:
ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2
这里我们使用了 -vf
参数指定了一个视频滤镜 setpts=PTS/2
,将视频加快倍速为原来的 2 倍,同时使用了 -af
参数指定了一个音频滤镜 atempo=2
,将音频加快倍速为原来的 2 倍。
更多参考
http://www.ffmpeg.org/ffmpeg-filters.html
09-ffmpeg命令参数说明
主要参数
● -i 设定输入流
● -f 设定输出格式(format)
● -ss 开始时间
● -t 时间长度
音频参数
● -aframes 设置要输出的音频帧数
● -b:a 音频码率
● -ar 设定采样率
● -ac 设定声音的Channel数
● -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。
● -an 不处理音频
● -af 音频过滤器
ffmpeg -i test.mp4 -b:a 192k -ar 48000 -ac 2 -acodec libmp3lame -aframes 200 out2.mp3
视频参数
● -vframes 设置要输出的视频帧数
● -b 设定视频码率
● -b:v 视频码率
● -r 设定帧速率
● -s 设定画面的宽与高
● -vn 不处理视频
● -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
● -vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
● -vf 视频过滤器
- 将
test.mp4
视频文件转换为 H.265 编码格式的视频文件,并进行参数设置,输出视频文件的帧数为 300,视频码率为 300 kbps,帧率为 30 fps,分辨率为 640x480(宽高比为 16:9):
ffmpeg -i test.mp4 -vframes 300 -b:v 300k -r 30 -s 640x480 -aspect 16:9 -vcodec libx265 output.mp4
在这个命令中,我们使用 -i
参数指定了输入文件为 test.mp4
,并使用了 -vcodec
参数将输出的视频编码格式设置为 H.265。同时还使用了 -vframes
、-b:v
、-r
、-s
和 -aspect
等参数来对输出视频进行了多种设置,以确保输出文件满足我们的需求。最后,我们将输出文件命名为 output.mp4
。
10-ffmpeg命令提取音视频数据
保留封装格式
- 将
test.mp4
视频文件中的音频流提取出来,保留原始编码格式,并输出到audio.mp4
文件中:
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4
- 将
test.mp4
视频文件中的视频流提取出来,保留原始编码格式,并输出到video.mp4
文件中:
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
这里我们使用了 -acodec
参数和 -vcodec
参数分别对音频流和视频流进行了原始编码格式的复制,并将其分别输出到 audio.mp4
和 video.mp4
文件中。由于保留了原始编码格式,因此输出文件的封装格式与输入文件相同。同时,在第一个命令中使用了 -vn
参数指定只输出音频流,而在第二个命令中使用了 -an
参数指定只输出视频流。
提取视频
- 从
test.mp4
视频文件中提取视频流,并保留原始编码格式,输出为 H.264 编码格式的文件test_copy.h264
:
ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
- 从
test.mp4
视频文件中提取视频流,并将其强制转换为 H.264 编码格式,输出为文件test.h264
:
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
这里我们使用了 -vcodec
参数分别对视频流进行了编码格式的指定。在第一个命令中,我们保留了原始编码格式,并直接将视频流复制到输出文件中;而在第二个命令中,我们强制将视频流转换为 H.264 编码格式。同时,在第二个命令中还省略了音频部分,使用了 -an
参数。
提取音频
- 从
test.mp4
视频文件中提取音频流,并保留原始编码格式,输出为 AAC 编码格式的文件test.aac
:
ffmpeg -i test.mp4 -acodec copy -vn test.aac
- 从
test.mp4
视频文件中提取音频流,并将其强制转换为 MP3 编码格式,输出为文件test.mp3
:
ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3
这里我们使用了 -acodec
参数分别对音频流进行了编码格式的指定。在第一个命令中,我们保留了原始编码格式,并直接将音频流复制到输出文件中;而在第二个命令中,我们强制将音频流转换为 MP3 编码格式。同时,在第二个命令中还省略了视频部分,使用了 -vn
参数。
11 提取像素格式和PCM数据
提取像素格式
提取YUV
- 从
test_1280x720.mp4
视频文件中提取前 3 秒的视频数据,并输出为 YUV 格式文件yuv420p_orig.yuv
,分辨率与源视频相同(默认为 1280x720):
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv
- 从
test_1280x720.mp4
视频文件中提取前 3 秒的视频数据,并输出为 YUV 格式文件yuv420p_320x240.yuv
,同时将输出分辨率设置为 320x240:
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv
这里我们使用了 -t
参数指定只抽取前 3 秒的数据,使用了 -pix_fmt
参数指定了输出文件的像素格式为 yuv420p
,同时在第二个命令中使用了 -s
参数指定了输出文件的分辨率为 320x240。
提取RGB
- 从
test.mp4
视频文件中提取前 3 秒的视频数据,并输出为 RGB 格式文件rgb24_320x240.rgb
,同时将输出分辨率设置为 320x240:
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
- 将之前生成的 YUV 格式文件
yuv420p_320x240.yuv
转换成 RGB 格式文件rgb24_320x240_2.rgb
,分辨率为 320x240:
ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb
这里我们使用了 -t
参数指定只抽取前 3 秒的数据,在第一个命令中使用了 -pix_fmt
参数指定了输出文件的像素格式为 rgb24
,同时在两个命令中都使用了 -s
参数指定了输出文件的分辨率。在第二个命令中,我们将之前生成的 YUV 格式文件通过 -pix_fmt
参数转换成了 RGB 格式文件。
提取PCM数据
- 从音频文件
buweishui.mp3
中提取 PCM 格式的音频数据,采样率为 48000 Hz,声道数为 2,采样格式为 signed 16-bit little-endian,并输出为文件48000_2_s16le.pcm
:
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le -acodec pcm_s16le 48000_2_s16le.pcm
- 将音频文件
buweishui.mp3
转换为带有 signed 16-bit 采样格式的 WAV 音频文件out_s16.wav
,采样率为 48000 Hz,声道数为 2:
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
- 将音频文件
buweishui.mp3
转换为 PCM 格式的 WAV 音频文件out2_s16le.wav
,采样率为 48000 Hz,声道数为 2,采样格式为 signed 16-bit little-endian:
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
- 从音频文件
buweishui.mp3
中提取 PCM 格式的音频数据,采样率为 48000 Hz,声道数为 2,采样格式为 float 32-bit little-endian,并输出为文件48000_2_f32le.pcm
:
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f f32le -acodec pcm_f32le 48000_2_f32le.pcm
- 从视频文件
test.mp4
中提取前 10 秒的音频数据,采样率为 48000 Hz,声道数为 2,采样格式为 float 32-bit little-endian,并输出为文件48000_2_f32le_2.pcm
:
ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le -acodec pcm_f32le 48000_2_f32le_2.pcm
这里我们使用了 -ar
参数、-ac
参数和 -f
参数分别对采样率、声道数和采样格式进行了指定。同时,我们在第一、四、五条命令中使用 -acodec
参数指定输出文件的音频编解码器。在第二和第三条命令中,我们将输出文件的格式设置为 WAV,并使用 -sample_fmt
参数指定其采样格式。
12-ffmpeg命令转封装
保持编码格式
- 将视频文件
test.mp4
中的视频数据和音频数据分别以原始编码格式拷贝到输出文件test_copy.ts
中:
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
- 将视频文件
test.mp4
中的视频数据和音频数据以原始编码格式拷贝到输出文件test_copy2.ts
中:
ffmpeg -i test.mp4 -codec copy test_copy2.ts
这里我们使用了 -vcodec
参数和 -acodec
参数分别指定视频流和音频流的编码器为原始编码格式,并使用了 copy
关键字将其直接拷贝到输出文件中。在第二个命令中,我们使用 -codec
参数同时对视频流和音频流指定了原始编码格式。
改变编码格式
- 将视频文件
test.mp4
中的视频数据转换为 H.265 编码格式,音频数据转换为 MP3 格式,并将其保存为 Matroska 文件out_h265_mp3.mkv
:
ffmpeg -i test.mp4 -c:v libx265 -c:a libmp3lame out_h265_mp3.mkv
这里我们使用了 -c:v
参数和 -c:a
参数分别指定视频流和音频流的编码器为 libx265 和 libmp3lame。
修改帧率
- 将视频文件
test.mp4
中的帧率改为 15 fps,并将修改后的视频数据拷贝到输出文件output.mp4
中(注意:此命令不正确,因为-codec copy
参数会禁止重新编码视频流,但改变帧率需要重新编码视频流):
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (错误命令)
- 将视频文件
test.mp4
中的帧率改为 15 fps,并重新编码输出为视频文件output2.mp4
:
ffmpeg -i test.mp4 -r 15 output2.mp4
这里我们使用了 -r
参数指定输出视频的帧率为 15 fps。在第一个命令中,由于加入了 -codec copy
参数导致视频流没有被重新编码,因此无法对帧率进行修改。在第二个命令中,我们删除了 -codec copy
参数并在输出文件名中指定了新的文件名。由于重新编码视频流需要消耗大量的计算资源和时间,因此在使用 -r
参数时应该谨慎考虑是否有必要重新编码视频流。
修改视频码率
- 将视频文件
test.mp4
中的视频码率限制为 400kpbs,并重新编码音视频数据保存为 Matroska 文件output_b.mkv
:
ffmpeg -i test.mp4 -b:v 400k output_b.mkv (此时音频也被重新编码)
这里我们使用了 -b:v
参数指定输出视频流的比特率为 400kpbs,由于没有使用 -b:a
参数指定音频流的比特率,因此默认情况下音频流也会被重新编码。在实际应用中,可以通过设置不同的比特率来平衡视频质量和文件大小之间的关系。需要注意的是,修改视频码率会导致视频质量的损失,因此应该根据具体需求谨慎调整。
修改视频码率
- 将视频文件
test.mp4
中的视频码率限制为 400kpbs,并不重新编码音频数据,将编码后的音频数据和原始视频流混合保存为 Matroska 文件output_bv.mkv
:
ffmpeg -i test.mp4 -b:v 400k -c:a copy output_bv.mkv
这里我们使用了 -b:v
参数指定输出视频流的比特率为 400kpbs,并使用 -c:a copy
参数直接将原始音频流拷贝到输出文件中。由于没有重新编码音频流,因此无需消耗大量计算资源和时间,同时也避免了音频质量的损失。
修改音频码率
- 将视频文件
test.mp4
中的音频码率限制为 192kpbs,并重新编码音频数据,将编码后的音频数据和原始视频流混合保存为 MP4 文件output_ba.mp4
:
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
这里我们使用了 -b:a
参数指定输出音频流的比特率为 192kpbs,由于没有加入 -vcodec copy
参数禁止重新编码视频流,因此会自动重新编码音频流。需要注意的是,重新编码音频流可能会导致音频质量的损失,因此应该根据具体需求谨慎调整。
如果不想重新编码video,需要加上-vcodec copy
修改音视频码率
- 将视频文件
test.mp4
中的视频码率限制为 400kpbs,音频码率限制为 192kpbs,并分别重新编码视频数据和音频数据,将编码后的音视频数据混合保存为 MP4 文件output_bva.mp4
:
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
这里我们使用了 -b:v
参数和 -b:a
参数分别指定输出视频流和音频流的比特率,同时由于没有加入 -vcodec copy
和 -c:a copy
参数禁止直接拷贝原始数据,因此会自动重新编码音视频数据。需要注意的是,重新编码音视频数据可能会导致视频和音频质量的损失,因此应该根据具体需求谨慎调整。
修改视频分辨率
- 将视频文件
test.mp4
中的分辨率限制为 480x270,并重新编码视频数据保存为 MP4 文件output_480x270.mp4
:
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
这里我们使用了 -s
参数指定输出视频流的分辨率为 480x270,由于修改分辨率需要重新编码视频流,因此会自动重新编码视频数据。需要注意的是,重新编码视频数据可能会导致视频质量的损失,同时也会消耗大量计算资源和时间,因此应该根据具体需求谨慎调整。
修改音频采样率:
- 将视频文件
test.mp4
中的音频采样率修改为 44100Hz,并重新编码音频数据保存为 MP4 文件output_44100hz.mp4
:
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4
这里我们使用了 -ar
参数指定输出音频流的采样率为 44100Hz,由于修改采样率需要重新编码音频流,因此会自动重新编码音频数据。需要注意的是,重新编码音频数据可能会导致音频质量的损失,同时也会消耗大量计算资源和时间,因此应该根据具体需求谨慎调整。
13-ffmpeg命令过滤器
生成测试文件
找三个不同的视频每个视频截取10秒内容
ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4
ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4
ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4
如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac
将上述1.mp4/2.mp4/3.mp4转成ts格式
ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts
转成flv格式
ffmpeg -i 1.mp4 -codec copy 1.flv
ffmpeg -i 2.mp4 -codec copy 2.flv
ffmpeg -i 3.mp4 -codec copy 3.flv
开始拼接文件
以MP4格式进行拼接
方法1:ffmpeg -i “concat:1.mp4|2.mp4|3.mp4” -codec copy out_mp4.mp4
方法2:ffmpeg -f concat -i mp4list.txt-codec copy out_mp42.mp4
以TS格式进行拼接
方法1:ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out_ts.mp4
方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4
以FLV格式进行拼接
方法1:ffmpeg -i “concat:1.flv|2.flv|3.flv” -codec copy out_flv.mp4
方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4
方法1只适用部分封装格式,比如TS
建议:
(1)使用方法2进行拼接
(2)转成TS格式再进行拼接
测试不同编码拼接
修改音频编码
● ffmpeg -i 2.mp4 -vcodeccopy -acodec ac3 -vbsfh264_mp4toannexb 2.ts
● ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out1.mp4 结果第二段没有声音
修改音频采样率
● ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts
● ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out2.mp4 第二段播放异常
修改视频编码格式
ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4
修改视频分辨率
ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsfh264_mp4toannexb 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4
注意:
● 把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格式,比如MP4
● 视频分辨率可以不同,但是编码格式需要统一
● 音频编码格式需要统一,音频参数(采样率/声道等)也需要统一
14-fmpeg命令图片与视频互转
截取一张图片
ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg
ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp
参数说明:
● -i 输入
● -y 覆盖
● -f 格式 image2 一种格式
● -ss 起始值
● -vframes 帧 如果大于1 那么 输出加%03d test%03d.jpg
● -s 格式大小size
转换视频为图片(每帧一张图):
ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15frame%03d.jpg
图片转换为视频:
ffmpeg -f image2 -i frame%03d.jpg-r 25 video.mp4
从视频中生成GIF图片
ffmpeg -i test.mp4 -t 5 -r1 image1.gif
ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif
将 GIF 转化为 视频
ffmpeg -f gif -i image2.gif image2.mp4
15-ffmpeg命令视频录制
ffmpeg命令视频录制(Windows)
先安装dshow软件Screen Capturer Recorder
● 项目地址:https://sourceforge.net/projects/screencapturer/files/
● 然后查看可用设备名字:ffmpeg -list_devices true -f dshow -i dummy
[dshow @ 0509d6c0] DirectShow video devices (some may be both video and audio devices)
[dshow @ 0509d6c0] “Integrated Webcam” //笔记本摄像头
[dshow @ 0509d6c0] Alternative name “@device_pnp_\?\usb#vid_0bda&pid_5689&mi_00#6&233dd6c7&0&0000#{65e8773d-8f56-11
d0-a3b9-00a0c9223196}\global”
[dshow @ 0509d6c0] “e2eSoft VCam”
[dshow @ 0509d6c0] Alternative name “@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\e2eSoft VCam”
[dshow @ 0509d6c0] “screen-capture-recorder”
[dshow @ 0509d6c0] Alternative name “@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}{4EA6930A-2C8A-4AE6-A561-56E4
B5044439}”
[dshow @ 0509d6c0] DirectShow audio devices
[dshow @ 0509d6c0] “楹﹀厠椋?(Realtek Audio)”
[dshow @ 0509d6c0] Alternative name “@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{8B8892E5-D3E5-47EC-8B5E
-CEEBF54014E7}”
[dshow @ 0509d6c0] “virtual-audio-capturer”
[dshow @ 0509d6c0] Alternative name “@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}{8E14549B-DB61-4309-AFA1-3578
E927E935}”
dummy: Immediate exit requested
如果出现乱码的时候在命令行输入:chcp 65001
chcp 就是change code page
65001是unicode字符集 支持中文
音视频录制
录制视频(默认参数)
● 桌面:ffmpeg -f dshow -i video=“screen-capture-recorder” v-out.mp4
● 摄像头: ffmpeg -f dshow -i video=“Integrated Webcam” -y v-out2.flv (要根据自己摄像头名称)
录制声音(默认参数)
● 系统声音:ffmpeg -f dshow -i audio=“virtual-audio-capturer” a-out.aac
● 系统+麦克风声音:ffmpeg -f dshow -i audio=“麦克风 (Realtek Audio)”-f dshow -i audio=“virtual-audio-capturer” -filter_complex amix=inputs=2:duration=first:dropout_transition=2 a-out2.aac
同时录制声音和视频(默认参数)
ffmpeg -f dshow -i audio="麦克风(Realtek Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -i video="screen-capture-recorder" -y av-out.flv
查看视频录制的可选参数
查看视频录制的可选参数
ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
[dshow @ 02f0d6c0] DirectShow video device options (from video devices)
[dshow @ 02f0d6c0] Pin “Capture” (alternative pin name “1”)
[dshow @ 02f0d6c0] pixel_format=bgr0 min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=bgr0 min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=bgr24 min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=rgb555le min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=rgb555le min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=rgb8 min s=1x1 fps=0.02 max s=1920x1080 fps=30
[dshow @ 02f0d6c0] pixel_format=yuv420p min s=1x1 fps=0.02 max s=1920x1080 fps=30
查看音频录制的可选参数
ffmpeg -f dshow-list_optionstrue -i audio="virtual-audio-capturer"
[dshow @ 05a2d6c0] DirectShow audio only device options (from audio devices)
[dshow @ 05a2d6c0] Pin “Capture Virtual Audio Pin” (alternative pin name “1”)
[dshow @ 05a2d6c0] min ch=2 bits=16 rate= 48000 max ch=2 bits=16 rate= 48000
ffmpeg -f dshow -list_options true -i audio="麦克风 (Realtek Audio)"
指定参数录制音视频
ffmpeg -f dshow -i audio="麦克风(Realtek Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -fdshow -video_size1920x1080 -framerate 15 -pixel_format yuv420p -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -y av-out.flv
ffmpeg -fdshow -i audio="麦克风(Realtek Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M-r 15 -y av-out2.mp4
ffmpeg -fdshow -i audio="麦克风(Realtek Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow-framerate 15 -pixel_format yuv420p -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M-r 15 -y av-out3.mp4
桌面+摄像头+麦克风
ffmpeg -f dshow -framerate 15 -i video="screen-capture-recorder" -f dshow -framerate 10 -i video="Integrated Webcam" -filter_complex "[1]scale=iw/2:ih/2[pip];[0][pip]overlay=main_w-overlay_w-10:main_h-overlay_h-10" -f dshow -i audio="麦克风 (Realtek Audio)" -c:a aac -c:v h264_qsv -r 10 -b 3M -f flv rtmp://111.229.231.225/live/33
rtp推流
先用ffplay检测摄像头是否正常,比如:
ffplay -f dshow -i video="USB2.0 PC CAMERA"
推流:ffmpeg -f dshow -i video=“USB2.0 PC CAMERA” -vcodec libx264 -f rtp rtp://192.168.2.208:6970 > test.sdp
拉流:ffplay -protocol_whitelist “file,udp,rtp” -i test.sdp
16-ffmpeg命令直播
直播拉流
ffplay rtmp://server/live/streamName
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
对于不是rtmp的协议 -c copy要谨慎使用
可用地址现在已经找不到了
ffmpeg推流
直播推流
ffmpeg -re -i out.mp4 -c copy flvrtmp://server/live/streamName
参数:-re,表示按时间戳读取文件
参考:Nginx搭建rtmp流媒体服务器(Ubuntu 16.04)
https://www.jianshu.com/p/16741e363a77
相关文章:

音视频八股文(3)--ffmpeg常见命令(2)
07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: ffplay -window_title "test time" -ss 2 -t 10 -autoe…...

使用bert4keras出现的问题(Process finished with exit code -1073741819 (0xC0000005))
1、环境 python 3.7.12 tensorflow 1.15 keras 2.3.1 bert4keras 0.9.7 protobuf 3.19.0 numpy 1.16.5 2、出现问题 numpy版本不兼容问题所以你就直接按照我的版本就可以了(numpy 1.16.5) Process finished with exit code -1073741819 (0xC0000005) …...

python协程实战
协程简介 协程(Coroutine)又称微线程、纤程,协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…...

【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers
论文标题:VideoGPT: Video Generation using VQ-VAE and Transformers 论文代码:https://wilson1yan. github.io/videogpt/index.html. 论文链接:https://arxiv.org/abs/2104.10157 发表时间: 2021年9月 Abstract 作者提出了…...

scala之基础面向对象
scala 既是面向对象 也是函数式编程 从Java 发展而来,依赖JVM环境 一、 scala 在linux中运行 scala 模式中直接编写运行 scala文件,load执行 scala编译程序 编译 运行 scala java 二、scala 数据类型 基础数据类型 val 不可变变量 函数式编程 …...
Qt5.12实战之多线程编程概念
1.为什么要使用多线程? a. 基于线程,同时处理多个任务,软件响应更灵敏 b.充分利用CPU的多核心功能增加应用运行效率 c.多线程在同一进程间使用共享通信更加高效 d.多个线程之间进行切换比多个进程之间进行切换,线程开销更少. 2.操作系统与进程关系 a. MS-DOS系统 属于单进程…...

格式化数据恢复怎么做?超实用的3种方法在这!
案例:格式化数据怎么恢复 【我的电脑前段时间中病毒了,无奈之下我只能将其格式化,但是很多重要的文件和图片之类的也一起被删除了,有什么方法可以恢复这些格式化的数据吗?非常着急!】 格式化数据恢复&…...

【Java|golang】1105. 填充书架---动态规划
给定一个数组 books ,其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelfWidt…...
linux基础命令
linux基础命令 一、linux命令 熟悉账务linux命令对运维的好处是巨大的,只有熟悉了命令咱们在运维的操作上才能如鱼得水。 系统信息 arch #显示机器的处理器架构(1) uname -m #显示机器的处理器架构(2) uname -r #显示正在使用的内核版本 dmidecode -q …...

【三十天精通Vue 3】 第十八天 Vue 3的国际化详解
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…...

02 - 学会提问
学会提问 一、引言 1.1 GPT简介 GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的大型预训练语言模型。 凭借其强大的文本生成、理解和处理能力,GPT已在诸如自然语言处理、机器翻译、文本摘要等多个领域取得了显著的…...
Java经典的Main方法面试题
mian方法是做什么用的? main方法是Java程序的入口方法,JVM在运行的时候会首先查找main方法不用main方法如何运行一个类? 不行,没有main方法我们不能运行Java类 在Java7之前,你可以通过使用静态初始化运行Java类。但是&…...

世界大学电子电气工程TOP10,国内大学哪家强?
EE究竟是什么专业 ? 在中国,工程系中跟电相关的专业,一般都切分得非常细。有电子工程、电气工程、通信工程、信息工程、自动化、测控仪器等。但在国外,一般把这些领域都归类到 Electrical Engineering 中,也就是我们常说的EE。 …...

5.3 牛顿-科茨公式
学习目标: 理解微积分基础知识,例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开,并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…...

全注解下的SpringIoc 续2-bean的生命周期
spring中bean的生命周期 上一个小节梳理了一下Spring Boot的依赖注入的基本知识,今天来梳理一下spring中bean的生命周期。 下面,让我们一起看看bean在IOC容器中是怎么被创建和销毁的。 bean的生命周期大致分为四个部分: #mermaid-svg-GFXNEU…...
【VQ-VAE代码实战】Neural Discrete Representation Learning
【VQ-VAE代码实战】Neural Discrete Representation Learning 0、前言1、简介2、Basic IdeaLoss3、代码Load DataVector Quantizer LayerEncoder & Decoder ArchitectureTrainPlot LossView ReconstructionsView EmbeddingReference0、前言 论文地址:基于神经网络的,离散…...

gpt3.5和gpt4区别-gpt3.5和gpt4
gpt系列 GPT系列是OpenAI公司开发的一组基于人工智能深度学习技术的自然语言处理模型。GPT代表Generative Pre-trained Transformer,即预训练生成模型。目前,GPT模型已经推出了三代(GPT-1,GPT-2,GPT-3)&am…...

java获取当前系统时间
在Java中,可以使用以下几种方法获取当前系统时间: 方法1:使用java.util.Date类 java import java.util.Date; public class Main { public static void main(String[] args) { Date date new Date(); System.out.println("当前时间&…...

pbootcms自动配图出图插件
pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…...

手动测试台架搭建,让你的车载测试更轻松
目录:导读 引言 1、概述 2、主要内容 3、汽车测试台架分类 4、汽车测试台架分类 5、汽车测试台架分类台架测试输人台架硬件搭建CANoe台架搭建 6、台架测试输入? 7、需求规范是功能测试用例设计来源测试结果的判断﹔包括∶客户需求(功能规范)需求分…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...