在你的转码命令里面添加上-vf rotate=PI/2或者-vf rotate=3PI/2,例如
ffmpeg -i E:\ffmpeg\testmp4 -y -vf rotate=PI/2 E:\ffmpeg\dest1mp4
ffmpeg在做音视频编解码时非常方便,所以很多场景下转码使用的是ffmpeg,通过ffmpeg –-help可以看到ffmpeg常见的命令大概分为六部分:
命令格式如下:
下面罗列一些ffmpeg常用的信息查询命令:
1、查询版本信息
2、ffmpeg查询是否支持对应的视频文件格式
使用ffmpeg转吗,有时候可能会遇到无法解析的视频文件或者无法生成视频文件,报错提示不支持生成对应的视频文件,这时候就需要查看当前使用的ffmpeg是否支持对应的视频文件格式,需要使用ffmpeg -formats参数来查看:
根据上面输出的信息可以看到,输出的内容分为3个部分,具体如下。
输出信息中包含了三部分内容,具体如下。
输出信息的内容分为四列,具体如下。
从输出的帮助信息中可以看到,FLV的muxer的信息包含两大部分,具体如下。
从输出的帮助信息可以看到,FLV的demuxer的信息包含两大部分:
从帮助信息可以看到,H264(AVC)的编码参数包含两大部分,具体如下。
从帮助信息可以看到,H264(AVC)的解码参数查看包括两大部分,具体如下:
从帮助信息可以看到,colorkey滤镜查看信息包含两大部分,具体如下。
ffmpeg的封装转换(转封装)功能包含在AVFormat模块中,通过libavformat库进行Mux和Demux *** 作;多媒体文件的格式有很多种,这些格式中的很多参数在Mux与Demux的 *** 作参数中是公用的,下面来详细介绍一下这些公用的参数。
通过查看ffmpeg --help full信息,找到AVFormatContext参数部分,该参数下的所有参数均为封装转换可使用的参数。下表列出了ffmpeg AVFormatContext的主要参数及说明。
这些都是通用的封装、解封装 *** 作时使用的参数,后续章节中介绍转封装 *** 作、解封装 *** 作、封装 *** 作时,上述参数可以与对应的命令行参数搭配使用。
ffmpeg编解码部分的功能主要是通过模块AVCodec来完成的,通过libavcodec库进行Encode与Decode *** 作。多媒体编码格式的种类有很多,但是还是有很多通用的基本 *** 作参数设置,下面来详细介绍这些公用的参数。
通过命令ffmpeg --help full可以看到AVCodecContext参数列表信息。该选项下面的所有参数均为编解码可以使用的参数。
ffmpeg还有一些更细化的参数,本节中并未详细提及,可以根据本节中提到的查看方法查看ffmpeg的帮助文件以查看更多的内容,本节中介绍的是重点及常用的通用参数,后续章节中介绍编码 *** 作时,上述参数可以配合对应的例子使用。
ffmpeg工具的主要用途为编码、解码、转码以及媒体格式转换,ffmpeg常用于进行转码 *** 作,使用ffmpeg转码的主要原理如图
通过之前介绍的参数,可以设置转码的相关参数,如果转码 *** 作频涉及封装的改变,则可以通过设置AVCodec与AVFormat的 *** 作参数进行封装与编码的改变,下面示例:
从输出信息中可以看到,以上输出的参数中使用了前面介绍过的参数,具体如下。
在 FFmpeg套件中,除了ffmpeg作为多媒体处理工具之外,还有ffprobe多媒体信息查看工具,ffprobe主要用来查看多媒体文件的信息,下面就来看一下ffprobe中常见的基本命令。
usage: ffprobe [OPTIONS] [INPUT_FILE] the other
ffprobe常用的参数比较多,可以通过ffprobe --help来查看详细的帮助信息。
这些输出的帮助信息既是ffprobe常用的 *** 作参数,也是ffrpobe的基础参数。例如查看log,查看每一个音频数据包信息或者视频数据包信息,查看节目信息,查看流信息,查看每一个流有多少帧以及每一个流有多少个音视频包,查看视频像素点的格式等。下面就来根据以上的输出参数重点列举几个例子。
1)使用下面的命令,查看多媒体数据包信息:
通过show_packets查看的多媒体数据包信息使用PACKET标签括起来,其中包含的信息主要如下:
2)除了以上字段和信息之外,还可以通过如下的组合参数来查看包中的具体数据:
和上面的比起来多了一个data字段,具体如下
[PACKET]
codec_type=video
stream_index=0
pts=379904
pts_time=24733333
dts=379904
dts_time=24733333
duration=512
duration_time=0033333
size=2010
pos=3272564
flags=__
data=
00000000: 0000 07d6 419a cc21 3ffa 5800 0031 9893 A!X1
00000010: d7e7 0641 039b 27c5 e0f8 5175 1abc 0e4f A'QuO
00000020: d710 f401 3224 0093 a2e5 c07e 9c30 0003 2$~0
略过一大段数据
00000770: 1ebe 840a 5ac2 4f9a 614c 5697 8eab fef8 ZOaLV
00000780: 0b59 9647 cc6d 8a4b f8c0 89e8 798e f569 YGmKyI
00000790: 2aca ec22 e1f5 d2e5 31b1 010e 7725 e127 "1w%'
000007a0: c5f4 7051 f07b 8449 649f 3fab 6a3d 3913 pQ{Idj=9
000007b0: d9e4 bdd6 0f22 fa77 2b32 35f5 f4f7 5393 "w+25S
000007c0: 1c9d fe72 1550 ba41 c774 5031 96d5 aef5 rPAtP1
000007d0: f1b9 77a7 ad54 0800 010f wT
[/PACKET]
从输出的内容中可以看到多媒体包中包含的数据,那么我们可以根据上述输出内容中的pos,也就是文件偏移位置来查看,pos的值为3272564,将其转换为十六进制位置为0x31EF74,这就是这个包在flv文件中的偏移量,可以使用Linux下的xxd 1mp4命令进行查看:
0031ef70: 0000 000e 0000 07d6 419a cc21 3ffa 5800 A!X
0031ef80: 0031 9893 d7e7 0641 039b 27c5 e0f8 5175 1A'Qu
0031ef90: 1abc 0e4f d710 f401 3224 0093 a2e5 c07e
0031efa0: 9c30 0003 389a 06b7 f211 fb06 362c 95a9 086,
0031efb0: 0020 8f32 e280 6773 015e 78d2 87a3 e114 2gs^x
0031efc0: f3b3 9d2d ffd7 b202 2233 923f 3d42 bc7f -"3=B
可以看到从0x31EF74开始的数据和上面一致:0000 07d6 419a cc21 3ffa 5800。
通过ffprobe读取packets来进行对应的数据分析,使用show_packets与show_data配合可以进行更加精确的分析。
3)除了packets与data之外,ffprobe还可以分析多媒体的封装格式,其使用FORMAT标签括起来显示:
[FORMAT]
filename=1mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0000000
duration=25704000
size=3307949
bit_rate=1029551
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:encoder=Lavf5533100
[/FORMAT]
下面是对输出信息关键字段的说明:
4)使用下面的命令可以查看视频文件的帧信息,输出的帧信息将使用FRAME标签括起来:
[FRAME]
media_type=video
stream_index=0
key_frame=1
pts=0
pts_time=0000000
pkt_dts=0
pkt_dts_time=0000000
best_effort_timestamp=0
best_effort_timestamp_time=0000000
pkt_duration=512
pkt_duration_time=0033333
pkt_pos=22995
pkt_size=1888
width=720
height=1280
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=I
coded_picture_number=0
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=tv
color_space=bt709
color_primaries=bt709
color_transfer=bt709
chroma_location=left
[/FRAME]
通过-show-frames参数可以查看每一帧的信息,下面就来介绍一下其中重要的信息,
在Windows下常用的Elecard StreamEye工具中打开查看MP4时,会很直观地看到帧类型显示,用ffprobe的pict_type同样可以看到视频的帧是I帧,P帧或者B帧;每一帧的大小同样也可以通过ffprobe的pkt_size查看到。
5)通过-show_streams参数可以查看到多媒体文件中的流信息,流的信息将使用STREAM标签括起来:
[STREAM]
index=0
codec_name=h264
codec_long_name=H264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_tag_string=avc1
codec_tag=0x31637661
width=720
height=1280
coded_width=720
coded_height=1280
closed_captions=0
film_grain=0
has_b_frames=0
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=42
color_range=tv
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=left
field_order=progressive
refs=1
is_avc=true
nal_length_size=4
id=0x1
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/15360
start_pts=0
start_time=0000000
duration_ts=388608
duration=25300000
bit_rate=964695
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=759
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=39
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:language=und
TAG:handler_name=VideoHandler
TAG:vendor_id=[0][0][0][0]
[/STREAM]
如以上输出内容所示,从中可以看到流的信息,具体属性及说明如下表
fprobe 使用前面的参数可以获得key-value格式的显示方式,但是阅读起来因为习惯不同,可能有的人会认为方便,有的人认为不方便;如果要进行格式化的显示,这样就需要用到ffprobe -print_format 或者 ffprobe -of 参数来进行相应的格式输出,而-print_format 支持多种格式输出,包括XML,INI,JSON,CSV,FLAT等。下面列举几种常见的格式输出的例子
<xml version="10" encoding="UTF-8">
<ffprobe>
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf5533100
Duration: 00:00:2570, start: 0000000, bitrate: 1029 kb/s
Stream #0:0 0x1 : Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, 964 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1 0x2 : Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 72 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
<streams>
<stream index="0" codec_name="h264" codec_long_name="H264 / AVC / MPEG-4 AVC / MPEG-4 part 10" profile="Main" codec_type="video" codec_tag_string="avc1" codec_tag="0x31637661" width="720" height="1280" coded_width="720" coded_height="1280" closed_captions="0" film_grain="0" has_b_frames="0" pix_fmt="yuv420p" level="42" color_range="tv" color_space="bt709" color_transfer="bt709" color_primaries="bt709" chroma_location="left" field_order="progressive" refs="1" is_avc="true" nal_length_size="4" id="0x1" r_frame_rate="30/1" avg_frame_rate="30/1" time_base="1/15360" start_pts="0" start_time="0000000" duration_ts="388608" duration="25300000" bit_rate="964695" bits_per_raw_sample="8" nb_frames="759" extradata_size="39">
<disposition default="1" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0" timed_thumbnails="0" captions="0" descriptions="0" metadata="0" dependent="0" still_image="0"/>
<tag key="language" value="und"/>
<tag key="handler_name" value="VideoHandler"/>
<tag key="vendor_id" value="[0][0][0][0]"/>
</stream>
<stream index="1" codec_name="aac" codec_long_name="AAC (Advanced Audio Coding)" profile="LC" codec_type="audio" codec_tag_string="mp4a" codec_tag="0x6134706d" sample_fmt="fltp" sample_rate="44100" channels="2" channel_layout="stereo" bits_per_sample="0" id="0x2" r_frame_rate="0/0" avg_frame_rate="0/0" time_base="1/44100" start_pts="0" start_time="0000000" duration_ts="1133511" duration="25703197" bit_rate="72863" nb_frames="1107" extradata_size="2">
<disposition default="1" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0" timed_thumbnails="0" captions="0" descriptions="0" metadata="0" dependent="0" still_image="0"/>
<tag key="language" value="und"/>
<tag key="handler_name" value="SoundHandler"/>
<tag key="vendor_id" value="[0][0][0][0]"/>
</stream>
</streams>
</ffprobe>
从输出的内容可以看到,输出的内容格式为XML格式,如果原有的业务本身就可以解析XML格式,那么就不需要更改解析引擎,直接将输出内容输出为XML格式即可,解析引擎解析Packet信息是会更方便。
输出INI格式:
输出FLAT格式:
输出JSON格式:
输出CSV格式:
通过各种格式的输出,可以使用对应的绘图方式绘制出可视化图形。
CSV格式输出后可以使用Excel打开表格形式
可以在命令行中自行输出,输出的frame信息全部为视频相关的信息。
使用ffprobe还可以查看很多信息,我们可以通过本节介绍的help方法查看更多更详细的信息
在FFmpeg中通常使用ffplay作为播放器,其实ffplay同样也可作为很多音视频的图形化分析工具,通过ffplay可以看到视频图像的运动估计方向、音频数据的波形等,以下将介绍更多参数并举例说明。
1)ffplay常用参数
ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎、format引擎,以及filter引擎的工具,并且还可以进行可视化的媒体参数分析。其可以通过ffplay --help进行查看:
Simple media player
usage: ffplay [options] input_file
Main options:
-L show license
-h topic show help
- topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-dispositions show available stream dispositions
-colors show available color names
-loglevel loglevel set logging level
-v loglevel set logging level
-report generate a report
-max_alloc bytes set maximum size of a single allocated block
-sources device list sources of the input device
-sinks device list sinks of the output device
-x width force displayed width
-y height force displayed height
-s size set frame size (WxH or abbreviation)
-fs force full screen
-an disable audio
-vn disable video
-sn disable subtitling
-ss pos seek to a given position in seconds
-t duration play "duration" seconds of audio/video
-bytes val seek by bytes 0=off 1=on -1=auto
-seek_interval seconds set seek interval for left/right keys, in seconds
-nodisp disable graphical display
-noborder borderless window
-alwaysontop window always on top
-volume volume set startup volume 0=min 100=max
-f fmt force format
-window_title window title set window title
-af filter_graph set audio filters
-showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT)
-i input_file read specified file
-codec decoder_name force decoder
-autorotate automatically rotate video
这只是Main options里面的部分,另外还有Advanced options,AVCodecContext AVOptions等等很多内容。就上述帮助信息的输出所示,有些是前面已经介绍过的参数,这里就不再一一赘述,一些未介绍的参数说明见下表
常见参数可以手动进行尝试,下面列举几个示例。
如果希望从视频的第5秒开始播放,播放5秒钟的文件,则可以使用如下命令
如果希望视频播放时播放器的窗口显示标题为自定义标题,则可以使用如下命令
如果希望使用ffplay打开网络直播流,则可以使用如下命令:
可以看出ffplay可以支持的协议有多种,ramp,rtmp,>
rtsp流在主流浏览器并不支持直接播放。比如大华的视频流:rtsp://admin:123456@
19216810129/cam/realmonitorchannel=1&subtype=0,用vlc可以直接播放。但在浏览器会报ERR_UNKNOWN_URL_SCHEME。那如何在浏览器中播放呢。
以下列出几种方案。
1、安装插件(chrome最新版基本都不支持)
类如:kurento,vlc插件(谷歌浏览器版本41以下),vgx插件(不支持高版本,chrome720版本可用)等。
2、安装软件(中间件,基本都付费)
类如:Appemit(调用vlc插件播放rtsp),可以免安装的,目前只能windows,免费版会有提示。
猿大师中间件(底层调用VLC的ActiveX控件,实现在主流浏览器网页中内嵌播放多路RTSP的实时视频流),中间件收费的。
PluginOK(牛插)中间件。底层调用ActiveX控件VlcOcxdll。(商业用途需付费使用)
3、服务器拉流转发及协议转换
示意图如下所示:
推流--------------服务器转发--------------拉流
方法一览:
a,vlc软件串流到>
一、FFmpeg推RTMP流准备工作
首先确保自已已经安装了nginx + rtmp服务器。
打开配置文件nginxconf
完成如下配置
nginx配置1
如果没有nginx + rtmp服务器,请阅读我的另一篇文章
Mac搭建nginx+rtmp服务器
二、FFmpeg推流
1推流MP4文件
视频文件地址:/Users/xu/Desktop/bangbangbangmp4
推流拉流地址:rtmp://localhost:1935/rtmplive/home
acc:RTMP的音频格式
flv: RTMP的视频格式
ffmpeg -re -i /Users/xu/Desktop/bangbangbangmp4-vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
设置推流2
输入命令行后,暂时先不要点回车,等设置好本地拉流后,再进行推流。
2本地拉流MP4文件
打开VLC播放器
VLC3
设置播放地址
设置播放地址4
设置拉流地址
rtmp://localhost:1935/rtmplive/home
拉流地址5
开始推流,点击open后开始播放。
FFmpeg推流成功6
推流成功!
三、用ffmpeg推流桌面以及推流摄像头进行直播
1如果希望将桌面录制或者分享,可以使用命令行如下:
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home
这个只能够推桌面。
2如果需要桌面+麦克风,比如一般做远程教育分享 命令行如下:
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
这个可以推桌面+麦克风。
3如果需要桌面+麦克风,并且还要摄像头拍摄到自己,比如一般用于互动主播,游戏主播,命令行如下
ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
这个可以推桌面+麦克风,并且摄像头把人头放在界面下面
Snip20160713_12png
四、FFmpeg常用基本命令
1分离视频音频流
ffmpeg -i input_file -vcodeccopy-an output_file_video//分离视频流ffmpeg -i input_file -acodeccopy-vn output_file_audio//分离音频流
2视频解复用
ffmpeg–itestmp4 –vcodeccopy–an–fm4vtest264ffmpeg –itestavi –vcodeccopy–an–fm4vtest264
3视频转码
ffmpeg –i testmp4 –vcodec h264 –s352278–an –f m4v test264//转码为码流原始文件ffmpeg –i testmp4 –vcodec h264 –bf0–g25–s352278–an –f m4v test264//转码为码流原始文件
ffmpeg –i testavi -vcodec mpeg4 –vtag xvid –qsame test_xvidavi//转码为封装文件
-bf B帧数目控制
-g 关键帧间隔控制
-s 分辨率控制
4视频封装
ffmpeg –i video_file –i audio_file –vcodeccopy–acodeccopyoutput_file
5视频剪切
ffmpeg –i testavi –r1–f image2 image-%3djpeg//提取ffmpeg -ss0:1:30-t0:0:20-i inputavi -vcodec copy -acodec copy outputavi//剪切视频
-r 提取图像的频率
-ss 开始时间
-t 持续时间
6视频录制
ffmpeg –i rtsp://1921683205:5555/test –vcodec copy outavi
7YUV序列播放
ffplay -f rawvideo -video_size1920x1080 inputyuv
8YUV序列转AVI
ffmpeg–swh–pix_fmtyuv420p–iinputyuv –vcodecmpeg4outputavi
9常用参数说明:
主要参数:
i 设定输入流
f 设定输出格式
ss 开始时间
视频参数:
b 设定视频流量,默认为200Kbit/s-r 设定帧速率,默认为25
s 设定画面的宽与高-aspect 设定画面的比例
vn 不处理视频-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
ar 设定采样率
ac 设定声音的Channel数
acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器an 不处理音频
import javaioFile;
import javautilArrayList;
import javautilCalendar;
import javautilList;
public class ConvertVideo {
private final static String PATH = "c:\\ffmpeg\\input\\cmp4";
public static void main(String[] args) {
if (!checkfile(PATH)) {
Systemoutprintln(PATH + " is not file");
return;
}
if (process()) {
Systemoutprintln("ok");
}
}
private static boolean process() {
int type = checkContentType();
boolean status = false;
if (type == 0) {
Systemoutprintln("直接将文件转为flv文件");
status = processFLV(PATH);// 直接将文件转为flv文件
} else if (type == 1) {
String avifilepath = processAVI(type);
if (avifilepath == null)
return false;// avi文件没有得到
status = processFLV(avifilepath);// 将avi转为flv
}
return status;
}
private static int checkContentType() {
String type = PATHsubstring(PATHlastIndexOf("") + 1, PATHlength())
toLowerCase();
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
if (typeequals("avi")) {
return 0;
} else if (typeequals("mpg")) {
return 0;
} else if (typeequals("wmv")) {
return 0;
} else if (typeequals("3gp")) {
return 0;
} else if (typeequals("mov")) {
return 0;
} else if (typeequals("mp4")) {
return 0;
} else if (typeequals("asf")) {
return 0;
} else if (typeequals("asx")) {
return 0;
} else if (typeequals("flv")) {
return 0;
}
// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
// 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式
else if (typeequals("wmv9")) {
return 1;
} else if (typeequals("rm")) {
return 1;
} else if (typeequals("rmvb")) {
return 1;
}
return 9;
}
private static boolean checkfile(String path) {
File file = new File(path);
if (!fileisFile()) {
return false;
}
return true;
}
// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式
private static String processAVI(int type) {
List<String> commend = new ArrayList<String>();
commendadd("c:\\ffmpeg\\mencoder");
commendadd(PATH);
commendadd("-oac");
commendadd("lavc");
commendadd("-lavcopts");
commendadd("acodec=mp3:abitrate=64");
commendadd("-ovc");
commendadd("xvid");
commendadd("-xvidencopts");
commendadd("bitrate=600");
commendadd("-of");
commendadd("avi");
commendadd("-o");
commendadd("c:\\ffmpeg\\output\\aavi");
try {
ProcessBuilder builder = new ProcessBuilder();
buildercommand(commend);
builderstart();
return "c:\\ffmpeg\\output\\aavi";
} catch (Exception e) {
eprintStackTrace();
return null;
}
}
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
private static boolean processFLV(String oldfilepath) {
if (!checkfile(PATH)) {
Systemoutprintln(oldfilepath + " is not file");
return false;
}
// 文件命名
Calendar c = CalendargetInstance();
String savename = StringvalueOf(cgetTimeInMillis())+ Mathround(Mathrandom() 100000);
List<String> commend = new ArrayList<String>();
commendadd("c:\\ffmpeg\\ffmpeg");
commendadd("-i");
commendadd(oldfilepath);
commendadd("-ab");
commendadd("56");
commendadd("-ar");
commendadd("22050");
commendadd("-qscale");
commendadd("8");
commendadd("-r");
commendadd("15");
commendadd("-s");
commendadd("600x500");
commendadd("c:\\ffmpeg\\output\\aflv");
try {
Runtime runtime = RuntimegetRuntime();
Process proce = null;
String cmd = "";
String cut = " c:\\ffmpeg\\ffmpegexe -i "
+ oldfilepath
+ " -y -f image2 -ss 8 -t 0001 -s 600x500 c:\\ffmpeg\\output\\"
+ "ajpg";
String cutCmd = cmd + cut;
proce = runtimeexec(cutCmd);
ProcessBuilder builder = new ProcessBuilder(commend);
buildercommand(commend);
builderstart();
return true;
} catch (Exception e) {
eprintStackTrace();
return false;
}
}
}
以上就是关于我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写全部的内容,包括:我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写、FFmpeg工具、rtsp流浏览器播放方案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)