程序员开发利器:Your Commands网站上线

程序员开发利器:Your Commands网站上线

先上链接: https://www.ycmds.cc

背景

各种命令行工具是我们IT行业日常工作离不开的,但是对于命令行工具的使用有一个痛点:文档上每一个命令行参数写的清清楚楚,但是怎么组合起来用却搞不清楚。所以为了解决这个问题每个人都应该有一个记事本,记录下来自己常用的完整命令行,每次用的时候翻出来直接用就可以。但存放到本地的记事本是非常不方便的,各种云记事本也非常不好用。所以有了一个想法,为什么不把这些命令行放到网络上,方便自己的同时也能便捷他人。

作者先收集了自己日常工作中常用的完整命令行,包括FFmpeg/Docker/Git/Tcpdump等等。此网站是开源的,非常欢迎其他大牛们把自己常用的命令行分享出来,赠人玫瑰,手留余香。

下面列举一部分:

FFmpeg

1、转推RTMP协议流

纯转推,没有编解码。

1.1、转推flv文件

shell 复制代码
ffmpeg -re -stream_loop -1 -i test.flv -c copy -f flv rtmp://localhost:1935/live/destination
参数解释
  • -re

    参数用于模拟实时读取输入流,输入数据的处理速度将与实际播放速度保持一致。

  • -stream_loop 是用来指定输入流的循环次数的选项。

    -1 作为 -stream_loop 的参数值,表示无限循环,即输入流将不断重复播放,直到手动停止或程序结束。

  • -c 是 -codec 的简写,用于指定编码器或解码器。copy 表示直接复制源流的音视频数据,不重新编解码。 也可以写成 -c:v copy -c:a copy

1.2、转推RTMP直播流

shell 复制代码
ffmpeg -i rtmp://localhost:1935/live/source -c copy -f flv rtmp://localhost:1935/live/destination

:::note

如果输入流本身就是实时流,可以不加-re参数,当输入流有GOP缓存,它将会被快递处理并转推出去,配置合适的播放策略比加-re参数能降低延迟。

:::

2、录制RTMP协议流

可以把直播流录制成flv文件:

shell 复制代码
ffmpeg -i  'rtmp://localhost:1935/live/test'  -c:v copy -c:a copy -f flv test.flv

3、转推RTSP协议流

3.1、基于TCP传输

shell 复制代码
ffmpeg -re -stream_loop -1  -i test.mp4 -c:v copy -c:a copy  -rtsp_transport tcp -f rtsp "rtsp://127.0.0.1:5544/live/test?token=123"
参数解释
  • -rtsp_transport tcp 表示基于TCP传输音视频数据,也就是Interleaved模式

3.2、基于UDP传输

shell 复制代码
 ffmpeg -re -stream_loop -1  -i test.mp4 -c:v copy  -c:a copy -f rtsp "rtsp://127.0.0.1:5544/live/test?token=123"

4、图片相关

4.1、PNG转YUV

shell 复制代码
 ffmpeg -i temp.jpg -s 1024x680 -pix_fmt yuvj420p 9.yuv
参数解释
  • -s 1024x680: 这个选项指定输出视频的尺寸为 1024x680 像素。-s 后面跟着想要的宽度和高度。

  • -pix_fmt yuvj420p: 这个选项指定输出的像素格式为 yuvj420p。

4.2、打开YUV

shell 复制代码
ffplay -f rawvideo -pixel_format yuv420p -video_size 1024x680 9.yuv

4.3、YUV转PNG

shell 复制代码
ffmpeg -y -s 1024x680 -i 9.yuv output.jpg

5、转码相关

ffmpeg转码主要涉及到:

变换编码方式:

  • H264转到H265:降码率,清晰度不变的情况下降低网络使用带宽。
  • H265转到H264:解决低端设备解不了H265的问题。

变换分辨率:

  • 降分辨率:降码率。
  • 升分辨率:官方的ffmpeg增加分辨率和码率没有很好的超分效果,需要使用第三方的SDK集成到ffmpeg中,比如英伟达的MAXINE。

降码率:

  • 恒定码率变动态码率:根据画面复杂度动态调整码率,节省网络带宽,提升用户体验。

5.1、RTMP直播流转码成720P H264

复制代码
 ffmpeg -rw_timeout 5000000 -i 'rtmp://localhost:1935/live/source' -acodec libfdk_aac -b:a 64k -ac 2 -ar 44100 -profile:a aac_he  -vcodec libx264 -b:v 2000k -level 3.1 -vprofile high -vsync 2 -strict -2 -preset medium -bf 3 -force_key_frames source  -f flv -loglevel level+info -vf "scale='720:-2'"     'rtmp://localhost:1935/live/dest'
参数解释
  • -rw_timeout 5000000 设置读写超时时间,单位是微秒,5000000为5秒。如果在这个时间内没有完成读写操作,FFmpeg 将会停止操作并报告超时错误。

  • -acodec 执行音频编码器fdk_aac,这个编码库是开源的,支持LC、HE-AAC、HE-AAC-V2三种profile级别。

  • -b:a 指定音频码率

  • -ac 指定音频通道数2

  • -ar 指定音频采样率44100

  • -profile:a 指定音频profile级别为aac_he

  • -vcodec 执行视频编码器为x264

  • -b:v 指定视频码率为1700Kbits/s

  • -level 用于约束码率、帧率和分辨率

  • -vprofile 是用来定义一组编码工具和特性的集合,以满足不同使用场景和性能需求。
  • -vsync 2 帧会连同其时间戳一起通过或丢弃,以防止 2 个帧具有相同的时间戳。

  • -preset medium 指定编码速速和压缩比,编码速度越快,压缩比越低。FFmpeg doc

  • -bf 3 指定B帧数目为3个,通常是两个P帧之间编码3个B帧。

  • -force_key_frames source 关键帧编码跟随源流,如果当前帧在源流中为关键帧,则编码输出关键帧,如果源流中的当前帧必须被丢弃,则下一帧输出关键帧。

  • -flv 指定封装格式为flv

  • -loglevel level+info 添加日志级别前缀、指定日志级别为info。

  • -vf "scale='720:-2'" 视频过滤器参数,scale 是用于缩放视频的过滤器,'720:-2' 指定了输出视频的宽度和高度:720 表示输出视频的宽度将被设置为 720 像素,-2 表示高度将自动计算,以保持原始视频的宽高比。

5.2、RTMP直播流转码成720P H265

shell 复制代码
 ffmpeg -rw_timeout 5000000 -i "rtmp://localhost:1935/live/source" -vcodec libx265 -b:v 2000k -acodec libfdk_aac -b:a 64k -ac 2 -ar 44100 -profile:a aac_he -preset veryfast -bf 3 -force_key_frames source -f flv -loglevel level+info -vf scale='720:-2' "rtmp://localhost:1935/live/dest"

Docker

1、基本命令

1.1、拉取docker镜像

shell 复制代码
docker pull docker.io/library/centos:7.9.2009

1.2、运行docker

shell 复制代码
docker run -it  docker.io/library/centos:7.9.2009 /bin/bash 
参数解释
  • -it 分配伪终端并保持标准输入打开,适合交互式操作。
  • /bin/bash 容器启动后运行的命令,这里是打开一个 Bash 终端。

1.3、查看所有docker实例

shell 复制代码
docker ps -a
参数解释
  • -a 列出所有容器,包括停止的,如果不加-a,则只显示正在运行的

1.4、进入docker内部

shell 复制代码
docker  exec -it <container ID or name> /bin/bash

1.5、查看所有镜像

shell 复制代码
docker images

1.6、清理docker镜像

1.6.1、删除未使用的镜像
shell 复制代码
docker image prune
1.6.2、强制删除未使用的镜像
shell 复制代码
docker image prune -a

这将删除所有未被容器使用的镜像,包括悬挂的镜像。

1.6.3、删除特定镜像
shell 复制代码
docker rmi <image_id_or_name>
1.6.4、导出容器到文件
shell 复制代码
docker export <container_id>  -o  image.tar
1.6.5、导出镜像到文件
shell 复制代码
docker save -o image.tar <repository_name>:<tag> or <image_id>
1.6.5、从文件加载成docker镜像
shell 复制代码
cat image.tar | docker import - <repository_name>:<tag>

其中,<repository_name>是你要上传到的镜像仓库名称,<tag>是镜像的标签。

2、高阶命令

2.1、拉取并运行镜像

shell 复制代码
docker run --cap-add=SYS_PTRACE -d -it --net=bridge --name centos7 --privileged=true -w /youcmds/workspace -e "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/" -e "LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/lib64:/lib" -p 1935-2935:1935-2935 -v /Users/yourcmds/workspace:/youcmds/workspace docker.io/library/centos:7.9.2009 /bin/bash 
参数解释
  • --cap-add 参数可以用于向 Docker 容器添加不同的权限,包括:

    NET_ADMIN: 允许容器拥有网络管理的能力。这意味着容器可以进行网络配置,比如更改接口的配置、添加或删除路由等。它赋予了容器更大的网络控制权限,适用于需要管理网络设置的应用场景。

    SYS_ADMIN:添加系统管理员权限,允许容器内的进程执行系统级别的管理操作,如挂载文件系统、设置时间、修改主机名等。

    SYS_PTRACE:添加系统追踪权限,允许容器内的进程使用 ptrace 系统调用,用于调试和监视其他进程。

    SYS_CHROOT:添加切换根目录权限,允许容器内的进程使用 chroot 系统调用,在指定的目录下创建一个新的根文件系统环境。

    SYS_MODULE:添加模块加载/卸载权限,允许容器内的进程加载和卸载内核模块。

    SYS_RAWIO:添加原始 I/O 权限,允许容器内的进程进行对设备的原始读写操作,绕过操作系统提供的文件系统抽象。

    SYS_TIME:添加时间管理权限,允许容器内的进程修改系统时间。

  • --net 设置docker的网络模式,常用的网络模式包括:

    bridge(桥接模式):默认模式,Docker 会创建一个虚拟网桥,容器通过这个桥接连接到主机的网络。适用于大多数常见场景。

    host(主机模式):容器直接使用主机的网络堆栈,适合对网络性能要求较高的应用,但会失去容器间的网络隔离。

    none(无网络模式):不连接任何网络,适合需要完全隔离的场景。

    container(容器模式):使新容器与另一个已存在的容器共享网络栈。这意味着它们共享同一个 IP 地址和端口。

    overlay(覆盖网络模式):用于跨多个 Docker 主机的集群环境(如 Docker Swarm 或 Kubernetes),允许容器在不同主机间通信。

  • -d:以后台模式运行容器。

  • --name centos7:为容器指定一个名称(centos7)。

  • -w /youcmds/workspace:设置容器的工作目录。

  • -e 设置环境变量。

  • -p 1935-2935:1935-2935:将主机的 1935-2935 端口映射到容器的同一端口范围。

  • -v /Users/yourcmds/workspace:/youcmds/workspace:将主机目录挂载到容器内的指定路径,实现文件共享。

  • docker.io/library/centos:7.9.2009:拉取镜像地址。

GIT

1、基本命令

1.1、查询远程仓库

用于显示当前仓库的所有远程仓库及其对应的 URL:

shell 复制代码
git remote -v

1.2、更新提交账户信息

shell 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

如果只想更新当前项目

shell 复制代码
git config user.name "你的名字"
git config user.email "你的邮箱@example.com"

1.3、修改远程仓库地址

shell 复制代码
git remote set-url origin <new-url>
相关推荐
kobe_OKOK_1 小时前
S7 adapter Docker run
运维·docker·容器
一个欠登儿程序员1 小时前
在国产服务器上通过 Docker 部署 Windows 虚拟机
服务器·windows·docker
星渊澈1 小时前
从github上git clone 比较慢,如何解决。。
git·github
紫金修道1 小时前
【编解码】RK3588 平台基于 FFmpeg RKMPP 硬解的多路 RTSP 抓帧插件实战
ffmpeg·rkmpp
Hadoop_Liang2 小时前
构建Spring Boot项目Docker镜像
spring boot·后端·docker
魔都吴所谓3 小时前
【Ubuntu】离线环境下Git LFS(deb包)安装与验证完整教程
linux·git·ubuntu
Learn-Python3 小时前
修改docker容器内文件后让其生效
运维·docker·容器
REDcker4 小时前
Git worktree:多工作区并行开发与实践
git·worktree
lifewange4 小时前
Git版本管理
大数据·git·elasticsearch
尘世壹俗人4 小时前
idea提交git版本由于中文文件名卡死不动
java·git·intellij-idea