ffmpeg - 带有 FFmpeg 的 HLS(分离轨道同步)
问题描述
我正在寻找一种解决方案,以继续将视频文件转码为 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,音轨在视频轨道之前播放
那么,如何将音频轨道与视频轨道同步?
谢谢
解决方案
推荐阅读
- c++ - Microsoft Visual Studio 具有来自以前但不是当前设置的编译错误
- python - CheckboxGroup 和 Button 的回调函数
- azure-resource-manager - 如何为 Azure 数据工厂添加 Azure 自定义策略以在创建链接服务期间仅使用 Azure Key Vault?
- java - java:不兼容的类型:推理变量 T 具有不兼容的边界等式约束:下限:java.util.List<> 用于添加字段
- python - How to set level for logging in python from configuration file
- bash - 如何仅使用 bash 脚本连接具有相同标识符的文件?
- assembly - TASM 代码在 YASM 中给出错误:标签后预期的指令
- c# - 不重复文本文件中的行
- java - 如何在java中增加泛型类型值
- java - Spring Boot 现有域 .cert 文件实现我的应用程序(SSL)