美文网首页
7.ffmpeg常用参数

7.ffmpeg常用参数

作者: LucXion | 来源:发表于2023-06-14 00:00 被阅读0次
    一、音视频转码、转封装

    ffmpeg [第一个输入文件对应的解析参数] -i 第一个输入文件名 [第二个输入文件对应的解析参数 ] -i 第二个输入文件名 [如果有第三个文件输入] [-i] [如果有第三个文件] [第一个输出文件对应的参数] [第一个输出文件名] [第二个输出文件对应的参数] [第二个输出文件名] [第三个输出文件对应的参数] [第三个输出文件名]

    /**
    ffmpeg 不需要指定 -o 输出
    -i i.mp4 :指定输入的文件
    a.mp4:输出文件a.mp4,并使用默认编码
    -vcodec mpeg4 b.mp4: 输出文件b.mp4,并制定视频流使用 mpeg4 编码
    
    输出完成后,可查询a.mp4、b.mp4的视频流格式信息来验证
     $ ffprobe -i a.mp4 -show_streams
    encoder         : Lavf60.3.100 (编码器)
    a.mp4 的 Streams 信息:codec_name=H.264
    b.mp4 的 Streams 信息:codec_name=mpeg4
    
    也可以只转封装不转码,但如果视频的音频流不是 wav格式,那么这种只转封装不转码的方式会,会造成信息的缺失
    ffmpeg -i i.mp4 -acodec copy a_audio.wav 
    正确的转码:pcm_s16le 是一种无损音频编码格式。-ar 选项指定音频采样率,44100 表示 44.1 kHz
    ffmpeg -i i.mp4 -acodec pcm_s16le -ar 44100 ai.wav
    */
    ffmpeg -i i.mp4 a.mp4 -vcodec mpeg4 b.mp4
    
    二、查看帮助信息
    ffmpeg --help
    // 输出全部帮助信息
    ffmpeg -h full
    
    // type=name 的方式查看帮助信息
    // 只输出 flv格式封装相关的格式信息
    ffmpeg -h muxer=flv
    // 只查看编码的对应信息
    ffmpeg -h encoder=libx264
    // 查找 name  $ ffmpeg --help   输出信息中的 Print help / information / capabilities: -muxers , 然后 ffmpeg -muxers 就可以看到所有支持的封装格式
    //  确认机器上当前安装的 FFmpeg 中是否涵盖了 nvidia 的 H.264 编码器。
    ffmpeg -encoders|grep H.264
    
    
    三、FFmpeg 公共基础参数
    • 输出日志: $ffmpeg -report // ffmpeg -report -v debug 在调试模式下运行 FFmpeg,输出详细的调试信息,以便用户诊断和解决问题
    • -ss 来定位文件的开始时间,指定的位置最好是关键帧对应的 pts 位置

    -ss 放在 -i 参数左侧,快,但是定位通常不准确,但如果我们把 -ss 的时间点位设置为关键帧对应的点位,那定位就是准确的。

    • -t 来规定输出文件时间长度,-t 设置为下一个关键帧减去当前关键帧位置的时间长度,这样就能完成切片了
    • 使用 -codec:v copy -an 去掉音频,从而达到分离音视频的目的。
    • -metadata 参数来设置 metadata。
     $ ffmpeg -f lavfi -i testsrc=s=176x144 -metadata title="This Is A Test" -t 2 out.mp4
    
    • -filter_complex 参数可以将音视频混合在一条参数字符串里进行操作,也可以输入、输出多个视频流和音频流。如果滤镜字符串太长的话,一条命令行可能会遇到很多麻烦,例如命令行支持的输入内容长度有最长限制,从而导致无法输入完整的 FFmpeg 命令参数,这时我们可以考虑使用外挂 filter 脚本来处理,使用参数 -filter_script 能够解决这些问题。

    • -copytb 参数设定 timebase 与输入的相同,确保时间戳不会跳变,当然这么做会有一定的风险,毕竟视频的 MPEGTS 封装格式与 MP4 的封装格式对应的 timebase 还是有差别的,如果强制使用相同的 timebase 则会引起时间戳间隔相关问题,严重的话甚至会引起丢帧。-force_key_frames 在做编码的时候可以根据这个参数做强制关键帧设定,-force_key_frames 支持表达式方式处理。

    四、视频操作部分
    • -r:v 设置视频的帧率;
    • -vb 设置视频码率;
    • -vframes 设置视频输出的帧数;
    • -aspect 设置视频的宽高比;
    • -vn 关闭视频流处理操作,也就是屏蔽视频流;
    • -vf 给视频做简单滤镜处理,简单滤镜处理一般不支持多图层、多输入、多输出的滤镜。
    五、音频操作部分
    • -ar 设置音频采样率;
    • -ab 设置音频码率;
    • -aframes 设置音频输出的帧数;
    • -ac 设置音频的声道数量-an 关闭音频流处理操作,也就是屏蔽音频流
    • -af 给音频做简单滤镜处理,简单滤镜处理一般不支持多图层、多输入、多输出的滤镜;
    • -vol 设置音频的音量。

    相关文章

      网友评论

          本文标题:7.ffmpeg常用参数

          本文链接:https://www.haomeiwen.com/subject/xndhydtx.html