带FFmpeg的HLS(独立的轨道同步)

时间:2019-01-30 11:14:32

标签: ffmpeg hls aac x264

我正在寻找一种解决方案,以将视频文件转码为HLS多比特率并分离音轨

基本上, 我有一个视频文件,将其转码为4种分辨率+ 1条音轨

  • 180p
  • 360p
  • 720p
  • 1080p
  • 2160p(也许)
  • 音频1
  • 音频2(也许)

但是例如,这是我的180p命令:

ffmpeg -i ${source} \
    -pix_fmt yuv420p \
    -c:v libx264 \
    -b:v 230k -minrate:v 230k -maxrate:v 230k -bufsize:v 200k \
    -profile:v baseline -level 3.0 \
    -x264opts scenecut=0:keyint=75:min-keyint=75 \
    -hls_time 3 \
    -hls_playlist_type vod \
    -r 25 \
    -vf scale=w=320:h=180:force_original_aspect_ratio=decrease \
    -an \
    -f hls \
    -hls_segment_filename ../OUT/${base_name}/180p/180p_%06d.ts ../OUT/${base_name}/180p/180p.m3u8

和音轨:

ffmpeg -i ${source} \
    -vn \
    -c:a aac \
    -b:a 128k \
    -ar:a 48000 \
    -ac:a 2 \
    -hls_time 3 \
    -hls_playlist_type vod \
    -hls_segment_filename ../OUT/${base_name}/audio1/audio1_%06d.ts ../OUT/${base_name}/audio1/audio1.m3u8

出于方便的原因,我会根据视频源质量为每种分辨率分别启动ffmpeg命令

然后我创建一个标准的主播放列表

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=230000,RESOLUTION=320x180,CODECS="avc1.42001e"
180p/180p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=600000,RESOLUTION=640x360,CODECS="avc1.42e00a"
360p/360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3150000,RESOLUTION=1280x720,CODECS="avc1.4d0028"
720p/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d0029"
1080p/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=128000,CODECS="mp4a.40.2"
audio1/audio1.m3u8

当我尝试阅读主播放列表时, 我没有声音 使用VLC,音频轨道会在视频轨道之前播放

那么,如何将音频轨道与视频轨道同步?

谢谢

0 个答案:

没有答案