将HLS(m3u8)转换为MP4

29

有人可以建议如何从一个 HLS 流构建一个 MP4 文件吗(通常相反的方向)?假设我有 m3u8 文件 - 是否有一种简单的方法使用 FFMPEG 或其他工具获取一个单独的 MP4?


1
ffmpeg -i in.m3u8 -acodec copy -vcodec copy out.mp4 - szatmary
2
@szatmary 我认为还需要 -bsf:a aac_adtstoasc - aergistal
1
@aergistal 对于AAC音频支持,对于MP3音频不支持。 - szatmary
1
@szatmary 当然,但我认为HLS中的AAC相当普遍。 - aergistal
1
@aergistal 就是 MP3 和 DD+。 - szatmary
太棒了,谢谢。你可以将其作为答案发布,包括上面指定的所有细节,我将非常愿意接受。 - orcaman
2个回答

60

ffmpeg -i in.m3u8 -acodec copy -vcodec copy out.mp4

这个命令可以将输入的m3u8文件转换为mp4格式,保留原有的音频和视频编码格式。

如果输入文件中包含AAC音频,则需要添加“aac_adtstoasc”比特流过滤器。

ffmpeg -i in.m3u8 -acodec copy -bsf:a aac_adtstoasc -vcodec copy out.mp4


1
你好。你能帮我学习如何在Swift上实现这个吗?我想要下载m3u8文件,但是因为不支持无法保存,现在我想在Swift中将其转换为mp4。 - famfamfam
当然,您可以在stackoverflow上开一个问题,详细说明您遇到的问题步骤,我很乐意帮助您。 - szatmary
嗨。看到你的评论我真的很高兴,我在这里发布了一个问题,你能看一下吗:https://stackoverflow.com/questions/54274457/swift-can-not-save-m3u8-file-to-gallery - famfamfam
这个命令会生成一个包含所有HLS备选音轨和侧边栏VTT字幕的MP4文件吗?并且可以将字幕和音轨烧录到MP4中吗? - Manik Arora

4

另一种将HLS转换为MP4的方法是使用VLC播放器。您可以通过界面和命令行进行转换。只需运行一个包含以下行的.bat文件:

chcp 65001
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" http://cdn.haramain.global/vods3/_definst_/mp4:amazons3/akra/programlar/yeni/335/c07f21e3-a313-4e8d-b594-403ddefbf11f.mp4/playlist.m3u8 --sout "#transcode{vcodec=none,acodec=mp3,ab=70,channels=2,samplerate=44100}:std{access=file{no-overwrite},mux=mp3,dst='C:\Users\aidata\Desktop\Akra FM\13.07.2013 - Karagöz - Bilmecesi.mp3'}" vlc://quit
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" http://cdn.haramain.global/vods3/_definst_/mp4:amazons3/akra/programlar/yeni/335/dcb6754a-49f1-4517-bfe4-3864942f63c8.mp4/playlist.m3u8 --sout "#transcode{vcodec=none,acodec=mp3,ab=70,channels=2,samplerate=44100}:std{access=file{no-overwrite},mux=mp3,dst='C:\Users\aidata\Desktop\Akra FM\12.07.2013 - Nasreddin Hoca - Köyün Eseği.mp3'}" vlc://quit

这个批处理脚本会逐个转换两个文件。如果你将这些命令粘贴到cmd.exe中,所有的转换都会同时开始。
现在让我解释一下代码。 chcp 65001 这行允许你在目标文件名中使用Unicode字符。以下行由四个部分组成。
1. "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" 这是VLC播放器的路径。安装VLC后请验证此路径。
2. http://cdn.haramain.global/vods3/_definst_/mp4:amazons3/akra/programlar/yeni/335/c07f21e3-a313-4e8d-b594-403ddefbf11f.mp4/playlist.m3u8 这是一个样例HLS文件。我不知道如果你将此链接放在双引号中会发生什么。
3. --sout "#transcode{vcodec=none,acodec=mp3,ab=70,channels=2,samplerate=44100}:std{access=file{no-overwrite},mux=mp3,dst='C:\Users\aidata\Desktop\Akra FM\13.07.2013 - Karagöz - Bilmecesi.mp3'}" 这是用于转换的VLC命令。你可以在 VLC文档 中找到更多选项。
4. vlc://quit 这将关闭VLC窗口。如果你不想让任务栏被VLC窗口填满,这很有用。没有办法在播放列表中堆叠转换命令。你必须运行VLC,进行转换并关闭窗口。你也可以尝试在静默模式下运行VLC。或者你可以将VLC窗口拖到屏幕右下角,以便后续闪烁的窗口不会打扰你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接