赞
踩
ffplay -i test.mp4
说明: -i 后跟 要播放的文件名,·-i
也可以省略, ffplay播放过程中常用的快捷键如下:
快捷键 | 解释 | 快捷键 | 解释 |
---|---|---|---|
q / ESC | 退出播放 | p / SPACE | 暂停/恢复 |
f | 全屏/恢复 | m | 静音/恢复 |
主键盘9 / 小键盘 除号 | 降低音量 | 主键盘0 / 小键盘 乘号 | 增加音量 |
s | 跳到下一帧 | a | 切到下一路音频流 |
v | 切到下一路视频流 | t | 切到下一路字幕流 |
c | 切到下一路视频流/视频流/字幕流 | w | 视频模式/音频波形模式/RDFT显示音频波段 三种模式循环切换 |
← | 快退10s | → | 快进10s |
↓ | 快退60s | ↑ | 快进60s |
PgDn | 快退600s | PgUp | 快进600s |
注: RDFT ((Inverse) Real Discrete Fourier Transform)
ffplay -x 640 -y 480 -i test.mp4
说明:-x
指定窗口的宽度, -y
指定窗口的高度
ffplay -i test.mp4 -ss 0:0:0 -t 0:0:5
说明:-ss
指定播放的起始时间, -t
指定播放的时长,二者可配合使用,也可单独使用。
后面的参数可以是 ss:mm:hh
的形式,也可以是 s
的形式, 本例子表示只播放test.mp4
的前5s
ffplay -fs -i test.mp4
ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2
说明: 此处用到了 filter的功能
-vf
指定video filter
以及传递给video filter
的参数, n倍速度就是 setpts=PTS/n
,
-af
指定audio filter
以及传递给audio filter
的参数, n倍速度就是 atempo=n
这里不再扩展,有时间专门写一篇文件来介绍filters
,本例子中表示 两倍速度播放test.mp4的音频和视频
ffplay -i test.yuv -pixel_format yuv420p -video_size 352x288
说明: 播放YUV数据时,需要指定数据的宽高和颜色格式,这样ffmpeg才能正确地读取和渲染每一帧数据.
-pixel_format
指定yuv的颜色格式
-video_size
指定yuv的宽高
ffplay -i 44100_2_flt32le.pcm -f f32le -ac 2
说明:播放pcm数据时,必须指定pcm的demuxer和声道数
-f
指定使用 f32le demuxer(表示按照 小端的32-bit 浮点数的方式去渲染每一个音频sample)
-ac
指定声道数
如下表
命令 | 解释 | 选项 | 选项说明 |
---|---|---|---|
ffplay -fs input.mp4 | 全屏播放 | -fs | full screen, 全屏播放 |
ffplay -loop 5 input.mp4 | 循环播放5次 | -loop N | 循环播放N次, 如果N为-1, 为无限循环播放 |
ffplay -an input.mp4 | 静音播放 | -vn/-an/-sn | 不加载 视频/音频/字幕 播放 |
ffplay -vst 1 input.mp4 | 选择stream_id为1的视频播放 | -vst/-ast/-sst | 选择指定id的 视频/音频/字幕 流播放 |
如 mp4->mkv, 示例:
ffmpeg -i test.mp4 -vcodec copy -acodec copy -f matroska test.mkv
注1: -vcodec copy -acodec copy
等选项可以简化为 -codec copy
,进一步可简化为 -c copy
ffmpeg
会原封不动将video packet, audio packet
及subtitle packet(如果有的话)
拷贝到新的文件中。即:
ffmpeg -i test.mp4 -codec copy -f matroska test.mkv
注2:
-i 后面跟 input文件名字
-f 后面跟 output文件的封装格式
-vcodec 后跟指定的视频编码格式,若是copy,表示转码时不更改video packet的数据,编码格式与源文件相同
-acodec 后跟指定的音频编码格式,若是copy,表示转码时不更改audio packet的数据,编码格式与源文件相同
-subtitle 用法同 -vcodec -acodec
注3:
具体的封装协议代号可以通过
ffmpeg -muxers
命令来查看
$ffmpeg -muxers ffmpeg version N-91579-g243ecadad5 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) configuration: libavutil 56. 18.102 / 56. 18.102 libavcodec 58. 22.100 / 58. 22.100 libavformat 58. 17.101 / 58. 17.101 libavdevice 58. 4.101 / 58. 4.101 libavfilter 7. 26.100 / 7. 26.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 File formats: D. = Demuxing supported .E = Muxing supported -- E 3g2 3GP2 (3GPP2 file format) E 3gp 3GP (3GPP file format) E a64 a64 - video for Commodore 64 E ac3 raw AC-3 E adts ADTS AAC (Advanced Audio Coding) E adx CRI ADX E aiff Audio IFF E alaw PCM A-law …… E matroska Matroska E md5 MD5 testing E microdvd MicroDVD subtitle format E mjpeg raw MJPEG video E mkvtimestamp_v2 extract pts as timecode v2 format, as defined by mkvtoolnix E mlp raw MLP E mmf Yamaha SMAF E mov QuickTime / MOV E mp2 MP2 (MPEG audio layer 2) E mp3 MP3 (MPEG audio layer 3) E mp4 MP4 (MPEG-4 Part 14) ……
第二列就是我们要找的封装格式,如 3gp, aac这些
注4:
具体的编码协议代号可以通过
ffmpeg -codecs
命令来查看
$ffmpeg -encoders ffmpeg version N-91579-g243ecadad5 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) configuration: libavutil 56. 18.102 / 56. 18.102 libavcodec 58. 22.100 / 58. 22.100 libavformat 58. 17.101 / 58. 17.101 libavdevice 58. 4.101 / 58. 4.101 libavfilter 7. 26.100 / 7. 26.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 Encoders: V..... = Video A..... = Audio S..... = Subtitle .F.... = Frame-level multithreading ..S... = Slice-level multithreading ...X.. = Codec is experimental ....B. = Supports draw_horiz_band .....D = Supports direct rendering method 1 ------ V..... a64multi Multicolor charset for Commodore 64 (codec a64_multi) V..... a64multi5 Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5) V..... alias_pix Alias/Wavefront PIX image …… V..... flv FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1) V..... gif GIF (Graphics Interchange Format) V..... h261 H.261 V..... h263 H.263 / H.263-1996 V.S... h263p H.263+ / H.263-1998 / H.263 version 2 V..... h264_vaapi H.264/AVC (VAAPI) (codec h264) VF.... huffyuv Huffyuv / HuffYUV V..... jpeg2000 JPEG 2000 …… A..... aac AAC (Advanced Audio Coding) A..... ac3 ATSC A/52A (AC-3) A..... ac3_fixed ATSC A/52A (AC-3) (codec ac3) A..... adpcm_adx SEGA CRI ADX ADPCM A..... g722 G.722 ADPCM (codec adpcm_g722)
第二列就是我们要找的编码格式,如 h263, aac, ac3这些
同理,举一反三
查看所有的decoder
ffmpeg -decoders
查看所有支持的颜色格式
ffmpeg -pix_fmts
查看所有支持的采样格式
ffmpeg -sample_fmts
等等等等
ffmpeg -i 1.mp4 -i 2.mp4 -map 0:v -map 1:a -c:v copy -c:a copy -f mp4 out.mp4
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex “concat=n=2;v=1;a=1” -map [v] -map [a] -f mp4 out.mp4
2.2.1 创建一个txt文件,记录待处理的文件,如下:
···
file ‘D:\02-file\VID_00288.MP4’
file ‘D:\02-file\VID_00289.MP4’
file ‘D:\02-file\VID_00290.MP4’
file ‘D:\02-file\VID_00291.MP4’
file ‘D:\02-file\VID_00292.MP4’
file ‘D:\02-file\VID_00293.MP4’
file ‘D:\02-file\VID_00294.MP4’
file ‘D:\02-file\VID_00295.MP4’
file ‘D:\02-file\VID_00296.MP4’
file ‘D:\02-file\VID_00297.MP4’
file ‘D:\02-file\VID_00298.MP4’
file ‘D:\02-file\VID_00299.MP4’
file ‘D:\02-file\VID_00300.MP4’
···
2.2.2 运行转换命令
···
ffmpeg -f concat -safe 0 -i file.txt -c copy output.mp4
···
注意:为了防止ffmpeg不识别带中文字符的路径,最好加上 -safe 0 这个参数
PPT中插入的视频不能默认播放,必须手动点击才可以播放
但可以自动播放gif图片,故可以把视频文件转换成gif插入到PPT中,带来较好的用户体验
转普通gif ffmpeg -i input.mp4 output.gif
使用调色板转高清gif ffmpeg -i input.mp4 -vf split[pict][ref];[ref]palettegen[palette];[pict][palette]paletteuse -y output.gif
color=#FF0000>3.1 提取yuv数据
ffmpeg -i input -pix_fmt yuv420p -f rawvideo output.yuv
说明:
-pix_fmt 指定yuv的颜色格式, 可以使用如下命令来查看ffmpeg支持的颜色格式
ffmpeg -pix_fmts
-f 指定文件封装格式, 由于yuv是裸数据,没有封装格式,所以是rawvideo
注: 如果不指定文件封装格式, 则输出文件名必须以 .yuv或.rgb结尾,否则命令不生效.
即等价于
ffmpeg -i input -pix_fmt yuv420p output.yuv
除了ffplay可以播放YUV数据外,
也可以使用linux上的vooya来查看yuv数据
也可以window上可以使用其他yuv工具如 yuvview 来查看
有的文章中是将视频的转成一张张jpeg图片,之后再把第一张jpeg图片转成yuv,我想说这样的yuv经过二次编码,已经不是原有的yuv了
这种方法还不如使用 dd 命令来截取 3.1 中提取的yuv数据中的前 w*h*1.5 个字节的数据呢
我再介绍一种方法,使用 trim filter精确截取某一帧yuv数据
ffmpeg -i input -vf "trim=start_frame=0:end_frame=1" out.yuv
说明: 本例子截取了视频第一帧的yuv数据
start_frame: 起始帧的序号(从0开始)
end_frame: 结束帧的序号(不包含)
可以参考我的这篇文章中介绍的trim filter的用法
https://mp.csdn.net/mdeditor/88357015#
ffmpeg -i input -sample_fmt flt -f f32le output.pcm
说明:
-sample_fmt 指定pcm的sample格式,可以使用如下命令来查看ffmpeg支持的sample格式
ffmpeg -sample_fmts
-f 指定文件封装格式,
除了ffplay可以播放pcm数据外,
也可以使用linux上的Audacity来查看pcm数据
也可以window上可以使用其他工具如 cool edit 来查看
ffmpeg -f f32le -ar 44100 -ac 2 -i 44100_2_f32le_2s.pcm -acodec aac test.aac
说明:
-f 指定当前pcm数据的排布格式
-ar 指定编码时的采样率
-ac 指定编码时的通道数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。