ffmpeg & ffplay & ffprobe

596 阅读6分钟

ffmpeg:

  • FFmpeg是一个开源的多媒体框架,提供了处理音频、视频和流媒体的工具和库。

  • 它可以用于各种音视频处理任务,如转码、解码、编码、剪辑、合并等。

  • FFmpeg可以通过命令行或API进行使用。

  • 示例命令:

    • 转码视频:ffmpeg -i input.mp4 output.avi
    • 提取音频:ffmpeg -i input.mp4 -vn output.mp3
    • 转码音频:ffmpeg -i input.wav -acodec mp3 output.mp3
    • 截取视频:ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:05 output.mp4
    • 更多使用方式和选项,请参考FFmpeg的官方文档。
  • 【常见用例】

    • ffmpeg -i input.wav -c copy output.wav

      • 在上述命令中,input.wav 是输入音频文件的路径,output.wav 是要输出到的文件路径。
      • 通过 -c copy 参数,它将以无损复制的方式将音频流从输入文件复制到输出文件。
    • ffmpeg -f s16le -ar 44100 -ac 2 -i input.bin output.wav

      • 上述命令中的 input.bin 是你的音频 .bin 文件的输入文件名,
      • output.wav 是你希望生成的输出音频文件名(可以自定义文件名和格式)。
      • 这里假设音频采样率为 44100 Hz,声道数为 2(立体声),
      • 采样格式为有符号 16 位小端字节顺序(s16le)。
    • ffmpeg -i input_file

      • 查看音频流信息:使用以下命令查看音频流的信息
    • ffmpeg -i input_file -acodec pcm_s16le output_file.wav

      • 解码音频流:使用以下命令解码音频流
      • 此命令将音频流解码为无损的 PCM (pulse-code modulation) 格式
    • ffmpeg -i input.mp4 output.avi

      • 转码视频
    • ffmpeg -i input.mp4 -vn output.mp3

      • 提取音频
    • ffmpeg -i input.wav -acodec mp3 output.mp3

      • 转码音频
    • ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:05 output.mp4

      • 截取视频
      • 尝试使用 -ss 参数来指定要提取的音频的开始时间
      • 以及使用 -t 参数来指定要提取的音频的持续时间
    • ffmpeg -i input.g726 -acodec pcm_s16le -ar 44100 output.wav

      • 将 G.726 编码的音频解码为原始音频数据
      • -i input.g726:指定输入文件为 input.g726,即 G.726 编码的音频文件。
      • -acodec pcm_s16le:指定音频编解码器为 pcm_s16le,这是一个无损线性 PCM 格式,16位采样。
      • -ar 44100:指定音频采样率为 44100 Hz,即标准的 CD 音质采样率。
      • output.wav:指定输出文件名为 output.wav,即解码后的原始音频数据保存为 WAV 格式文件。
    • ffmpeg -i input.mov -vn -acodec copy output.aac

      • 要提取一个 .mov 文件中的音频流
      • -i input.mov:指定输入文件为 input.mov,即 .mov 格式的视频文件。
      • -vn:禁用视频流,只处理音频流。
      • -acodec copy:指定音频编解码器为 copy,表示直接复制音频流而不进行重新编码。
      • output.aac:指定输出文件名为 output.aac,即提取的音频流保存为 AAC 格式文件。
    • ffmpeg -i input.mov -map 0:a -c:a copy output.wav

      • .mov 文件中的 pcm_s16le 音频流提取出来并保存为音频文件
      • 使用 -map 参数选择了输入文件的音频流,并使用 -c:a copy 参数进行音频流的复制
      • pcm_s16le 是无损音频编码格式,直接复制即可将其提取出来
    • ffmpeg -i input.mov -map 0:a -c:a pcm_s16le output.wav

      • 要将 .mov 文件中的音频流提取为 LPCM 格式

ffplay:

  • ffplay是FFmpeg提供的一个简单的媒体播放器。

  • 它可以播放各种音频和视频文件,并提供基本的播放控制功能。

  • 示例命令:

    • 播放视频:ffplay input.mp4
    • 播放音频:ffplay input.mp3
    • 指定起始时间播放:ffplay -ss 00:00:10 input.mp4
    • 更多使用方式和选项,请参考FFmpeg的官方文档。
  • 【常见用例】

    • ffplay -f g726 input.g726

      • 使用FFplay通过命令行来播放.g726音频文件
    • ffplay -f s16le -ar 44100 -ac 2 -i audio.raw

      • 播放原始音频数据

      • -f s16le:指定音频数据的格式为有符号 16 位小端格式。

      • -ar 44100:指定音频数据的采样率为 44100 Hz。

      • -ac 2:指定音频数据的声道数为 2(立体声)。

      • -i audio.raw:指定输入的音频文件为 audio.raw,这里假设音频文件为原始 PCM 数据。

ffprobe:

  • ffprobe是FFmpeg的一个工具,用于分析音视频文件的元数据和技术细节。

  • 它可以提供有关输入文件的详细信息,如帧率、分辨率、编码格式、码率等。

  • 【可选参数】

    • -show_format:显示多媒体文件的格式信息,包括文件名、时长、比特率等。
    • -show_streams:显示多媒体文件的流信息,包括视频流、音频流、字幕流等,以及每个流的详细信息。
    • -show_packets:显示多媒体文件中的数据包信息,包括每个数据包的时刻、大小、持续时间等。
    • -show_frames:显示多媒体文件中的帧信息,包括每个帧的时刻、类型、位置等。
    • -show_programs:显示多媒体文件中的节目信息,包括节目编号、标题、描述等。
    • -show_chapters:显示多媒体文件中的章节信息,包括章节编号、开始时间、结束时间等。
    • -show_versions:显示FFmpeg和相关库的版本信息。
    • -show_data:显示多媒体文件中的数据信息,包括每个流的数据大小、平均比特率等。
    • -of xml:选项可以方便地将ffprobe的输出结果保存为XML文件
  • 【属性解释】

    • media_type="audio":表示该帧是音频帧。
    • stream_index="1":表示该音频帧所属的音频流的索引。
    • key_frame="1":表示该音频帧是关键帧。
    • pts="7360"pts_time="0.920000":表示该音频帧的显示时间戳(Presentation Timestamp)以及以秒为单位的显示时间。
    • pkt_dts="7360"pkt_dts_time="0.920000":表示该音频帧的解码时间戳(Decoding Timestamp)以及以秒为单位的解码时间。
    • best_effort_timestamp="7360"best_effort_timestamp_time="0.920000":表示该音频帧的最佳估计时间戳以及以秒为单位的最佳估计时间。
    • pkt_duration="320"pkt_duration_time="0.040000":表示该音频帧的持续时间以及以秒为单位的持续时间。
    • duration="320"duration_time="0.040000":表示该音频帧的总时长以及以秒为单位的总时长。
    • pkt_pos="163801":表示该音频帧在媒体文件中的位置(字节偏移)。
    • pkt_size="640":表示该音频帧的数据包大小(字节数)。
    • sample_fmt="s16":表示该音频帧的采样格式为有符号 16 位整数(signed 16-bit)。
    • nb_samples="160":表示该音频帧中的采样点数量。
    • channels="2":表示该音频帧的声道数量。
    • channel_layout="stereo":表示该音频帧的声道布局为立体声。
  • 【常见用例】 

    • 显示每一帧的信息:ffprobe -show_frames input_file

    • 显示文件信息:ffprobe input.mp4

    • 显示所有流信息:ffprobe -show_streams input.mp4

    • 显示音频流信息:ffprobe -show_streams -select_streams a input.mp4

    • 显示视频流信息:ffprobe -show_streams -select_streams v input.mp4

    • ffprobe -of json -i input.mp4

      • 要以 JSON 格式输出信息