ffmpeg简单使用小记

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3安装教程配置配置阿里云

配置全新阿里云 Linux iz2ze0ajic0vbvwnjhw2bwz 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 安装依赖包 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc1.tar.xz 新建一个文件夹存放python3 mkdir /u…

python 使用requests模块进行 视频文件的下载

公司项目需要下载一批视频文件, 格式是mp4和mkv的,就借助request模块进行了下载,前提是源服务器返回文件的大小,以及可以接受 请求头headers中带有Range参数 以下是下载逻辑: resp requests.head(urlreal_video_url)…

Git的多人协作和分支处理测试

首先配置ssh密钥 克隆项目 配置两台主机(一台本地mac,一台云服务器)通过这样的方式模拟多人开发。 创建分支 [root ~/Git_test_多人协作和冲突合并/branch_test]$ ls README.md [root ~/Git_test_多人协作和冲突合并/branch_test]$ git b…

python 碎片整理 threading模块小计

threading模块中, start()与run()方法的区别 threading.start() 方法是开启一个线程 threading.run() 方法则是普通的函数调用

git教程目录

git入门教程 PyCharm和git安装教程 Git的多人协作和分支处理测试

msyql 禁止远程访问

1. use mysql 2. select host , user from user; 查看用户 与 对应的host 3. 将 host 中是 %的改为 localhost, 酌情也可以其他用户 的host限制为localhost update user set host "localhost" where user "root" and host "%" 4. …

mysql索引回表

先索引扫描,再通过ID去取索引中未能提供的数据,即为回表。 建表 mysql> create table T( id int primary key, k int not null, name varchar(16), index (k))engineInnoDB;如果语句是 select * from T where ID500,即主键查询方式&am…

C++ 执行cmd命令 并获取输出

这是参考别人的 &#xff0c;具体来源忘了&#xff0c;唉&#xff0c;等想起来一定补上出处 头文件 PipeCmd.h #ifndef _PIPE_CMD_H_ #define _PIPE_CMD_H_#include <Windows.h>// 执行 cmd 命令, 并获取执行结果数据 BOOL PipeCmd(char *pszCmd, char *pszResultBuffe…

iterm2 保存阿里云登陆并防止断开连接

commando edit profiles新增一个页面 添加命令 ssh -A -p 22 -o ServerAliveInterval60 rootIP

QString中包含中文的时候, 转为char *

转载自 https://blog.csdn.net/mihang2/article/details/39026865 QString中包含中文的时候&#xff0c; 转为char * void FileEncWidget::QString2ANSI(QString text, char **pOut) {std::wstring wIn text.toStdWString();char *pcstr (char *)malloc(sizeof(char)*(2 * w…

brew安装

官网&#xff1a;http://brew.sh/ 安装软件&#xff1a;brew install 软件名&#xff0c;例&#xff1a;brew install wget搜索软件&#xff1a;brew search 软件名&#xff0c;例&#xff1a;brew search wget卸载软件&#xff1a;brew uninstall 软件名&#xff0c;例&#…

关于异步IO模型的学习

看到两篇不错的文章&#xff0c;转载了&#xff1a; https://www.cnblogs.com/fanzhidongyzby/p/4098546.html https://www.cnblogs.com/aspirant/p/9166944.html

centos 无法连接网络

最小化安装&#xff0c;没有ifconfig默认没法联网 cd /etc/sysconfig/network-scripts/ sudo vi ifcfg-en33 也有可能是其他后缀 找到ONBOOTno service network restart 然后yum install net-tools

C++实现utf8和gbk编码字符串互相转换

不同系统或者服务器之间消息传递经常遇到编码转换问题&#xff0c;这里用C实现了一个轻量的gbk和utf8互相转换&#xff0c;可跨平台使用。&#xff08;重量级的可以用libiconv库&#xff09; 在windows下用<windows.h>头文件里的函数进行多字节和宽字符转换&#xff0c;…

mysql5.7初始密码查看及密码重置

查看初始密码 grep temporary password /var/log/mysqld.logcat /root/.mysql_secret mysql密码找回 密码重置 vi /etc/my.cnf 在[mysqld]下加上 skip-grant-tables&#xff0c;如&#xff1a; [mysqld] datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock skip-g…

Ubuntu Linux系统环境变量配置文件

Ubuntu Linux系统环境变量配置文件&#xff1a; /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profi…

Mooc的Python3学习笔记

文章目录一些优秀的博主仅供自己查阅&#xff01;&#xff01;&#xff01;首先是掌握基本语法&#xff01;内置的运算符函数函数模块补充知识点pass函数返回多个值关于默认参数使用的注意事项可变参数的使用方法天天向上代码单元测试异常处理代码单例模式Python 中的 if __nam…

使用supervisord 来守护 nginx进程

supervisord 简介&#xff1a; Supervisord 是用 Python 实现的一款的进程管理工具&#xff0c;supervisord 要求管理的程序是非 daemon 程序&#xff0c;supervisord 会帮你把它转成 daemon 程序&#xff0c;因此如果用 supervisord 来管理进程&#xff0c;进程需要以非daemo…

Mac快捷键和实用技巧

文章目录如何更改应用图标怎么移动Mac状态栏的图标macOS常用快捷键多开QQ如何更改应用图标 https://www.macdu.org/16592.html 怎么移动Mac状态栏的图标 https://www.macdu.org/16683.html macOS常用快捷键 https://www.macdu.org/16607.html 多开QQ https://www.macdu.…

vs2017编译QT with ssl

背景&#xff1a;项目中使用的Qt环境不支持https请求&#xff0c;原因是 源码编译的时候没有链接相应的ssl库文件。需要重新编译qt 第一步 先编译Openssl 1)安装perl&#xff0c;并配置环境变量 下载地址&#xff1a; http://downloads.activestate.com/ActivePerl/releases/5…