流媒体 - 02 常用命令(gst+ffmpeg+v4l2)

常用命令

  • gstreamer
    • 数据采集
    • 数据输出
    • 数据处理
  • ffmpeg
    • 查看信息
    • 分离视频音频流
    • 视频格式转换
    • 图像处理
    • ffplay
    • ffprobe
    • mplayer
  • V4L2
    • 查看信息
  • UVC
    • 查看信息
  • YUV 测试文件下载

gstreamer

数据采集

  1. 采集USB摄像头
    gst-launch-1.0 -v v4l2src device=/dev/video0 ! autovideoconvert ! video/x-raw, format=I420, width=1280, height=720 ! glimagesink
  2. 采集 rtsp 流
    gst-launch-1.0 rtspsrc location=rtsp://192.168.1.217/main-live ! rtph264depay ! h264parse ! video/x-h264 ! avdec_h264 ! xvimagesink
  3. 采集视频文件
    gst-launch-1.0 uridecodebin uri=file:///home/cup.mp4 ! videoconvert ! autovideosink
  4. tcp 接收数据
    gst-launch-1.0 tcpserversrc host=192.168.1.228 port=12345 ! gdpdepay ! glimagesink
  5. udp 接收数据 (未压缩数据udp包 > 65507,会失败 )
    gst-launch-1.0 udpsrc port=5200 ! application/x-rtp, encoding-name=H264, payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! glimagesink
  6. 采集测试数据
    gst-launch-1.0 videotestsrc pattern=“snow” ! video/x-raw, format=NV12, width=1280, height=720 ! glimagesink
  7. 采集音频
    gst-launch-1.0 alsasrc device=hw:0,1 ! audio/x-raw, rate=16000, channels=2, layout=interleaved, format=S16LE ! audioconvert ! alawenc ! fakesink sync=false enable-last-sample=false

数据输出

  1. tcp 发送USB摄像头数据
    gst-launch-1.0 -v v4l2src device=/dev/video0 ! autovideoconvert ! video/x-raw, format=I420, width=1280, height=720 ! gdppay ! tcpclientsink host=192.168.1.228 port=12345
  2. tcp 发送rtsp数据
    gst-launch-1.0 rtspsrc location=rtsp://192.168.1.217/main-live ! rtph264depay ! h264parse ! video/x-h264 ! avdec_h264 ! gdppay ! tcpclientsink host=192.168.1.228 port=12345
  3. tcp 发送测试数据
    gst-launch-1.0 videotestsrc ! video/x-raw, format=I420, width=1280, height=720 ! gdppay ! tcpclientsink host=192.168.1.228 port=12345
    注:❤️ 不加gdppay和gdpdepay会失败,Payloads GStreamer Data Protocol buffers
  4. udp 发送rtsp数据
    gst-launch-1.0 rtspsrc location=rtsp://192.168.1.217/main-live ! udpsink port=5200
  5. udp 发送测试数据
    gst-launch-1.0 videotestsrc ! x264enc ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink port=5200

数据处理

  1. 多路拼接
    gst-launch-1.0 videotestsrc ! video/x-raw,format=AYUV,framerate=(fraction)10/1,width=200,height=200 ! videobox border-alpha=0 top=-0 bottom=-200 right=-200 ! videomixer name=mix sink_0::alpha=0.9 sink_1::alpha=0.9 sink_2::alpha=0.9 sink_3::alpha=0.9 ! queue leaky=downstream ! videoconvert n-threads=2 ! xvimagesink videotestsrc ! video/x-raw,format=AYUV,framerate=(fraction)10/1,width=200,height=200 ! videobox border-alpha=0 top=-200 bottom=-0 right=-200 ! mix.
  1. 画中画指定位置
    gst-launch-1.0 -v videotestsrc name=src1 videotestsrc name=src2 videomixer name=mix sink_0::xpos=0 sink_0::ypos=0 sink_1::xpos=640 sink_1::ypos=360 ! autovideosink src1. ! queue ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! mix.sink_0 src2. ! queue ! videoscale ! video/x-raw,width=640,height=360 ! videoconvert n-threads= 4 ! mix.sink_1
  2. 画中画默认位置
    gst-launch-1.0 -e videotestsrc ! video/x-raw,format=NV12,framerate=10/1, width=200, height=150 ! videomixer name=mix ! autovideoconvert ! xvimagesink videotestsrc ! video/x-raw, format=NV12, framerate=10/1, width=640, height=360 ! mix.
  1. 文字叠加
    gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! textoverlay text=“好的” ! autovideosink
  1. 格式过滤
    gst-launch-1.0 -e videotestsrc pattern=“snow” ! capsfilter caps=“video/x-raw,width=1024,height=768,format=RGB” ! glimagesink
  1. 图像 resize
    gst-launch-1.0 -e videotestsrc pattern=“snow” ! capsfilter caps=“video/x-raw,width=1024,height=768,format=RGB” ! videoscale ! video/x-raw,width=640,height=360 ! glimagesink
  1. 分离视频文件的音视频播放
    gst-launch-1.0 -v uridecodebin uri=file:///视频/cup.mp4 name=decoder ! videoconvert ! autovideosink decoder. ! audioconvert ! autoaudiosink
  1. tcp 接收音视频保存文件
    (1)保存avi:gst-launch-1.0 tcpserversrc host=10.18.9.254 port=12345 ! gdpdepay ! videoconvert ! jpegenc ! avimux name=mux ! filesink location=“test.avi” tcpserversrc host=10.18.9.254 port=12346 ! gdpdepay ! audioconvert ! avenc_aac ! aacparse ! mux.
    (2)保存mkv:gst-launch-1.0 matroskamux name=smux ! filesink location=“video.mkv” tcpserversrc host=10.18.9.254 port=12345 ! gdpdepay ! videoconvert ! jpegenc ! smux.video_0 tcpserversrc host=10.18.9.254 port=12346 ! gdpdepay ! audioconvert ! avenc_aac ! aacparse ! smux.audio_0
    (3)发送:gst-launch-1.0 uridecodebin uri=file:///视频/Megamind.avi name=decoder ! videoconvert ! gdppay ! tcpclientsink host=10.18.9.254 port=12345 decoder. ! audioconvert ! gdppay ! tcpclientsink host=10.18.9.254 port=12346

ffmpeg

查看信息

  1. 查看本地的视频信息
    ffmpeg -i file.avi

分离视频音频流

  1. 分离视频流
    ffmpeg -i input_file -vcodec copy -an output_file_video
  2. 分离音频流
    ffmpeg -i input_file -acodec copy -vn output_file_audio

视频格式转换

  1. ts 转 mp4
    ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 output.mp4
  2. h264 转 ts
    ffmpeg -i test.h264 -vcodec copy -f mpegts output.ts
  3. h264 转 mp4
    ffmpeg -i test.h264 -vcodec copy -f mp4 output.mp4
  4. mp4 转 flv
    ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv output.flv
  5. flv 转 mp4
    ffmpeg -i test.flv -b:v 640k output.mp4
  6. mkv 转 avi
    ffmpeg -i test.mkv -vcodec copy -acodec copy output.avi
  7. mkv 转 mp4
    ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

图像处理

  1. 截取指定时间的缩略图
    (1) ffmpeg –i test.mp4 -y -f image2 -ss 8 -t 0.001 -s 350x240 testImage.jpg
    (2) ffmpeg -s 640x480 -pix_fmt nv21 -i nv21_118.yuv -f image2 -pix_fmt bgr24 1.jpg
  2. 添加图片水印
    ffmpeg -i input.mp4 -i logo.png -filter_complex overlay test1.mp4
  3. 添加GIF
    ffmpeg -y -i test2.mp4 -ignore_loop 0 -i test.gif -filter_complex overlay=0:H-h test_out2.mp4
  4. 添加文字水印
    ffmpeg -i input.flv -vf “drawtext=fontfile=simhei.ttf: text=‘test’:x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2” drawtext.mp4
  5. 旋转90°
    ffmpeg -i test.mp4 -vf “transpose=0” out.mp4
    注释:0, 逆时针旋转90°再水平翻转; 1, 顺时针90°; 2, 逆时针90°; 3, 顺时针90°再水平翻转;
  6. 水平翻转
    ffmpeg -i test.mp4 -vf hflip out.mp4
  7. 垂直翻转
    ffmpeg -i test.mp4 -vf vflip out.mp4
  8. 提取图片
    ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg
  9. 截取指定时间的视频
    (1) ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4
    注释:-r,频率;-ss,开始时间;-t,持续时间;
    (2) ffmpeg -i ./plutopr.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 ./cutout1.mp4 -y
  10. 视频倒放,音频不变
    ffmpeg -i inputfile.mp4 -vf reverse reversed.mp4//视频倒放,音频不变
  11. 视频加速
    ffmpeg -i inputfile.mp4 -vf setpts=PTS/2 -af atempo=2 output.mp4
    备注:帧速率变为2倍,调整倍速范围【0.25,4】
  12. 视频减速
    ffmpeg -i input.mkv -an -filter:v “setpts=0.5*PTS” output.mkv
  13. 视频拼接 mpeg
    (1) ffmpeg -i 1.mp4 -qscale 4 1.mpg
    (2) ffmpeg -i 2.mp4 -qscale 4 2.mpg
    (3) cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 6 -vcodec mpeg4 output.mp4
    注释:mpeg是支持简单拼接的,所以 mp4 --> mpeg --> mp4.
  14. 视频拼接 ts
    (1) ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
    (2) ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
    (3) ffmpeg -i “concat:1.ts|2.ts” -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
    注释: ts流可以 concate,所以 mp4 --> ts --> concate ts --> mp4.
  15. 视频合并
    ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4
    (1)hstack/vstack 代表水平和垂直方向
    (2)xstack 用户自己排版
    备注:视频output.mp4只会保留input1的音频
  16. 把mp3文件合并到mp4
    ffmpeg -i output.mp4 -i audio3.mp3 -c:v copy -c:a aac -strict experimental success.mp4
  17. 其它参数用法: ffmpeg 官网参数简介

ffplay

  1. 播放yuv视频
    ffplay -pixel_format yuv420p -video_size 720x480 -framerate 25 yuv420p_test.yuv
    ffplay -f rawvideo -pixel_format nv12 -s 3840*2160 test-4k-night-1.nv12
    注释:rgb24,nv21等格式
  2. 播放rgb视频
    ffplay -i nv21_118.rgb -pix_fmt rgb24 -s 640x480
  3. 循环播放
    ffplay pm.mp4 -loop 10

ffprobe

  1. 主要用于检测多媒体信息(时长、分辨率、帧率、音频采样率、声道数等)
  2. ffprobe -i input.mp4 -show_streams -show_format -print_format json
    (1)print_format支持:json和xml

mplayer

  1. 播放yuv视频
    mplayer -demuxer rawvideo -rawvideo w=1280:h=720 v4l2.yuv

V4L2

查看信息

  1. 查看设备信息
    v4l2-ctl -d /dev/video2 --all

UVC

查看信息

  1. 打开视频并配置图像参数
    guvcview -d /dev/video2

YUV 测试文件下载

  1. http://trace.eas.asu.edu/yuv/
  2. http://media.xiph.org/video/derf/

你可能感兴趣的:(流媒体,linux,gstreamer,ubuntu)