常用FFmepg命令整理-多点整理少点搜索

近期频繁使用到 FFmpeg 相关命令,每次都要 google、chatGPT 搜一通,chatGPT还经常一本正经的给出错误答案,费了不少时间,干脆把经常用到的整理下,以后直接翻出来查看就行了。

主要常用到以下几方面命令

  1. 从音视频中截取一个片段
  2. 压缩音视频尺寸
  3. 从视频中移除音轨
  4. 音轨提取、分离、添加、替换相关命令
  5. 视频格式互相转换
  6. 音频格式互相转换
  7. 字幕合成与分离

音视频截取片段相关命令

从音频中截取一段音频

ffmpeg -i 1.mp3 -ss 00:00:00 -t 00:00:10 -acodec copy output.mp3

命令解释

-i example.mp3: 表示从文件example.mp3中读取源文件

-ss 00:00:10: 表示从文件开头开始寻找指定的时间段

-t 00:00:10: 则表示提取指定时间段后剩余的部分。

-acodec copy output.mp3: 指令使结果保存为新的 mp3 文件,这里不会对音频进行任何更改。

从视频中截取视频片段

ffmpeg -i 222.mp4 -ss 00:00:01 -t 00:00:10 outfile.mp4

命令解释

-i video1.mp4:指定要截取的视频文件。

-ss 00:00:01:跳过指定的时间点。跳到视频开始的地方即0:00:10。

-t 00:00:10:限制播放的时间间隔。只截取前10秒钟。

-o outfile.mp4:指定输出文件名。输出文件命名为 outfile.mp4。

该命令将会从视频1.mp4文件中截取前10秒钟的内容并将其输出成 outfile.mp4 文件,而不会对音频或编码有任何改动。

压缩相关

压缩视频分辨率

ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 1080x720 xx-out.mp4

命令解释

-y:强制覆盖原来的输出文件;

-i: 文件路径:指定输入视频文件;

-c:a copy:不进行任何修改,直接复制;

-c:v libx264:选择 libx264 解码器作为编解码器;

-profile:v: 设置质量编码选项,这条命令中选择 high 高质量

-r 30:指定帧率;

-crf 30:设置 CRCF (Coofficient Reduction Constant Factor) 值;

-s 1080x720:指定视频分辨率为 1080x720。

压缩wav

ffmpeg -i file.wav -flags +b:v 95.5k -r:v 24 -b:a libvorbisfile.vorbis file_result.flac

命令解释

-i:参数指示要转换的输入文件

-flags:设置为 +b:v 95.5k 表示将影片帧速率降到约为 95.5kHz,然后再对语音进行采样,最终得到的频率将会比原有的声音更加纯净。

-r:v 是一个设置影片帧速率参数,在这个例子中设置为 24,这意味着影片帧速率会减至 24kHz

-b:a 是指定将声讯编码为哪个格式,在这个例子中,设定为 libvorbisfile.vorbis 表示利用 Ogg Vorbis 标准编码。

移除音轨相关片段

从视频中移除第一个音轨

css 复制代码
ffmpeg.exe -i 1.mp4 -c:v copy -an output.mp4

命令解释

-c:v copy将视频轨道复制到output.mp4

-an告诉 FFmpeg不要复制音频

删除特定的音轨

命令的一般语法-map input_file_index:stream_type_specifier:stream_index

go 复制代码
ffmpeg.exe -i videoWithAudio.mp4 -map 0 -map 0:a:1 -copy videoOutput.mp4

命令解释

这个命令的作用是从videoWithAudio.mp4中的音频流分离出来并在videoOutput.mp4中直接复制一份与videoWithAudio.mp4一样的视频文件。它使用了以下三个命令:

-i videoWithAudio.mp4: 指定要处理的目标视频文件名称。

-map 0: 表示从目标视频中选择第一个音视频流。

-map 0:a:1: 表示从选择的第一个音视频流中选择第1个音视频子流。

-copy videoOutput.mp4: 将选取的音视频流复制到另一个名为videoOutput.mp4的新文件中。 因为选择了第一个音视频流和第1个音视频子流,所以整个音视频流都得到了分离了。

如果希望保留原有的音视频信息的话,只需要删除--map参数即可。

音轨提取、分离、添加、替换相关命令

从视频中提取出第一个音轨为音频文件

ffmpeg -i 1.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav output.wav

命令解释

-i 文件路径:指定输入音频和视频文件,在此示例中是名为 1.mp4 的视频文件;

-acodec pcm_s16le:指定输出声音格式为 PCM(无压缩),采样率是 16 kHz,比特率为 16 bit;

-f s16le:指定编码器模式以确保帧同步;

-ac 1:仅将第 1 个声道转换为 WAV;

-ar 16000:设置输出的音频速率为 16 kHz;

-f wav:指定输出格式为 WAV 流式文件。

css 复制代码
ffmpeg -i videoWithAudio.mp4 -vn -acodec copy onlyAudio.aac 

这个代表不改变音频编码,直接提取出音频文件aac,注意:如果是mp3或者wav,需要指定编码格式

less 复制代码
ffmpeg.exe -i videoWithAudio.mp4 -vn -c:a libmp3lame -q:a 1 onlyAudio.mp3

这个代表提取为 mp3 文件,-q:a:范围从 0-6,其中 0 是高质量音频,6 是低端。

ffmpeg -i input.mp4 -vcodec copy -acodec flac output.flac 提取为 flac 格式音频

将视频、音频完全独立分离出来

ffmpeg.exe -i videoWithAudio.mp4 -y -vcodec copy video.mp4 -acodec copy audio.mp3

命令解释

这个命令的功能是把视频WithAudio.mp4的视频信息复制到一个新的MP4文件video.mp4中,同时将音频信息转换成MP3格式放在一个新的MP3文件audio.mp3中。

-i: 视频WithAudio.mp4:指定输入的视频文件;

-y:强制覆盖原始文件,也就是说不创建备份文件;

-vcodec copy:指定输出视频信息码率模式;

-acodec copy:指定输出声音信息的编解码器方式。

注意这里的copy指的是无损压缩,也就是不会损失原始的信息。

在使用中添加音轨,即音视频合成

ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 videoWithAudio.mp4

命令解释

-map 0:v:0 选择第 0 个输入文件(我们的视频输入)的第 0 个轨道。

-map 1:a:0 选择第一个输入文件(我们的音频输入)的第 0 个音轨。

-c copy 将两个音轨(音频和视频)复制到输出而无需重新编码。如果您想重新编码,您可以使用适当的音频/视频编解码器和您选择的质量设置。

-i 选项传入输入_audio.mp3 文件,指定我们要获取音频的部分。

替换视频中的音频

命令的一般语法 是-map input_file_index:stream_type_specifier:stream_index. -map 1:a:2因此,您可以通过说因为编号从 0 开始来选择第二个输入的第三个音轨。

ffmpeg -i video_with_audio.mp4 -i newAudio.wav -map 0:0 -map 1:0 -c:v copy -c:a libmp3lame -q:a 1 -shortest video_with_newAudio.mp4

命令解释

-map 0:0 从第 1 个输入(视频)中选择第 0 个音轨

-map 1:0 从第 2 个输入(音频)中选择第 0 个音轨。

-c:v copy 视频将被复制而不是重新编码

-c:a copy 音轨将被复制而不是重新编码。

-shortest:确保在达到两个输入中较短输入的长度时停止转换

视频格式转换

*mp4 -> 1.avi

ffmpeg -i 1.mp4 -vcodec copy -acodec copy 1.avi

命令解释

-i 参数指明导入的视频文件是 1.mp4。

-vcodec copy 参数保持视频质量不变,只将其编码为无损的视频;

-acodec copy 参数保留原有音频。

avi -> mp4

ffmpeg -i 1.avi -vcodec copy -acodec copy 1.mp4

命令解释

-i 参数指向要转化为 MP4 格式的电影文件。

-vcodec copy 参数保持视频质量不变

-acodec copy 保持原先的音频。

mp4->mov

ffmpeg -i 1.mp4 -vcodec copy -acodec copy output.mov

命令解释

-i 参数指明导入的电影文件名称为 1.mp4

-vcodec copy -acodec copy 维持原始电影的质量和音频等效性,最后输出为 MOV 格式。

mov->mp4

ffmpeg -r 30 -i input.mov -o output.mp4

命令解释 -i 是指向输入的视频或音频文件的路径

-o 指定输出文件的目标位置。

-r 30 选项来设置每秒帧率为 30

音频格式转换

wav->mp3

ffmpeg -i wavefile.wav -an -vn -codec copy -c:-acodec copy -c :acodec libmp3lame -bitrate 64k output.mp3

命令解释

-an:删除非必要的元数据

-vn:参数去除无效的信息

-c:copy:将原始音轨复制下来

-c:-acodec copy-c :-acodec libmp3lame 选择相应的编码器

-bitrate 64k 指定每秒钟可使用的比特数,也就是每个时间段内能够产生多少位音频波形。

mp3->wav

ffmpeg -i input.mp3 -af "format=s16be" output.wav

命令解释

-i input.mp3 :指定要转换的 Mp3 文件

-af "format=s16be":将编码模式更改为双字节无损编码,从而生成高质量的 WAV 文件。

Mp3 格式是一种有损的压缩格式,在转换后可能会丢失一些信息或音质较差。如果需要最高品质的输出,可能需要先将音频转为其他无损格式,然后再将它转换回 WAV 格式。

wav->flac

ffmpeg -i "1.wav" -codec libpng -acodec libflang -profile baseline -b:a 128k -b:p 300k -acodec libvorbis -vcodec libvorbis --voicefile="1.wav.flac" "1.flac"

命令解释

-i "1.wav":指定输入文件路径为"1.wav"。

--codec libpng: 选择 Png 压缩算法作为输入文件的压缩方式。

-acodec libflang: 选择 Aac 压缩算法作为音频的数据流(Audio Stream)的压缩方式。

-profile baseline: 选择基本编解码器(Baseline Codec Profile)模式。

-b:a 128k: 调整音频压缩码率为每秒 128 Kbit,即大约每分钟640K。这会提供较高的音质和较低的大小。

-b:p 300k: 调整音频比特率为每秒 300 Kbit,即将音频压缩的比特率提高一倍,从而使大小增加两倍,但会降低一些音质。

-acodec libvorbis: 指定 Vorbis 语音编码算法。

--voicefile "1.wav.flac":指定转换后的声音文件应该放在哪,这里为"1.wav.flac"。

--vcodec libvorbis: 指定 FFmpeg 使用的 Vorbis 编码器。

最终输出是一个名为"1.flac"的新文件,其中包含了原音频文件的内容(未经压缩)以及添加了额外的声音压缩(Aac)和音效压缩(Vorbis)所产生的压缩效果。

flac->wav

ffmpeg -i input.flac -codec copy output.wav

这将生成一个新的WAV文件,并将原始FLAC文件复制到输出中,不进行任何修改

字幕合成与分离

添加硬字幕

ini 复制代码
ffmpeg -i 1.mp4 -vf subtitles=222.srt output_srt.mp4

硬字幕在任何地方都会显示,与播放器无关,但是subtitles= 后要直接跟字幕文件名.srt,不可有路径。 视频需要重新编码,非常慢,而且播放器无法显示或隐藏字幕,始终都会显示。

添加软字幕

css 复制代码
ffmpeg -i sample_video_ffmpeg.mp4 -i sample_video_subtitle_ffmpeg.srt -c copy -c:s mov_text -metadata:s:s:0 language=eng output_soft_english.mp4

软字幕需要播放器支持才能显示,可在播放器选择显示或不显示

命令解释

-i sample\_video\_ffmpeg.mp4 是在命令行中指定的视频路径,即要加入字幕的视频文件名。

-i sample\_video\_subtitle\_ffmpeg.srt 是在命令行中指定的字幕路径,即要加入字幕的 SRT 文件名。 -c copy 指定使用全量复制视频和字幕文件内容,不进行任何修改。

-c:s mov_text 指定字幕使用的格式,即采用 movidx 格式(如 .movidx)作为字幕文件的内容类型。

-metadata:s:s:0 language=eng 指定字幕语言为英语,在整个视频播放过程中始终保持字幕显示的语言。

output_soft_english.mp4 指定输出的导出的软链接名称,即将视频和字幕合并在一起。

双字幕

go 复制代码
ffmpeg -i ouptut_soft_english.mp4 -i subtitle.chinese.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:s:1 language=chi output_soft_chinese.mp4Copy

命令解释

-map 0 选项指的是输入视频output_soft_english.mp4

-map 1 选项指的是输入字幕文件subtitle.chinese.srt。

能够选择英文或中文字幕。

拼接视频

less 复制代码
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "[0]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1[v0];[1]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1[v1];[v0][0:a:0][v1][1:a:0]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" out.mp4 

命令解释

-i: 是要添加到新 MP4 片段中的输入流的选项

-filter:v size=480x360:调整输出流的大小到 480 x 360 pixels 尺寸

-filter:a libamr:转换原始音频格式为 AMR 声音码率

-codec:a libamr:使用 AFR (Audio Frequency Reduction) 减少非关键区的声道数量

-codecs copy:复制原流内容

--output:保存新的 MP4 片段的选项

拼接wav音频

css 复制代码
ffmpeg -i 1.wav -i 2.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" o.wav
相关推荐
Say-hai3 小时前
FFMPEG解码+SDL2播放视频
ffmpeg·音视频
runing_an_min5 小时前
ffmpeg: stream_loop报错 Error while filtering: Operation not permitted
ffmpeg·permitted
Say-hai5 小时前
FFMPEG结构体分析
ffmpeg
Liveweb视频汇聚平台12 小时前
FFmpeg推拉流命令
ffmpeg
cuijiecheng201818 小时前
音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
ffmpeg·音视频
叶余1 天前
FFmpeg命令行选项
ffmpeg
从后端到QT1 天前
音视频采集推流时间戳记录方案
ffmpeg·音视频
悠着,大嘟嘟2 天前
FFmpeg音频解码详解
ffmpeg·音视频
-Mr_X-2 天前
FFmpeg在python里推流被处理过的视频流
python·ffmpeg
jbjhzstsl2 天前
lv_ffmpeg学习及播放rtsp
学习·ffmpeg