程序员开发利器:Your Commands网站上线
程序员开发利器:Your Commands网站上线
先上链接: https://www.ycmds.cc
背景
各种命令行工具是我们IT行业日常工作离不开的,但是对于命令行工具的使用有一个痛点:文档上每一个命令行参数写的清清楚楚,但是怎么组合起来用却搞不清楚。所以为了解决这个问题每个人都应该有一个记事本,记录下来自己常用的完整命令行,每次用的时候翻出来直接用就可以。但存放到本地的记事本是非常不方便的,各种云记事本也非常不好用。所以有了一个想法,为什么不把这些命令行放到网络上,方便自己的同时也能便捷他人。
作者先收集了自己日常工作中常用的完整命令行,包括FFmpeg/Docker/Git/Tcpdump等等。此网站是开源的,非常欢迎其他大牛们把自己常用的命令行分享出来,赠人玫瑰,手留余香。
下面列举一部分:
FFmpeg
1、转推RTMP协议流
纯转推,没有编解码。
1.1、转推flv文件
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直播流
ffmpeg -i rtmp://localhost:1935/live/source -c copy -f flv rtmp://localhost:1935/live/destination
:::note
如果输入流本身就是实时流,可以不加-re参数,当输入流有GOP缓存,它将会被快递处理并转推出去,配置合适的播放策略比加-re参数能降低延迟。
:::
2、录制RTMP协议流
可以把直播流录制成flv文件:
ffmpeg -i 'rtmp://localhost:1935/live/test' -c:v copy -c:a copy -f flv test.flv
3、转推RTSP协议流
3.1、基于TCP传输
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传输
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
ffmpeg -i temp.jpg -s 1024x680 -pix_fmt yuvj420p 9.yuv
参数解释
-s 1024x680: 这个选项指定输出视频的尺寸为 1024x680 像素。-s 后面跟着想要的宽度和高度。
-pix_fmt yuvj420p: 这个选项指定输出的像素格式为 yuvj420p。
4.2、打开YUV
ffplay -f rawvideo -pixel_format yuv420p -video_size 1024x680 9.yuv
4.3、YUV转PNG
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
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镜像
docker pull docker.io/library/centos:7.9.2009
1.2、运行docker
docker run -it docker.io/library/centos:7.9.2009 /bin/bash
参数解释
- -it 分配伪终端并保持标准输入打开,适合交互式操作。
- /bin/bash 容器启动后运行的命令,这里是打开一个 Bash 终端。
1.3、查看所有docker实例
docker ps -a
参数解释
- -a 列出所有容器,包括停止的,如果不加-a,则只显示正在运行的
1.4、进入docker内部
docker exec -it <container ID or name> /bin/bash
1.5、查看所有镜像
docker images
1.6、清理docker镜像
1.6.1、删除未使用的镜像
docker image prune
1.6.2、强制删除未使用的镜像
docker image prune -a
这将删除所有未被容器使用的镜像,包括悬挂的镜像。
1.6.3、删除特定镜像
docker rmi <image_id_or_name>
1.6.4、导出容器到文件
docker export <container_id> -o image.tar
1.6.5、导出镜像到文件
docker save -o image.tar <repository_name>:<tag> or <image_id>
1.6.5、从文件加载成docker镜像
cat image.tar | docker import - <repository_name>:<tag>
其中,<repository_name>是你要上传到的镜像仓库名称,<tag>是镜像的标签。
2、高阶命令
2.1、拉取并运行镜像
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:
git remote -v
1.2、更新提交账户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
如果只想更新当前项目
git config user.name "你的名字"
git config user.email "你的邮箱@example.com"
1.3、修改远程仓库地址
git remote set-url origin <new-url>
程序员开发利器:Your Commands网站上线的更多相关文章
- 程序员编程利器:20款最好的免费的IDEs和编辑器
程序员编程利器:20款最好的免费的IDEs和编辑器 还没转眼明年可就大年三十了,忙的可真是晕头转了个向,看着亲朋好友们那让人欣羡的小肚腩,不禁感慨,岁月是一把猪饲料,绿了芭蕉,肥了那杨柳小蛮腰,可怜我 ...
- Web程序员开发App系列 - 开发我的第一个App,源码下载
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 申请苹果开发者账号
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- 程序猿尤其是.NET程序员所需要注意的网站资源
我觉得一个程序员 需要 对 技术 和 行业 两方面同时具有极大热情和注意力才能让自己在一个新的台阶. 有些程序员就是对技术有着极大的热情但是行业完全不注意,这样我感觉只能成为一个专家,并不能让自己真正 ...
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 认识HBuilder
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- .NET程序员所需要注意的网站资源
一个程序员 需要 对 技术 和 行业 两方面同时具有极大热情和注意力才能让自己在一个新的台阶. 有些程序员是对技术有着极大的热情但是行业完全不注意,这样我感觉只能成为一个专家,并不能让自己真正的质变, ...
- 程序员/开发人员的真实生活 (Gif 多图)
往工作环境上传东西的时候: 没保存,就关了 IDE 的时候: 凌晨三点调代码的时候: 正则表达式返回了了预期结果的时候: 当老板告诉我,我那一直负责的模块失效了的时候: 刚修复了Bug,我给老板演示的 ...
- 这是那些大佬程序员常用的学习java网站,这就是别人薪资上万的原因
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们.主要有:电子书搜索.实用工具.在线视频 ...
- 身为java程序员你需要知道的网站(包含书籍,面试题,架构...)
推荐几本书<高级java程序员值得拥有的10本书>, 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 Web ...
随机推荐
- 【转载】SLAM领域的优秀作者与实验室汇总
原地址: https://blog.csdn.net/m0_37874102/article/details/114365837 总结一些之前看过的SLAM(VO,VIO,建图)文献所发表的实验室和作 ...
- 关于python的GIL的解除——PEP 703 – Making the Global Interpreter Lock Optional in CPython
PEP地址: https://peps.python.org/pep-0703/ PEP 703 – Making the Global Interpreter Lock Optional in CP ...
- 花样玩转“所见即所得”的可视化开发UI
随着技术的发展,用户对软件的界面美观度和交互体验的要求越来越高.在这样的背景下,可视化开发UI(User Interface)成为了提升用户体验和开发效率的重要工具. 通过图形界面来设计和构建用户界面 ...
- LVGL line组件
目录 一.Line(线条)的概念 二.线条组件的使用 1.创建线条对象 2.设置点数组 3.确定y轴的方向(可选) 4.设置线条风格(可选) 4.1创建风格 4.2设置风格 5.将创建好的线段组件添加 ...
- 实习记录day03:尝试写一个接口
前言:今天突然意识到,实习记录很少有技术性的东西,更多的是自己的心里活动和一些感想,其实这类博客更趋向于日记而非技术记录.也许哪天不再充满兴趣了,这个实习记录也就结束了(想下班了同志们) 实习第三天: ...
- Windows 查看当前登录用户名
使用 PowerShell 输入 whoami,PowerShell 将以 hostname\username 的方式输出主机名和用户名: $ whoami hostname\username 使用 ...
- MacTeX 使用
MacTeX 是一个 TeX Live 的 macOS 定制版本.它包括: TeX Live GUI 应用程序 Ghostscript 关于 MacTeX 的介绍可以查看 MacTex 主页 安装 b ...
- 解密Prompt系列37. RAG之前置决策何时联网的多种策略
之前我们分别讨论过RAG中的召回多样性,召回信息质量和密度,还有calibration的后处理型RAG.前置判断模型回答是否要走RAG的部分我们之前只提及了自我矛盾和自我拒绝者两个方案.这一章我们再补 ...
- Java 多个String(字符串)判断是否null(空值)
Java 多个String(字符串)判断是否null(空值) 示例: String s = null; if (str1 != null) { s = str1; } else if (str2 != ...
- 使用 nuxi prepare 命令准备 Nuxt 项目
title: 使用 nuxi prepare 命令准备 Nuxt 项目 date: 2024/9/7 updated: 2024/9/7 author: cmdragon excerpt: 摘要:本文 ...