FFmpeg音频视频转换

FFmpeg是一个开源的跨平台音视频处理工具和多媒体框架。它可以用于处理音频、视频、字幕等多媒体数据,支持多种音视频格式的转码、编辑、解码、编码和流媒体传输等操作。

应用场景:

  1. 视频转码:将视频从一种格式转换为另一种格式,例如将MP4转换为MKV或WebM。
  2. 音频转码:将音频从一种格式转换为另一种格式,例如将WAV转换为MP3或AAC。
  3. 视频剪辑和合并:对视频进行剪辑、裁剪和合并,实现视频编辑功能。
  4. 音频处理:调整音频的音量、混音、降噪等操作,用于音频编辑和处理。
  5. 视频处理:调整视频的分辨率、帧率、比特率,添加水印、滤镜等操作,用于视频编辑和处理。
  6. 视频流处理:将实时的音视频流传输到网络或服务器,用于实时视频直播和流媒体传输。
  7. 音频流处理:将实时的音频流传输到网络或服务器,用于实时音频直播和流媒体传输。
  8. 屏幕录制:通过FFmpeg可以实现对屏幕进行录制,并将录制的视频流保存为文件或实时传输到网络。

FFmpeg常用参数

FFmpeg常用参数的取值枚举:

  1. 输入和输出参数:
    • -i input_file: 输入文件路径,常见的格式如video.mp4audio.wav等。
    • output_file: 输出文件路径,通常使用的格式如output.mp4output.mkv等。
  2. 媒体流处理参数:
    • -map: 输入流或输出流的映射,常用的取值如0:00:11:0等。
    • -vn: 禁用视频流,通常不需要取值。
    • -an: 禁用音频流,通常不需要取值。
    • -sn: 禁用字幕流,通常不需要取值。
  3. 视频参数:
    • -vcodec codec: 视频编解码器,常见的取值如h264libx265vp9等。
    • -r fps: 视频帧率,通常的取值如2530等。
    • -s size: 视频分辨率,常见的取值如1920x10801280x720等。
    • -b:v bitrate: 视频比特率,常见的取值如1000k2M等。
    • -c:v copy: 复制视频流,无需重新编码,通常不需要额外取值。
  4. 音频参数:
    • -acodec codec: 音频编解码器,常见的取值如aacmp3opus等。
    • -ar frequency: 音频采样率,常见的取值如4410048000等。
    • -ab bitrate: 音频比特率,常见的取值如128k256K等。
    • -ac channels: 音频通道数,通常的取值为1(单声道)或2(立体声)。
    • -c:a copy: 复制音频流,无需重新编码,通常不需要额外取值。
  5. 视频滤镜参数:
    • -vf filter_graph: 添加视频滤镜效果,常见的取值如scale=640:480用于调整视频大小。
  6. 音频滤镜参数:
    • -af filter_graph: 添加音频滤镜效果,常见的取值如volume=2.0用于增加音量。
  7. 格式参数:
    • -f format: 输出文件格式,常见的取值如mp4avimkv等。
  8. 其他参数:
    • -y: 覆盖输出文件而不询问,通常不需要额外取值。
    • -ss position: 从指定的时间位置开始处理输入文件,常见的取值如00:01:30表示从1分30秒处开始处理。
    • -t duration: 设置处理的时长,常见的取值如60表示处理60秒的内容。

请注意,具体的取值可能因使用场景和媒体文件的不同而有所变化,建议根据具体需要来选择合适的参数取值。同时,最好查阅最新的FFmpeg文档或使用ffmpeg -h命令来获取最准确的参数信息。

常用音/视频格式转换命令

以下是五种音频文件格式两两互相转换的命令:

  1. wav 转 mp3:ffmpeg -i input.wav -c:a libmp3lame output.mp3
  2. mp3 转 wav:ffmpeg -i input.mp3 -c:a pcm_s16le output.wav
  3. wav 转 pcm:ffmpeg -i input.wav -f s16le -acodec pcm_s16le output.pcm
  4. pcm 转 adpcm:ffmpeg -f s16le -i input.pcm -c:a adpcm_ima_wav output.adpcm
  5. wav 转 amr:ffmpeg -i input.wav -c:a amr_nb output.amr

这里的 -c:a 参数指定了音频编解码器,libmp3lame用于MP3,pcm_s16le用于无损PCM,adpcm_ima_wav用于ADPCM,amr_nb用于AMR-NB。同时,输出文件的扩展名可以决定输出的文件格式,例如.mp3代表MP3格式,.wav代表WAV格式,.pcm代表无损PCM格式,.adpcm代表ADPCM格式,.amr代表AMR格式。

注意:转换命令中的输入文件和输出文件路径需要根据实际文件名进行调整。另外,转换过程可能会导致音质损失,特别是从有损格式(如MP3)转换为无损格式(如WAV)。因此,建议根据具体需求慎重选择音频格式转换。

批量转换脚本

import os
import subprocess

def adpcm_to_wav(adpcm_file, wav_file):
    command = f'ffmpeg -i "{input_path}" -acodec pcm_s16le -ac 1 -ar 16000 "{output_path}" -y'
    subprocess.call(command, shell=True)

def mp3_to_wav(adpcm_file, wav_file):
    command = f'ffmpeg -i "{input_path}" -f wav "{output_path}"'
    subprocess.call(command, shell=True)

def adpcm_to_pcm(adpcm_file, pcm_file):
    # command = f'ffmpeg -i "{input_path}" -acodec pcm_s16le -ac 1 -ar 16000 "{output_path}" -y'
    # command = f'ffmpeg -i "{input_path}" -ac 1 -ar 16000 -ab 12.2k -y "{output_path}"'
    command = f'ffmpeg -i "{input_path}" -ac 1 -ar 16000 -f s16le "{output_path}"'
    subprocess.call(command, shell=True)


if __name__ == "__main__":
    adpcm_file_path = "amr"

    output_file_path = "wav"
    # output_file_path = "mp3"
    # output_file_path = "pcm"

    # 检查输出文件夹是否存在,如果不存在则创建
    if not os.path.exists(output_file_path):
        os.makedirs(output_file_path)

    counter = 0
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(adpcm_file_path):
        if filename.endswith('.amr'):
            input_path = os.path.join(adpcm_file_path, filename)
            output_path = os.path.join(output_file_path, os.path.splitext(filename)[0] + '.wav')

            # adpcm_to_wav(input_path, output_path)
            mp3_to_wav(input_path, output_path)
            # adpcm_to_mp3(input_path, output_path)
            # adpcm_to_pcm(input_path, output_path)

            counter += 1
            print(f'Converted {filename} to XXX format.')
            print(f'processed files: {counter}')

    print('Conversion completed.')
    print(f'Total files converted: {counter}')

常识补充

音频文件可以分为有损压缩格式和无损压缩格式。以下是常见的有损和无损音频文件格式:

  • 有损压缩格式
  1. MP3 (MPEG Audio Layer III): 最常见的音频格式之一,可以实现较高的压缩比,但会损失一定音质。
  2. AAC (Advanced Audio Coding): 在音质上相对于MP3有一定优势,常用于音乐流媒体和移动设备。
  3. WMA (Windows Media Audio): 主要由Windows媒体播放器使用,相对MP3具有类似的压缩性能。
  4. OGG (Ogg Vorbis): 一种开源音频格式,提供较高的音质和压缩效率。
  5. AMR (Adaptive Multi-Rate): 主要用于移动电话,适合语音通信,压缩率较高。
  6. ADPCM是一种有损压缩音频格式,通过差分编码实现音频数据的压缩。
  • 无损压缩格式
  1. FLAC (Free Lossless Audio Codec): 提供无损压缩,音质与原始音频文件完全一致,压缩比较高。
  2. ALAC (Apple Lossless Audio Codec): 苹果公司开发的无损音频格式,用于iTunes和苹果设备。
  3. WAV (Waveform Audio File Format): 无损格式,不进行任何压缩,保留了原始音频数据。
  4. AIFF (Audio Interchange File Format): 无损格式,常用于苹果设备和专业音频工作站。
  5. APE (Monkey’s Audio): 提供无损压缩,较高的压缩率,但不如FLAC流行。
  6. PCM是一种无损格式,适用于要求高保真音质的场景。

无损格式保留了原始音频数据,因此在质量上不会损失,但文件尺寸较大。而有损格式通过丢弃一部分音频信息来实现较高的压缩率,但在一定程度上会降低音质。根据实际需求,选择合适的音频格式很重要,例如对于音乐存档和专业音频工作,无损格式可能更合适;而对于普通用户和移动设备,常见的有损格式如MP3或AAC通常是更好的选择。

音频格式PCM和ADPCM的区别:

  1. PCM(Pulse Code Modulation):PCM是一种无损音频格式,它是数字音频的一种基本编码方式。在PCM格式中,音频信号被精确地采样和量化,并且不进行任何压缩,因此它完全保留了原始音频数据。PCM格式适用于需要高保真音质的场景,例如音乐制作、音频存档和专业音频处理。
  2. ADPCM(Adaptive Differential Pulse Code Modulation):ADPCM是一种有损压缩音频格式,通过差分编码实现音频数据的压缩。它使用差异值来表示音频样本之间的差异,从而减少了数据量。虽然ADPCM可以实现较高的压缩率,但在压缩的过程中会丢失部分音频信息,导致音质有损。ADPCM适用于对音质要求不高的场景,例如语音通话和一些低码率音频传输。

PCM是一种无损音频格式,完全保留原始音频数据,适用于高保真音质的场景;而ADPCM是一种有损压缩音频格式,通过差分编码实现较高的压缩率,但会损失一定的音质,适用于对音质要求不高的场景。

其他命令实践

【音频转换】
1.转换amr到mp3:
ffmpeg -i trans_wav_to.amr amr2mp3.mp3
2.转换amr到wav:
ffmpeg -i trans_wav_to.amr -ac 1 -ar 16000 -ab 12.2k -y trans_amr_to.wav
3.转换mp3到wav:
ffmpeg -i wav2mp3.mp3 -f wav test1.wav
4.转换wav到amr:
ffmpeg -i test.wav -acodec libopencore_amrnb -ab 256000 -ar 8000 -ac 1  trans_wav_to.amr
5.转换wav到mp3:
ffmpeg -i test.wav -f mp3 -acodec libmp3lame -y wav2mp3.mp3
6.pcm转为wav
ffmpeg -f f32le -acodec pcm_f32le -i test.pcm -ac 1 -ar 8000 -ab 256000 -y test.wav 

【视频转换】
1.转换wmv到mp4:
ffmpeg -i sample.wmv -vcodec libx264 -acodec aac out.mp4
2.抓取H264视频流:
ffmpeg -i sample.flv -vcodec copy -vbsf h264_mp4toannexb -an out.h264
2.1 vbsf为过滤方法,即将flv规定的H264组织方式转换回H264协议书规定的字节流格式  2.2 -an 禁掉源文件中的音频,因为出来的码流不需要音频  2.3 vcodec copy这个是必然的
3.将H264视频流转为mp4:
ffmpeg -i sample.h264 -f mp4 haha.mp4
4.接收rtsp并存为视频文件:
ffmpeg -rtsp_transport tcp -i rtsp://streaming1.osu.edu/media2/ufsap/ufsap.mov -vcodec copy -acodec copy -t 30 -f mp4 rtsp-out.mp4
4.1 -rtsp_transport tcp:指明传输方式是tcp方式(也可以是udp)
4.2 -t 30:指明我录制30秒
ffmpeg将音频或视频编码为AMR格式音频
Android编码的MP4音频格式可能为AMR,这时候用以下命令可以从MP4中直接提取AMR音频:
ffmpeg -i test.mp4 -c:a copy test.amr

【将其他格式的音频或视频转成AMR的命令】
新写法:ffmpeg -i test.mp4 -c:a libopencore_amrnb -ac 1 -ar 8000 -b:a 12.20k -y test.amr
旧写法:ffmpeg -i test.mp4 -acodec libopencore_amrnb -ac 1 -ar 8000 -ab 12.20k -y test.amr

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论