将mp4文件转为ts文件并生成m3u8
1. 视频文件转为视频编码h264,音频编码aac格式的mp4文件
ffmpeg -i input.mkv -acodec libfaac -vcodec libx264 1.mp4
或者
若音视频编码为h264/aac则可执行
ffmpeg -i input.mkv -acodec copy -vcodec copy 1.mp4
2. 将mp4转为完整的ts
ffmpeg -i 1.mp4 -codec copy -bsf:v h264_mp4toannexb 1.ts
3. 将ts切片,并生成m3u8文件
ffmpeg -i 1.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 3 output%03d.ts
补:
- ts转换成视频
@echo on
"tool/ffmpeg.exe" -y -i "in/a.m3u8" -c copy -bsf:a aac_adtstoasc "out/a.mp4"
====================================================
"tool/ffmpeg.exe" ffmpeg程序相对路径
-y "out/a.mp4" 如果已经存在,则覆盖
-i "in/a.m3u8" 指定输入文件的相对路径
-c copy 视频编解码、音频编解码、字幕编解码 复用输入的。这样比较快。
-bsf:a aac_adtstoasc 音频过滤器 -absf -vbsf -bsf:v
aac adts格式转成asc格式
"out/a.mp4" 输出文件的相对路径
- 视频转换成ts
@echo on
rem 视频转m3u8格式(非加密)
set global_fileName=a.mp4
set global_mp4_relativePath=a.mp4
echo "共5个步骤,请耐心等待..."
echo "1/5:其他格式转a.mp4。"
rem 提取a.*的文件名
set FolderName=%cd%
for /f "delims=\" %%a in ('dir /b /a-d /o-d "%FolderName%\a.*"') do (
set global_fileName="%%a"
)
echo %global_fileName%
if not %global_fileName%=="a.mp4" (
"tool/ffmpeg" -i %global_fileName% -y -sn -c:a copy -c:v libx264 -strict -2 "temp/a.mp4"
========================================================================================
"tool/ffmpeg" ffmpeg工具的相对路径
-i %global_fileName% 输入文件的相对路径
-y 输出文件"temp/a.mp4"如果存在,则覆盖
-sn 字幕文件,忽略掉;-an音频忽略掉;-vn视频忽略掉
-c:a copy -c(编解码器):a音频的; 其实就是音频的编解码器
copy 输出的文件复用输入文件的编解码器
-c:v libx264 其他格式转mp4,最重要的命令,输出视频的转码为libx264--->h264格式
-strict -2 和标准的差异
"temp/a.mp4" 输出文件
========================================================================================
set global_mp4_relativePath=temp/a.mp4
)
echo "2/5:a.mp4转a.ts。"
"tool/ffmpeg" -y -i %global_mp4_relativePath% -c copy -vbsf h264_mp4toannexb "temp/a.ts"
==========================================================================================
"tool/ffmpeg" ffmpeg的相对路径
-y 输出文件 "temp/a.ts" 如果存在,直接覆盖
-i %global_mp4_relativePath% 输入文件的相对路径
-c copy 输出的视频,音频,字幕,编码器拷贝 输入的视频、音频、字幕的编码器
-vbsf h264_mp4toannexb 视频的过滤器,将mp4中的adts格式转成标准的annexb格式的adts.
"temp/a.ts" 输出文件的相对路径
==========================================================================================
echo "3/5:删除temp/a.mp4。"
if not %global_fileName%=="a.mp4" (
del "temp\\a.mp4"
)
echo "4/5:a.ts转a.m3u8。"
"tool/ffmpeg" -i temp/a.ts -c copy -map 0 -f segment -segment_list out/a.m3u8 -segment_time 10 out/a-%%03d.ts
==========================================================================================
"tool/ffmpeg" ffmpeg的相对路径
-i temp/a.ts ts文件的相对路径
-map 0 -map 0:0 -map0:0 把输入的a.ts文件中视频、音频、字幕都输出到输出文件中
-f 输入文件格式
segment 分段
-segment_list out/a.m3u8 列出所有分片的ts文件的列表文件的相对路径【用于输出的】
-segment_time 10 每隔10s分片
out/a-%%03d.ts 输出文件相对路径
%03d 三位的整数,不足补0
%% dos命令的转义,转义位%,
ffmpeg程序会自动生成文件名 a-000.ts
==========================================================================================
echo "5/5:删除temp/a.ts。"
del "temp\a.ts"
echo "转换完成。"
pause
- 视频转换成加密的ts
@echo on
rem 视频转m3u8格式(加密)
set global_fileName="a.mp4"
set global_mp4_relativePath="a.mp4"
set FolderName=%cd%
echo "共6个步骤,请耐心等待..."
echo "1/6:生成秘钥。"
"tool/openssl/openssl.exe" rand 16>"%FolderName%/encrypt.key"
echo "2/6:创建encrypt.keyinfo"
rem echo http://127.0.0.1/encrypt.key>temp/encrypt.keyinfo//
echo encrypt.key>temp/encrypt.keyinfo
echo %FolderName%\encrypt.key>>temp/encrypt.keyinfo
echo "3/6:其他格式转a.mp4。"
rem 提取a.*的文件名
for /f "delims=\" %%a in ('dir /b /a-d /o-d "%FolderName%\a.*"') do (
set global_fileName="%%a"
)
echo %global_fileName%
if not %global_fileName%=="a.mp4" (
"tool/ffmpeg" -i %global_fileName% -y -sn -c:a copy -c:v libx264 -strict -2 "temp/a.mp4"
==================================================================================
"tool/ffmpeg" ffmpeg的相对路径
-i %global_fileName% 输入文件的路径
-y "temp/a.mp4" 输出文件如果存在,则我们直接覆盖
-c:a copy 输出的音频编解码器复用输入的音频编解码器
-c:v libx264 输出的视频编解码器采用h264格式,其他格式转成h264格式(作用)
-strict -2 和标准的严格性
"temp/a.mp4" 输出文件的相对路径
==================================================================================
set global_mp4_relativePath="temp/a.mp4"
)
echo "4/6:a.mp4转a.m3u8"
"tool/ffmpeg" -y -i %global_mp4_relativePath% -c copy -vbsf h264_mp4toannexb -hls_list_size 0 -hls_time 30 -hls_key_info_file temp/encrypt.keyinfo -hls_segment_filename out/a-%%03d.ts out/a.m3u8
===================================================================================
"tool/ffmpeg" ffmpeg的相对路径
-y out/a.m3u8 如果存在,则直接覆盖,不提示了。
-i %global_mp4_relativePath% 输入文件
-c copy 视频,音频、字幕的编解码器【输出的】 复用 视频,音频、字幕的编解码器【输入的】
-vbsf h264_mp4toannexb 视频过滤器,将mp4格式的adts,转成annexb格式的adts
----------------------------------------
-hls_list_size 0 a.m3u8文件中记录的ts的数目,默认为5.
-hls_time 30 每隔30s分一段
-hls_key_info_file temp/encrypt.keyinfo 加密使用的描述文件的相对路径
hls_segment_filename out/a-%%03d.ts 分段的ts文件的相对路径
out/a.m3u8 m3u8这个文件的相对路径
===================================================================================
echo "5/6:删除temp/a.mp4。"
if not %global_fileName%=="a.mp4" (
del "temp\\a.mp4"
)
echo "6/6:删除temp/encrypt.keyinfo"
rem del "temp\encrypt.keyinfo"
echo "转换完成。"
pause
m3u8下载并转成mp4
https://www.jianshu.com/p/dee8f3bd12df
ffmpeg -i http://xxxx.m3u8 -c copy 1xxx.mp4
//截取
ffmpeg -ss [start] -t [duration] -accurate_seek -i 1xxx.mp4 -codec copy 2xxx.mp4
ffmpeg -ss [start] -to [end] -accurate_seek -i 1xxx.mp4 -codec copy 2xxx.mp4
提取音频
ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aac
ffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a
aac 转换成 mp3
ffmpeg -i 002.aac -acodec libmp3lame 2.mp3
直接提取mp3
ffmpeg -i test.mp4 -f mp3 -vn test.mp3
参数解释:
-i 表示input,即输入文件
-f 表示format,即输出格式
-vn表示vedio not,即输出不包含视频