Python ffmpeg原始视频和音频标准

Python ffmpeg原始视频和音频标准,python,audio,video,ffmpeg,Python,Audio,Video,Ffmpeg,目前,我正在使用ffmpeg从原始格式的帧开始生成在OBS中广播的视频输出 问题是我们想给它添加一个音轨,也就是说:每个帧现在都有它的像素矩阵和它的音频 我不知道如何让ffmpeg接收这种复合信号,或者最好的方法是什么。实际上我使用的是ffmpeg的标准格式。我使用以下代码生成它: url = "udp://" + udp_address + ":" + str(udp_port) command = [ '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())
向每个帧添加音频的最佳方法是什么?
感谢使用FFMPEG,您可以有多个输入,然后使用-map标志选择应该使用的输入流

例如,如果您有一个视频和一个音频片段,您可以使用如下内容:

ffmpeg -i video.mp4 -i audio.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mkv
Map可用于选择不同的输入流。在这种情况下:

  • 从第一个输入,从视频流,采取第一个(0:v:0)
  • 从第二个输入,从音频流,采取第一个(1:a:0)

要查找更多信息,请参阅:

-开发人员使用先进先出(FIFO)。Linux/macOS的简化示例:

  • 生成命名管道:

    mkfifo视频
    mkfifo音频
    
  • 输出/将视频和音频传输到标准输出。这是使用
    ffmpeg
    为命名管道生成视频和音频,仅用于演示目的

    ffmpeg-y-re-f lavfi-i testsrc2=s=1280x720:r=25-f原始视频&ffmpeg-y-re-f lavfi-i正弦=r=44100-f s16le音频
    
  • 使用命名管道作为
    ffmpeg
    的输入:

    ffmpeg-f rawvideo-video大小320x240-pixel格式yuv420p-framerate 25-i video-fs16le-sample\u rate 44100-channels 1-i audio-t10 output.mp4
    

  • 您正在寻找的解决方案可能是[如何使用dynamic frame进行此操作rate@bluejayke你是说可变帧速率(VFR)?取决于你想要ffmpeg做什么。但这是一个与原始问题完全不同的主题。如何将其与with-cat运算符一起用于动态帧持续时间