• ffmpeg简介


    1. ffmpeg下载

    ffmpeg是一个开源软件,可以在官方平台下载。可以下载源码到具体平台编译,也可以直接下载某平台已编译好的软件。

    http://ffmpeg.org/download.html

    ffmpeg的使用资料也在官网下载。文档是html格式的英文文档,可以使用谷歌打开,打开时谷歌翻译,拿来做参考还可以。

    2. ffmpeg软件组件

    ffmpeg下载下来之后有三个组件。

    2.1     ffmpeg 媒体处理工具

    2.2     ffplay 媒体播放器(ffplay 123.mp4即可播放一个媒体文件)

    2.3     ffprobe 媒体流分析器(ffprobe 123.mp4即可分析该文件的详细属性)

    我们使用的主要是ffmpeg来处理视频源以获得我们想要的视频格式和类型。

    3. ffmpeg转码过程

     

     4. ffmpeg语法简介

    ffmpeg使用的语法格式如下:

    ffmpeg [global_options] {[input_file_options] -i ' INPUT_FILE'} ... {[output_file_options]' OUTPUT_FILE'} ...

    使用ffmpeg –h等命令可以查看ffmpeg语法帮助。

    从ffmpeg的帮助信息来看,ffmpeg有6个命令模块。

    4.1  打印信息(帮助/信息/能力值)

    4.2  全局参数(影响整个程序,而不是单个文件)

    4.3  每文件主要参数(文件的时间戳/元数据/帧数等信息)

    4.4  视频参数(视频的录制帧数/像素长款比/视频调控/采样率等)

    4.5  音频参数(音频的录制帧数/音频通道/采样率/过滤器等)

    4.6  字幕参数(设置字幕帧数/开关字幕/固定字幕长度/预置字幕等)

    详细的解读可以读帮助文档,也可以在linux系统下使用man ffmpeg看到更多的帮助信息。

    5. ffmpeg常用命令杂记

    5.1  视频格式转换

    ffmpeg将视频转换为FLV格式:

    ffmpeg.exe -i test.mp4 -ab 30 -ar 20000 -b 128K -r 25 -s 1920x1080 D: est.flv

    ffmpeg将视频转换为3GP格式:

    ffmpeg -i test.mp4 -y -b 30 -s sqcif -r 10 -acodec amr_wb -ab 24 -ac 1 -ar 20000 test.3gp

    转码解密的VOB:

    ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

    上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用。

    同时编码到几种格式并且在输入流和输出流之间建立映射:

    ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

    上面的命令行转换一个64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在输出流的顺序上定义了哪一路输入流是用于每一个输出流的。

    5.2 视频中的图片操作

    添加水印:

    ffmpeg -i test.mp4 -i watermark.png -filter_complex "overlay=10:10" test.mp4

    或(-vcodec libx264 可选):

    ffmpeg -i test.ts -vcodec libx264 -vf “movie=logo.png[wm]; [in][wm]overlay=10:10[out]” out.ts

    制作gif:

    ffmpeg -ss 00:00:01 -t 10 -i test.ts -vf scale=1000:-1 -f gif -r 5 5fps.gif

    截图:

    ffmpeg -i test.asf -y -f image2 -t 0.001 -s 320x240 a.jpg

    指定前30帧转换成一个Animated Gif:

    ffmpeg -i test.asf -vframes 30 -y -f gif test.gif

    截取指定时间的缩微图:

    ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 320x240 test.jpg

    5.3视频转换

    编码转换:

    ffmpeg -i test.ts -vcodec libx265 -x265-params lossless test1.ts

    改视频码率:

    ffmpeg -i input.avi -b:v 1500K output.mp4

    指定文件大小:

    ffmpeg -i input.mp4  -fs 20M  output.mp4

    改分辨率:

    ffmpeg -i input.mp4 -strict -2 -s 640x480 output.mp4

    调整为4:3的画面比例:

    ffmpeg -i test.mp4 -s 1920x1080 -aspect 4:3 output.mp4

    多个视频拼接:

    ffmpeg -i "concat:test1.ts|test2.ts|test3.ts|test4.ts" -c copy test5.ts

    分割视频:

    ffmpeg -ss 00:07:00 -t 00:58:58 -i test.mp4 -vcodec copy -acodec copy test1.mp4

    单独输出音/视频:

    单独输出视频(输出视频无声音):

    ffmpeg -i test.mp4 -vcodec copy -an testvideo.mp4

    单独输出音频(输出音频无画面):

    ffmpeg -i test.mp4 -vcodec copy -vn testaudio.mp3

    5.4 视频切片

    切片生成HLS文件:

    ffmpeg -re -i test.ts -codec:v libx264 -codec:a ac3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 0 -segment_time 10 out%03d.ts

    制作点播分片:

    ffmpeg -i input.mp4 -vcodec copy -acodec copy -hls_time 10 -hls_list_size 0 output.m3u8

    5.5 视频录制

    使用ffmpeg录像屏幕:

    ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 D:\test.avi

    重新调整视频尺寸大小:

    ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i D:\test.avi -s 800×600 D:\test-800-600.avi

    录制摄像头的信号:

    ffmpeg -f vfwcap -i 0 -r 25 -vcodec libx264 output.mp4

    录制视频同时切片:

    ffmpeg -f vfwcap -i 0 -codec:v libx264  -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 0 -segment_time 10 out%03d.ts

    5.6 ffmpeg推流

    格式:

    ffmpeg -i rtmp://*******(源地址) -c:v copy -c:a copy -f flv -y rtmp://*******(服务器地址)

    示例:

    ffmpeg  -loglevel 48 -v verbose -thread_queue_size 512 -threads 2 -max_delay 0   -re  -stream_loop -1 -i /test.mp4  -bufsize 10m -reorder_queue_size 10000  -c:v copy -c:a copy -bsf:a aac_adtstoasc -flags +global_header -flvflags aac_seq_header_detect -f flv rtmp://192.168.10.100:1935/default_tv/test

  • 相关阅读:
    Thinkphp学习笔记2-
    Thinkphp学习笔记1-URL模式
    WebApi-如何实现接口加密
    微信-.NET调用JS-SDK
    微信-JSSDK .NET版
    HTML-获取/修改html页面标题
    JS-获取图片地址
    微信-js sdk invalid signature签名错误 问题解决
    C++笔试题
    单链表反转的分析及实现
  • 原文地址:https://www.cnblogs.com/flishroom/p/13554841.html
Copyright © 2020-2023  润新知