如何解密ffmpeg加密的单个或多个.ts分段文件?
加密TS分片单独解密操作方法
你使用的是标准HLS AES-128加密方案,解密单个/多个分片无需处理整个m3u8列表,只需使用加密时的密钥文件和IV值即可,操作方法如下:
方法1:用FFmpeg解密(推荐,无转码速度快)
你已经有现成的enc.keyinfo文件,直接调用即可,无需额外转换密钥格式。
单个分片解密
执行命令:
ffmpeg -i 待解密的分片文件名.ts -c copy -hls_key_info_file d:\enc.keyinfo 解密后输出文件名.ts
示例:解密output_001.ts
ffmpeg -i output_001.ts -c copy -hls_key_info_file d:\enc.keyinfo decrypted_001.ts
批量解密多个分片
Windows CMD环境执行:
for %i in (output_*.ts) do ffmpeg -i "%i" -c copy -hls_key_info_file d:\enc.keyinfo "decrypted_%~ni.ts"
Windows PowerShell环境执行:
Get-ChildItem . -Filter output_*.ts | ForEach-Object { ffmpeg -i $_.Name -c copy -hls_key_info_file d:\enc.keyinfo "decrypted_$($_.Name)" }
方法2:用OpenSSL解密(无FFmpeg环境时使用)
需要先将d:\enc.key二进制密钥文件转换为32位十六进制字符串,再配合你keyinfo里的IV值解密:
openssl aes-128-cbc -d -in 待解密的分片文件名.ts -out 解密后输出文件名.ts -K 密钥的32位十六进制字符串 -iv 261daad184c6acf4a3a21393ds232e1a
注意事项
- 以上两种方法均为直接复制音视频流,无转码过程,不会损失画质音质,处理速度极快
- 你给出的IV值包含字符
s,不符合十六进制规范,请核对加密时使用的真实IV值,否则会解密失败 - 你之前加密命令里的
ffmpg为笔误,正确拼写为ffmpeg,不影响已生成分片的解密 - 若需合并多个解密后的分片,可直接用FFmpeg concat命令:
ffmpeg -i "concat:decrypted_001.ts|decrypted_002.ts|decrypted_003.ts" -c copy 合并后输出文件.ts
内容的提问来源于stack exchange,提问作者Yancey
相关产品推荐
相关产品推荐

