几个我平常使用FFmpeg来干的事

一、使用FFmpeg分割一个大的 mp4 文件为多个小的 mp4 文件

1-1 起因

根据笔者自己日常的使用经验,FAT32 是 Mac 上支持最好的外置存储(U盘)文件格式,然而缺点也很明显,就是一次最大写入文件大小有限(4GB),且没有日志(参考 NTFS 的日志管理系统)。

有时候一部高清电影太大,则需要分割成 2 块甚至 3 块。所以这里就用到了FFmpeg

1-2 使用FFmpeg命令分割视频方法

从视频开始分割到1200秒(20分钟处)视频命令如下:


ffmpeg -ss 00:00:00 -i input.mp4 -c copy -t  1200  output.mp4


其中:

  • -ss: 起始时间
  • 注意: -ss要放在-i之前
  • -i: 要分割的是频文件
  • -t: 分割时长:格式如下
  • 可以是-t xx -> xx秒
  • 也可以是-t 01:00:00 -> 时:分:秒,且不是视频中的时刻,而是要向后截取多长的视频

1-3 举例

若一个视频需要分成 3 段,具体分割位置为视频中的 Start~01:17:5501:17:55~02:06:5002:06:50~End

则可以:


ffmpeg -ss 00:00:00 -i sample_Input.mp4 -c copy -t 01:17:55 sample_Output-part1.mp4 #Start~01:17:55
ffmpeg -ss 01:17:56 -i sample_Input.mp4 -c copy -t 00:48:57 sample_Output-part2.mp4 #01:17:55~02:06:50
ffmpeg -ss 02:06:55 -i sample_Input.mp4 -c copy -t 01:11:48 sample_Output-part3.mp4 #02:06:50~End


二、使用FFmpeg拼接多个 flv 视频并提取拼接好的 flv 文件的音频生成 mp3 文件

2-1 起因

下载了一个视频,网站上虽然是一整个,但下载到硬盘中就从一个变成了几个flv文件。现在想要提取一整个文件的音频保存为 mp3。

这种情况还是挺常见的,比如b站音乐区上的一些翻唱投稿,我之前非常迷《千里遥月》,所以就可以使用 FFmpeg 生成 mp3 文件保存到手机上。

2-2 step1 先拼接

推荐将下载到的几个视频“部分”重命名为1.flv2.flv3.flv...

然后命令行执行一个shell脚本:


for f in *.flv; do echo "file '$f'" >> mylist.txt; done


注意要调整生成的mylist.txt文件中各个视频“部分”的顺序不要错了(因为通常会遇到1、10-19、2、20-29、...这样顺序乱了的问题)

使用FFmpeg concat分离器来拼接视频:

上一步中生成的mylist.txt应该包含类似如下内容:


file '1.flv'
file '2.flv'
file '3.flv'


然后:


ffmpeg -f concat -i mylist.txt -c copy output.flv


使用 FFmpeg concat时,如果文件名有奇怪的字符,要在 mylist.txt 中转义。

2-3 step2 执行音频提取


ffmpeg -i output.flv -f mp3 -vn output.mp3


其中:

  • -i: 表示input,即输入文件
  • -f: 表示format,即输出格式
  • -vn: 表示vedio not,即输出不包含视频

三、使用FFmpeg批量转换 AAC 编码的高分辨率音乐为 WAV 格式

3-1 起因

手里的一堆 m4a 格式的音乐文件居然我的 SONY UX560F 播不了???官网不是明确写了支持的么???

Technical specificationshelpguide.sony.net


3-2 使用 for 循环

忍不了,转成确定能播的 WAV 格式!可是那么多文件,我总不能一个一个转吧?果断批处理!


for i in *.m4a; do ffmpeg -i "$i" "${i%.*}.wav"; done