FFmpeg:几个音频文件和一个短视频的循环流

FFmpeg:几个音频文件和一个短视频的循环流

我在网站上的另一个问题主题中看到了一个用于传输多个音频文件的代码。但是,我对此有些怀疑,因为在我的情况下,没有声音,我真的很想得到您的帮助来解决这个问题。代码如下:

#! /bin/bash
    
VBR="1500k"
FPS="24"
QUAL="superfast"

YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"
YOUTUBE_KEY="****"
VIDEO_SOURCE="/home/ubuntu/BG Fundo 01 480p.mp4"
AUDIO_ENCODER="aac"
        
ffmpeg \
-stream_loop -1 \
-re \
-i "$VIDEO_SOURCE" \
-thread_queue_size 512 \
-stream_loop -1 \
-re \
-f concat -i audiofiles.txt \
-c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR -bufsize 3000k -maxrate $VBR \
-c:a $AUDIO_ENCODER -ar 44100 -b:a 128k -pix_fmt yuv420p \
-f flv $YOUTUBE_URL/$YOUTUBE_KEY

这里我遇到了以下问题:即使视频正在循环播放,我留在“audiofiles.txt”中的音频文件也没有声音。

“audiofiles.txt”的内容如下:

ffconcat version 1.0
file '/home/ubuntu/music/spontaneous01.mp3'
file '/home/ubuntu/music/spontaneous02.mp3'
file '/home/ubuntu/audiofiles.txt'

注意事项:视频源长 5 秒,每个音频长约 1 小时,视频和音频都在单独的文件夹中,例如“/home/ubuntu/video/arquivo.mp4”,并且我确定视频没有声音,我认为这没有必要,但如果你有,请告诉我,因为我对这个主题很不了解。

到那时为止,唯一真正的问题是让声音在视频中出现,因为视频处于循环播放状态,但是 concat 中的文件的声音根本没有出现。

我感谢所有能帮助我的人,谢谢!

我提出了一个新问题,因为旧问题已经关闭,但它对我来说不太适用: FFmpeg:多个文件的循环流

答案1

朋友们,我设法用比我想象的更简单的方法解决了这个问题。我将在这里留下我使用的代码,稍后将在下面附上评论:

    #!/bin/bash
        
    VBR="1500k"
    FPS="24"
    QUAL="superfast"
    
    YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"
    YOUTUBE_KEY="spjs-50hd-ujx2-t2ma-1xe9"
    VIDEO_SOURCE="/home/ubuntu/video/BG Fundo 01 720p.mp4"
    AUDIO_ENCODER="aac"
            
    ffmpeg \
    -stream_loop -1 \
    -re \
    -i "$VIDEO_SOURCE" \
    -thread_queue_size 512 \
    -stream_loop -1 \
    -re \
    -f concat -i /home/ubuntu/music/audiofiles.txt \
    -map 0:v:0 -map 1:a:0 \
    -map_metadata:g 1:g \
    -c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR -bufsize 3000k -maxrate $VBR \
    -c:a $AUDIO_ENCODER -ar 44100 -b:a 128k -pix_fmt yuv420p \
    -f flv $YOUTUBE_URL/$YOUTUBE_KEY

通过这样做,我能够连接音频文件而无需生成另一个output.mp3文件进行流式传输。我作为规则采取的观察结果以及对此类代码产生重大影响的观察结果如下:

  1. 我对视频输入进行了映射,然后是音频,因为在这种情况下,首先通知视频输入。

  2. 此映射仅当行"-map 0: v: 0 -map 1: a: 0 \""-map_metadata: g 1: g \"位于列出的连接文件正下方时才有效audiofiles.txt,并且如果它们位于从该行开始的对音频和视频编解码器的调用之前"-c: v libx264 -preset (...)"

  3. 连接后的文件与文件位于同一示例目录中,audiofiles.txt其内容如下:

    ffconcat version 1.0
    file spontaneous01.mp3
    file spontaneous02.mp3
    file audiofiles.txt

带有引号或双引号的文件名根本不起作用,我不知道具体的原因,但它确实不起作用。

这些是我做出并以此为基础的观察,现在我能够实时连接任何音频文件,只需将其放在与其他音频文件相同的目录中并将其列在文本文件中即可。

感谢@llogan 的评论,虽然它没有回答我的问题,但却开阔了我的思路去探索问题的可能解决方案。

相关内容