获取流信息
假设采用FFmpeg -i A.mkv
输出信息如下:
Stream #0:0: Video: hevc (Main 10)Stream #0:1(eng): Audio: eac3, 48000 Hz, 5.1(side), fltp, 768 kb/sStream #0:2(chi): Subtitle: ass (default)Stream #0:3(chi): Subtitle: hdmv_pgs_subtitleStream #0:4(eng): Subtitle: subripStream #0:5(eng): Subtitle: subrip
音频编码
# 使用aac音频编码ffmpeg -i A.mkv -acodec aac -ar 44100 -ac 1 -ab 32k -vcodec libx264 -s 1280x720 -crf 26 A_crf26.mp4# 使用mp3音频编码ffmpeg -i A.mkv -acodec libmp3lame -ar 44100 -ac 1 -ab 32k -vcodec libx264 -s 1280x720 -crf 26 A_crf26.mp4# 无损提取aac音频ffmpeg -i A.mkv -vn -acodec copy A.aac# 将aac音频重新编码为mp3格式ffmpeg -i A.mkv -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 A.mp3# 选择0号输入的第1个视频流,音频部分第1个流ffmpeg -i A.mkv -map 0:0 -map 0:1 -c:v libx264 -crf 25 -c:a aac -ar 44100 -ac 1 A_crf25.mp4
字幕编码
# 提取字幕流,假设0为视频,1为音频,2为字幕,可以通过FFmpeg -i A.mp4查看流信息ffmpeg -i A.mkv -map 0:2 A.assffmpeg -i A.mkv -map 0:3 A.supffmpeg -i A.mkv -map 0:4 A.srt# 选择0号输入的第1个视频流,音频部分第1个流,外部加载字幕流ffmpeg -i A.mkv -map 0:0 -map 0:1 -c:v libx264 -crf 25 -c:a aac -ar 44100 -ac 1 -vf "subtitles=A.ass" A_crf25.mp4#将mkv的第1个视频流,第1个音频流,第1个字幕流合成到视频中去,这种方法会首先提取字幕文件,速度比上面的方法慢ffmpeg -i A.mkv -map 0:0 -map 0:1 -c:v libx264 -crf 25 -c:a aac -ar 44100 -ac 1 -vf "subtitles=A.mkv:si=0" A_crf25.mp4ffmpeg -i A.mkv -map 0:0 -map 0:1 -map 0:3 -c:v libx264 -crf 25 -c:a aac -ar 44100 -ac 1 -c:s mov_text A_crf25.mp4ffmpeg -i A.mkv -i A.srt -map 0:0 -map 0:1 -c:v libx264 -crf 25 -c:a aac -ar 44100 -ac 1 -c:s mov_text A_crf25.mp4