返回顶部

收藏

ffmpeg切割TS脚本带加密

更多
#!/bin/bash

# Be warned!!! there is an "rm -r" at the end of this script.  I do not guarantee anything, in particular that (mis)use won't damage something important.
# Use at your own risk!
# Copyright public domain
# Derived from: http://dryize.wordpress.com/2014/04/02/protected-hls-using-ffmpeg-and-openssl/

set -e     # Exit on errors

keyFile='video.key'
vidFile="$1"
playList='cc.m3u8'    # Must end with .m3u8!
splitFilePrefix='stream'
wKeyPath="$3/$keyFile"

# Only run if the video file is readable and is not an irregular file
if [ -f "$vidFile" -a -r "$vidFile" ]; then
# Whole rest of program runs in this if; exits 2 at the end if the above fails.

# If folder exists, add it to our paths
if [ -d "$2" ]; then
outDir="$2"
else    # Try to make the directory
mkdir "$2" || exit 1
outDir="$2"
fi

tempDir="$outDir/.$$_tmp"
keyFile="$outDir/$keyFile"

mkdir $tempDir    # It is deleted later

# Stuff from the original script

openssl rand 16 > $keyFile
# I'm not sure if I have the quoting right on this. If not, try removing the double quotes in the middle.
encryptionKey=`cat $keyFile | hexdump -e '16/1 "%02x"'`

# Here's where I run ffmpeg
ffmpeg -i "$vidFile" -c copy -map 0 -bsf:v  h264_mp4toannexb  -flags \
global_header -f segment -segment_time 10 -segment_list_size 0 \
-segment_list "$tempDir/$playList" -segment_format mpegts "$tempDir/$splitFilePrefix"%d.ts
# N.B. I question some of those parameters, such as segment_time, but this is not my command.
# I also had to use libfdk_aac instead of libvo_aacenc
# I thought m3u8 playlists needed full URLs, but he doesn't include them.

numberOfTsFiles=`ls "$tempDir/$splitFilePrefix"*.ts | wc -l`

for (( i=0; i<$numberOfTsFiles; i++ ))
do
initializationVector=`printf '%032x' $i`
openssl aes-128-cbc -e -in "$tempDir/$splitFilePrefix"$i.ts \
-out "$outDir/$splitFilePrefix"$i.ts -nosalt -iv $initializationVector -K $encryptionKey
done

# Write something to the middle of the head of the playlist
{
head -2 "$tempDir/$playList"
echo '#EXT-X-KEY:METHOD=AES-128,URI=''"'"$wKeyPath"'"'
echo '#EXT-X-MEDIA-SEQUENCE:0'
egrep "$tempDir/$playList" -vie '#EXT-X-MEDIA-SEQUENCE:' \
| tail -n +3
} > "$outDir/$playList"

# Get rid of the unencrypted files and unmodified playlist
rm -rf "$tempDir"

# Close the opening if
else exit 2
fi

标签:lua

收藏

0人收藏

支持

0

反对

0

发表评论