星期日, 五月 01, 2016

使用 ffmpeg 合并 bilibili for mac 下载的分段视频

效果

下载的分段视频:
合并后:

原理

使用ffmpeg转换flv到mp4

ffmpeg -i out.flv -vcodec copy -acodec copy out.mp4

使用ffmpeg合并MP4文件

ffmpeg -i "Apache Sqoop Tutorial Part 1.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i "Apache Sqoop Tutorial Part 2.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "Apache Sqoop Tutorial Part 3.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate3.ts
ffmpeg -i "Apache Sqoop Tutorial Part 4.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate4.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts|intermediate3.ts|intermediate4.ts" -c copy -bsf:a aac_adtstoasc "Apache Sqoop Tutorial.mp4"
然后写个脚本调用就行了,我是用 Automator 建了个服务

工具

  • Automator
  • ffmpeg
brew install ffmpeg

新建一个系统服务

使用 Automator 新建一个服务:文件➜新建➜服务,我这里命名为"flv合并为mp4"
添加「过滤 Finder 项目」「给 Finder 项目排序」「运行 Shell 脚本」组件
按图配置就行了,其中 Shell 脚本如下:
注: 脚本中包含 rm 方法,会将视频源文件和临时文件删除
for f in "$@"
do
 concat_file+="${f%.*}.ts"\|
 /usr/local/bin/ffmpeg -i "$f" -vcodec copy -acodec copy -c copy -bsf:v h264_mp4toannexb -f mpegts "${f%.*}.ts"
done

/usr/local/bin/ffmpeg -i "concat:${concat_file%|*}" -c copy -bsf:a aac_adtstoasc "${f%-*}.mp4"

for f in "$@"
do
 rm "${f%.*}.flv"
 rm "${f%.*}.ts"
done

exit 0

使用方法

选中 所有 分段的视频,右键➜服务➜flv合并为mp4

参考