首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg:从同一输入视频生成的具有不同片段持续时间的M3U8播放列表的MD5散列(在应用视频过滤器之后)不匹配

FFmpeg:从同一输入视频生成的具有不同片段持续时间的M3U8播放列表的MD5散列(在应用视频过滤器之后)不匹配
EN

Stack Overflow用户
提问于 2020-06-19 15:55:17
回答 2查看 971关注 0票数 0

下面是一些命令,用于将MP4格式的视频转换为M3U8播放列表。

对于给定的输入视频(MP4格式),生成分段持续时间为30秒的多个视频段。

代码语言:javascript
复制
ffmpeg -loglevel error -i input.mp4 -dn -sn -an -c:v copy -bsf:v h264_mp4toannexb -copyts -start_at_zero -f segment -segment_time 30 30%03d.mp4 -dn -sn -vn -c:a copy audio.aac

在每个段上应用视频过滤器(在本例中为缩放),并将其转换为M3U8格式。

代码语言:javascript
复制
ls 30*.mp4 | parallel 'ffmpeg -loglevel error -i {} -vf scale=-2:144 -hls_list_size 0 {}.m3u8'

以这种格式存储以m3u8格式生成的list.txt文件列表( file 'segment-name.m3u8' )

代码语言:javascript
复制
for f in 30*.m3u8; do echo "file '$f'" >> list.txt; done

使用,将所有段文件(都是M3U8格式)和音频组合在一起,得到一个指向持续时间为10秒的段的最终m3u8播放列表。

代码语言:javascript
复制
ffmpeg -loglevel error -f concat -i list.txt -i audio.aac -c copy -hls_list_size 0 -hls_time 10 output_30.m3u8

我可以将第一步中的段持续时间从30秒更改为60秒,并使用以下命令比较在这两种情况下生成的最终M3U8播放列表的M3U8哈希:

代码语言:javascript
复制
ffmpeg -loglevel error -i <input m3u8 playlist> -f md5 -

输出文件的MD5散列不同,即output_30.m3u8output_60.m3u8的视频流不一样。

有人能详细解释一下吗?

(我期望MD5哈希是相同的)

EN

回答 2

Stack Overflow用户

发布于 2020-06-19 21:12:43

M3U8文件只是一个文本文件。对它们执行不同的操作,它会告诉您什么是不同的。

票数 0
EN

Stack Overflow用户

发布于 2020-07-15 10:05:38

在第二步中添加-crf 0 (这意味着无损编码)将给出相同的校验和。

在有损编码的情况下,根据我到目前为止所了解到的情况,分段编码必然与普通的线程编码(使用更多线程的质量不同)和有损编解码器不同。即使使用--stitchable (x264参数)和--threads 1 (FFmpeg输出选项)等选项,校验和也不一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62474057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档