0

0

通过ffmpeg子进程进行视频数据IO

心靈之曲

心靈之曲

发布时间:2024-12-19 09:58:50

|

923人浏览过

|

来源于php中文网

原创

在求职过程中,我需要完成一个处理视频数据的原型项目,这其中涉及到使用ffmpeg进行视频预处理,并将多个视频文件连接在一起播放。由于缺乏经验,我借助生成式ai聊天机器人(google gemini)的帮助完成了这个挑战。

通过ffmpeg子进程进行视频数据IO

项目目标是串联播放多个视频。我采用了最直接的方法——将视频文件连接起来。为此,首先需要将视频文件重新编码成合适的格式。在与Gemini的讨论中,它建议使用MPEG-TS格式。

MPEG传输流(MPEG-TS)通过封装分组基本流工作,这些流包括音频、视频和PSIP数据,被打包成小段。每个流被分割成188字节的部分并交织在一起。这种方式确保了更短的延迟和更高的容错能力,使其成为理想的视频会议格式,尤其是在大帧可能导致音频延迟的情况下。 引自https://castr.com/blog/mpeg-transport-stream-mpeg-ts/

经过重新编码后,视频数据将被送入队列,供后续模块处理。确定输入(视频文件链接列表)和输出(重新编码的视频数据)后,我需要找到合适的FFmpeg命令。由于FFmpeg功能复杂,我利用Gemini的帮助,快速得到了正确的命令:

ffmpeg -hwaccel cuda -i pipe:0 -c:v h264_nvenc -b:v 1.5m -c:a aac -b:a 128k -f mpegts -y pipe:1

通过ffmpeg子进程进行视频数据IOGemini对FFmpeg命令的解释

该命令通过标准输入(stdin)接收视频数据,并将重新编码后的视频数据输出到标准输出(stdout)。

恒浪威购商城
恒浪威购商城

基于asp.net2.0框架技术与企业级分布式框架以及与 ms sql server 2000数据库无缝集合而成,并且融合当前流行的ajax技术进行编写的电子商务系统,她整合了多用户商城、单用户商城功能和恒浪网站整合管理系统,吸收绝大部分同类产品的精华和优点,独创网络团购(b2t)电子商务模式,流程化的团购功能和视频导购等功能,是一款极具商业价值的电子商务系统。商城前台功能概述:商城会员可前台自行

下载

为了实现异步读取和写入,我使用了httpx库和asyncio。代码如下:

import httpx
import asyncio
import subprocess
from functools import partial
from queue import Queue

# ... (日志记录设置) ...

client = httpx.AsyncClient()

async def write_input(client, video_link, process):
    assert isinstance(process.stdin, asyncio.StreamWriter)
    async with client.stream("GET", video_link) as response:
        logger.info("data: streaming video to queue", link=video_link)
        async for chunk in response.aiter_raw(1024):
            process.stdin.write(chunk)
            await process.stdin.drain()
        if process.stdin.can_write_eof():
            process.stdin.write_eof()
        process.stdin.close()
        await process.stdin.wait_closed()
    logger.info("data: done downloading video to ffmpeg")

async def video_send(queue, client, video_link):
    logger.info("data: fetching video from link", link=video_link)
    process = await asyncio.create_subprocess_exec(
        "ffmpeg",
        "-hwaccel",
        "cuda",
        "-i",
        "pipe:0",
        "-c:v",
        "h264_nvenc",
        "-b:v",
        "1.5m",
        "-c:a",
        "aac",
        "-b:a",
        "128k",
        "-f",
        "mpegts",
        "-y",
        "pipe:1",
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
    )
    asyncio.create_task(write_input(client, video_link, process))
    assert isinstance(process.stdout, asyncio.StreamReader)
    while True:
        chunk = await process.stdout.read(1024)
        if not chunk:
            break
        else:
            await asyncio.to_thread(partial(queue.put, chunk))
    await process.wait()
    logger.info("DATA: Done sending video to queue")

# ... (主函数调用video_send) ...

代码实现了异步地从网络下载视频并将其发送到FFmpeg进行处理,然后将处理后的数据放入队列。整个过程充分利用了asyncio的异步特性,避免了因等待下载而造成的延迟。

这个项目花了我一个晚上才完成,期间不断查阅文档并寻求Gemini的帮助。 希望本文对您有所帮助。

相关专题

更多
http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2057

2024.08.16

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

31

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

119

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

180

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

16

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

70

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

64

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 18.4万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号