ffmpeg简单使用

发布时间 2023-09-05 07:58:09作者: strongmore

前言

FFmpeg 是视频处理最常用的开源软件。

它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。

操作注意

所有文件名不能包含中文或空格等特殊符号

将avi转成mp4

ffmpeg -i input_filename.avi -c:v copy -c:a copy -y output_filename.mp4

生成m3u8(索引文件)和ts文件

ffmpeg -i output_filename.mp4 -hls_time 10 -hls_list_size 0 -hls_segment_filename ./hls/lucene_%05d.ts ./hls/lucene.m3u8

ts文件转mp4

某些播放器对 ts 文件支持的不是很好,快进等功能会卡住

ffmpeg -i input_filename.ts -c:v copy -c:a copy -y output_filename.mp4

合并mp3

第一种方法

ffmpeg -i "concat:1.mp3|2.mp3" -c copy merge.mp3

第二种方法,创建mylist.txt文件

file C:/D-myfiles/testjar/ffmpeg/1.mp3
file C:/D-myfiles/testjar/ffmpeg/2.mp3
.\ffmpeg.exe -f concat -safe 0 -i C:/D-myfiles/testjar/ffmpeg/mylist.txt -c copy merge.mp3

copy表示直接复制,不经过重新编码(这样比较快),这种方式只能拼接相同编码的视频。

处理进度查询

.\ffmpeg.exe -progress progress.log -f concat -safe 0 -i C:/D-myfiles/testjar/ffmpeg/mylist.txt -c copy merge.mp3

ffmpeg会将处理进度保存到progress.log文件中。

常用的视频编码格式

  • H.262
  • H.264
  • H.265

常用的音频编码格式

  • MP3
  • AAC

查看视频和音频编码

ffprobe 1.mp3
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 64 kb/s (default)

编码方式为ACC(封装格式为MP4A)

ffprobe -v error -hide_banner -show_streams -of json -i 0.mp3
ffprobe -v error -hide_banner -select_streams a:0 -show_streams -of json -i 1.mp4 # 仅显示文件的音频流信息
ffprobe -v error -hide_banner -select_streams v:0 -show_streams -of json -i 1.mp4 # 仅显示文件的视频流信息

去除所有关于输入、元数据和持续时间,去除版本信息、build信息等,显示流信息,格式为json

{
    "streams": [
        {
            "index": 0,
            "codec_name": "mp3",
            "codec_long_name": "MP3 (MPEG audio layer 3)",
            "codec_type": "audio",
            "codec_time_base": "1/44100",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "sample_fmt": "s16p",
            "sample_rate": "44100",
            "channels": 2,
            "channel_layout": "stereo",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/14112000",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 11693019744,
            "duration": "828.587000",
            "bit_rate": "128000",
            "disposition": {
                "default": 0,
                "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
            }
        }
    ]
}

codec_name为编码名称,如果文件为视频,streams会有两条

aac转mp3

ffmpeg  -i 1.mp3 -acodec libmp3lame 2.mp3

合并mp3(不同编码格式)

尝试了使用ffmpeg拼接视频踩坑记录中的concat filetr用法,也不行,就算先将编码转换成mp3也不行。

花费了很久都没找到解决方法,可能ffmpeg能实现,但没找到具体的用法。

最终使用剪映(字节出品)来拼接音频,导出音频,终于解决了,虽然不太优雅。

参考

下载地址-github
ffmpeg官网
FFmpeg常用基本命令行-csdn
FFmpeg 视频处理入门教程-阮一峰
FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
ffprobe综合教程(内含7个示例)
ffmpeg mp4 mp3 wav flac webm aac ac3 ogg格式转换
使用ffmpeg拼接视频踩坑记录
ffmpeg concat video and mix audio
ffmpeg第1篇:日志级别控制、保存日志到指定文件、处理进度查询