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