AV

FFmpeg常用命令

2017-09-23  本文已影响0人  vincentgemini

写在前面:

今天往移动硬盘上拷电影的时候忽然遇见文件过大无法拷贝的问题。因为一个移动硬盘如果分区为NTFS格式,那么就不能在MacOS上进行写操作,可是如果用FAT格式,虽然可以同时在Windows和MacOS上进行读写操作,但是单个文件的大小在4G以内。于是就开始在晚上搜索Mac上如何分割视频,可是大多数工具不是不好用就是需要付费。无意之间,发现了ffmpeg -ss 00:00:00 -i input.mp4 -c copy -t 1200 output.mp4命令。这不是FFmpeg么,正巧Mac上也装了FFmpeg索性就试了试,太NB了,直接把视频裁剪了。于是,就寻思看看FFmpeg到底还能做什么,不查不知道,一查吓一跳啊,功能真多,真全啊。

命令格式:

ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
1、参数选项:
(1) -an: 去掉音频
(2) -acodec: 音频选项, 一般后面加copy表示拷贝
(3) -vcodec:视频选项,一般后面加copy表示拷贝
2、格式:
(1) h264: 表示输出的是h264的视频裸流
(2) mp4: 表示输出的是mp4的视频
(3)mpegts: 表示ts视频流
如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄来处理)就会起作用。作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。(by ternence.hsu)

视频转换

(上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用,同时编码到几种格式并且在输入流和输出流之间建立映射)

(如果要转换为3GP格式,则ffmpeg在编译时必须加上–enable-amr_nb –enable-amr_wb,详细内容可参考:转换视频为3GPP格式)

(target pal-dvd : Output format ps 2000000000 maximum size for the output file, in bits (here, 2 Gb) aspect 16:9 : Widescreen)

(This command will transform all the images from the current directory (named image1.jpg, image2.jpg, etc...) to a video file named video.mpg.)

(This command will generate the files named image1.jpg, image2.jpg, ... ;The following image formats are also availables : PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.)

(-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中;如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。)

(使用该指令可以压缩出比较清晰,而且文件转小的H.264视频文件)

网络推送

视频拼接

图像相关

音频处理

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

其他:

  1. 分离视频音频流

    ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
    ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流
    
  2. 视频解复用

    ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
    ffmpeg –i test.avi –vcodec copy –an –f m4v test.264
    
  3. 视频转码

    ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264              //转码为码流原始文件
    ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264  //转码为码流原始文件
    ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            //转码为封装文件
    

-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

  1. 视频封装

    ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
    
  2. 视频剪切

    ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        //提取图片
    ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切视频
    

-r 提取图像的频率,-ss 开始时间,-t 持续时间

  1. 视频录制

    ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
    
  2. YUV序列播放

    ffplay -f rawvideo -video_size 1920x1080 input.yuv
    
  3. YUV序列转AVI

    ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi
    
  4. 切割ts分片

    ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 6 -hls_time 5 output1.m3u8
    

常用参数说明:

主要参数:

-i 设定输入流
-f 设定输出格式
-ss 开始时间

视频参数:

-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数:

-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

参考:
ffmpeg 常用命令汇总
FFmpeg常用基本命令

更多:
浮生若夢♬為歡幾何

上一篇下一篇

猜你喜欢

热点阅读