1. 使用ffmpeg 进行普通切片(ts)操作
.\ffmpeg.exe -i a.mp4 -y -f hls -c copy -hls_time 10 .\s.m3u82. 使用ffmpeg 对视频进行设置旋转参数为0
.\ffmpeg.exe -i a.mp4 -metadata:s:v:0 rotate=0 -c copy outputfile.mp43. 使用文件对视频进行加密
.\ffmpeg.exe -i a.mp4 -c copy -hls_time 10 -hls_list_size 0 -hls_key_info_file keyinfo streami.m3u84. 对ts切片视频进行合并
ffmpeg -i "concat:s0.ts|s1.ts|s2.ts|s3.ts|s4.ts|s5.ts" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4
补充一下 第二个命令好像不是预期效果
2020-04-03
遇到一个视频 a.mp4
使用 .\ffmpeg.exe -i a.mp4 得出的视频信息是这样的
Metadata:major_brand : mp42minor_version : 1compatible_brands: isommp41mp42creation_time : 2019-11-27T07:00:13.000000ZDuration: 00:03:27.72, start: 0.000000, bitrate: 577 kb/sStream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 102 kb/s (default)Metadata:creation_time : 2019-11-27T07:00:13.000000Zhandler_name : Core Media AudioStream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709/bt709/iec61966-2-1), 272x480, 469 kb/s, 30.55 fps, 60 tbr, 600 tbn, 1200 tbc (default)Metadata:rotate : 270creation_time : 2019-11-27T07:00:13.000000Zhandler_name : Core Media VideoSide data:displaymatrix: rotation of 90.00 degrees
At least one output file must be specified
可以看到 有个
Metadata:rotate : 270
有这个参数, 但是播放视频的时候视频是正常的。但是使用ffmpeg对a.mp4进行切片操作,产生的 ts切片就是旋转了的
.\ffmpeg.exe -i .\a.mp4 -c copy -y -f hls -hls_time 10 .\s.m3u8
以上这个切片命令是带了 -c copy的,这样不会对音视频进行重新编码,速度很快
通过对比,是顺时针旋转了90度的。
那如何让切片 不出现这种旋转的情况呢?
(补充:如果切片的时候 去掉 -c copy 就不会出现旋转的情况,但是这时候速度会很慢,因为对音视频进行了从新编码)
通过以下这个命令是不可以的,只是以源视频的角度逆时针转了90度。
.\ffmpeg.exe -i a.mp4 -vf "transpose=2" -y -f hls -hls_time 10 .\s.m3u8
经过尝试发现可以这样:
第一步 通过以下命令,产生一个新视频, oa.mp4
.\ffmpeg.exe -i a.mp4 -metadata:s:v:0 rotate=0 -c copy oa.mp4
查看这个视频的信息
.\ffmpeg.exe -i oa.mp4
Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.41.100Duration: 00:03:27.75, start: 0.000000, bitrate: 581 kb/sStream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709/bt709/iec61966-2-1), 272x480, 469 kb/s, 30.55 fps, 60 tbr, 19200 tbn, 38400 tbc (default)Metadata:handler_name : Core Media VideoStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 102 kb/s (default)Metadata:handler_name : Core Media Audio
第二步,以这个oa.mp4视频进行切片操作
.\ffmpeg.exe -i oa.mp4 -vf "transpose=2" -y -f hls -hls_time 10 .\s.m3u8(切实这个操作速度也是比较慢,因为参数不能带 -c copy)
发现切出来的ts视频, 是这样
这样就按照源视频播放的角度,切成了相应的ts切片(其实这样速度也是比较慢,这样操作只是熟悉下ffmpeg的使用, 其实 直接对源视频 进行切片去掉-c copy )
可以考虑将 ts切片后的视频,合并保存,用来替换源视频
-----分割线-----
拓展下,对另外一个b.mp4视频进行试验:
第一步
查看视频信息 ffmpeg -i b.mp4 ,(这是一个正常的视频,没有rotate参数,切片操作也不会出现旋转)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'b.mp4':Metadata:minor_version : 512major_brand : isomcompatible_brands: isomiso2avc1mp41comment : vid:v0300f9a0000bmi264ioctpf0clucuigencoder : Lavf58.20.100Duration: 00:04:41.63, start: 0.000000, bitrate: 479 kb/sStream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 426x240, 344 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)Metadata:handler_name : VideoHandlerStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)Metadata:handler_name : SoundHandler
第二步
修改视频的 rotate参数 , 这里改为90。
(不明白为什么改为90后,查看视频信息 rotate 为270)
.\ffmpeg.exe -i b.mp4 -metadata:s:v:0 rotate=90 -c copy ob.mp4
可以发现,新的ob.mp4 在原来基础上逆时针旋转了90度。
这时在查看ob.mp4的视频信息
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ob.mp4':Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.41.100comment : vid:v0300f9a0000bmi264ioctpf0clucuigDuration: 00:04:41.63, start: 0.000000, bitrate: 479 kb/sStream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 426x240, 344 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)Metadata:rotate : 270handler_name : VideoHandlerSide data:displaymatrix: rotation of 90.00 degreesStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)Metadata:handler_name : SoundHandler
这时候再对 ob.mp4视频进行切片
.\ffmpeg.exe -i ob.mp4 -c copy -y -f hls -hls_time 10 .\s.m3u8
同样 产生的ts角度与 ob.mp4并不一致,而是与b.mp4保持一致
.\ffmpeg.exe -i ob.mp4 -y -f hls -hls_time 10 .\s.m3u8
同样 产生的ts角度与 ob.mp4一致
总结: 视频 X 信息中含有一下信息的
Duration: 00:03:27.72, start: 0.000000, bitrate: 577 kb/sStream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 102 kb/s (default)Metadata:creation_time : 2019-11-27T07:00:13.000000Zhandler_name : Core Media AudioStream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709/bt709/iec61966-2-1), 272x480, 469 kb/s, 30.55 fps, 60 tbr, 600 tbn, 1200 tbc (default)Metadata:rotate : 270creation_time : 2019-11-27T07:00:13.000000Zhandler_name : Core Media VideoSide data:displaymatrix: rotation of 90.00 degrees
进行 切片的时候(参数如果带有 -c copy),产生的ts角度与X并不一样,应该是 与 X 之前的 源视频一样(就是没有设置rotate参数的源视频)
如果去掉 -c copy参数,产生的ts的角度与X一样,
这时候可以考虑实际情况将 ts 合并为新的视频文件,用以替换X
对ffmpeg初步使用,并不熟悉,还望指正。
-----分割线------
附上旋转 、翻转的一些参数
顺时针旋转画面90度
ffmpeg -i test.mp4 -vf "transpose=1" out.mp4逆时针旋转画面90度
ffmpeg -i test.mp4 -vf "transpose=2" out.mp4顺时针旋转画面90度再水平翻转
ffmpeg -i test.mp4 -vf "transpose=3" out.mp4逆时针旋转画面90度水平翻转
ffmpeg -i test.mp4 -vf "transpose=0" out.mp4水平翻转视频画面
ffmpeg -i test.mp4 -vf hflip out.mp4垂直翻转视频画面
ffmpeg -i test.mp4 -vf vflip out.mp4
参考链接:
https://www.5yun.org/ffmpeg-xuan-zhuan-shi-pin-hua-mian-can-shu.html