python - ffmpeg 原始视频和音频标准输入
问题描述
目前,我正在使用 ffmpeg 从原始格式的帧开始生成在 OBS 中广播的视频输出。
问题是我们想给它添加一个音轨,也就是说:每一帧现在都有它的像素矩阵和它的音频。
我不确切知道如何让 ffmpeg 采用这种复合信号或最好的方法是什么。实际上我使用的是ffmpeg的标准输入。我使用此代码生成它:
url = "udp://" + udp_address + ":" + str(udp_port)
command = [
'ffmpeg',
'-loglevel',
'error',
'-re',
'-y',
# Input
'-i', '-',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', str(size[0]) + 'x' + str(size[1]),
# Output
'-b:v', '16M',
'-maxrate', '16M',
'-bufsize', '16M',
'-pix_fmt', 'bgr24',
'-f', 'mpegts', url
]
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
proc.stdin.write(frame.tobytes())
将音频添加到每个帧的最佳方法是什么?谢谢
解决方案
使用命名管道(FIFO)。Linux/macOS 的简化示例:
制作命名管道:
mkfifo video mkfifo audio
输出/管道视频和音频到标准输出。这
ffmpeg
用于为命名管道生成视频和音频,仅用于演示目的。ffmpeg -y -re -f lavfi -i testsrc2=s=1280x720:r=25 -f rawvideo video & ffmpeg -y -re -f lavfi -i sine=r=44100 -f s16le audio
使用命名管道作为输入
ffmpeg
:ffmpeg -f rawvideo -video_size 320x240 -pixel_format yuv420p -framerate 25 -i video -f s16le -sample_rate 44100 -channels 1 -i audio -t 10 output.mp4
推荐阅读
- java - 获取反应流的排列
- sql-server - TFS 构建:System.IO.FileNotFoundException:找不到文件
- r - 如何复制问题的嵌套 JSON 列表?
- reactjs - dockerized React 应用程序中的 VSCode + Typescript
- c# - 将项目添加到 ICollection 的任何对象
使用反射 - c - 使用位运算符确定 Int 是否适合 C 中的 Short
- angular - 每当 app-routes.module.ts 中出现路由路径和组件声明时,就会出现 Angular7 空白页面
- c - 文件描述符的用途是什么?
- postgresql - 如何加快 Postgres 查询,我想在其中查询日期范围内的所有条目
- javascript - JavaScript 四舍五入不带小数