[Topic DIscussion] 我用 bash 脚本写的一个开源音视频处理工具,欢迎使用提意见
Tofloor
poster avatar
littlebat
deepin
2021-02-24 01:20
Author

转帖自我的博客:使用 MobileMate 开源工具进行音视频处理

MobileMate 是一款非常实用的开源音视频处理工具,特色功能包括批量裁剪或贴边转换不同格式和分辨率的视频、转换时以任意时长平均分割、并行转换、继续上次未完成转换任务、ffmpeg(libav)和 mencoder 双转换引擎、bash 脚本编写易于定制等等。详情请移步官网查看。本文使用横向和竖向不同格式和分辨率的视频为例,演示批量音频、视频转换,连接。文中含转换的原文件 1.mp42.mp4 和转换后的成果文件 12.mp4-0.mp312.mp4-0.mp4 供测试。

一、MobileMate 安装

MobileMate 现在可从 Live CD 和 VMware 、VirtualBox 虚拟机中运行,这里使用 VirtualBox 虚拟机版本。先下载 VirtualBox 虚拟机 MobileMate-0.1b1-VirtualBox.ova ,然后在 VirtualBox 虚拟机中导入。重点设置一下虚拟机与宿主机的共享文件夹,用于储存转换的原文件和成果文件。这里是 mobilemate_test。虚拟机内设置多核CPU可以并行转换多个文件。

二、打开 MobileMate

运行虚拟机后,选择中文界面选项“MobileMate lang=zh_CN.UTF-8”,进入 MobileMate。

设置放大界面的字体,打开下方快速启动栏的 PCManFM 文件管理器,CTRL+H 显示出用户 tc 家目录下的隐藏文件,在 .gtkrc-2.0 修改字体大小 11 为 13,在 .Xdefaults 中添加一行 URxvt.font: 8x13bold 设置 urxvt 终端字体大小。然后就可以点击下方快速启动栏里那个手机图标启动 MobileMate 音视频转换主程序了。如下图:

注意:VirtualBox 鼠标和键盘退出虚拟机可用右 Ctrl 键,MobileMate 基于 TinyCore Linux,有完善的自带软件仓库,点击快速启动栏中齿轮图标的“appbrowser”图形界面工具或者命令行工具 ab 都可以安装需要的软件,如浏览器等。详情见:MobileMate 官网和它基于的 TinyCore Linux 3.7.1

三、设定音视频转换参数

1、原文件:

作为示例,转换的原文件只有2个,双击可以播放。一个是手机截屏录制的横屏视频:1.mp4( 播放或下载 ),时长13秒,分辨率 1280×640,帧率42,单声道 aac 音频;一个电脑截屏录制的竖屏视频:2.mp4( 播放或下载) ,时长31秒,分辨率 612×910,帧率 30,立体声 vorbis 音频。原视频编码均是 h264。我们的转换可以以文件夹为目标,不管是2个还是200个都是一样的步骤,设置好后,多个文件可以同时转换,以发挥多核 CPU 的威力。打开文件管理器,点击左侧边栏的“vboxshare(宿主机主享)”进入到原文件保存目录 /mnt/vboxshare/mobilemate_test/in 中,点击上方菜单“工具”->“打开终端”,在打开的终端中执行 :

 export PATH=/opt/cutom/bin:${PATH}

把 定制的 ffmpeg 加入执行路径中,执行:

 for f in *; do echo "${f}:"; ffmpeg -i ${f} 2>&1 | grep -A 15 'Input'; done

查看原视频详细参数。

2、成果要求:

1)、音频成果:从原文件转换出 mp3 音频文件,双声道,64 kb/s。

2)、视频成果:从原文件转换成 mp4 视频文件,libx264(h264)视频编码,分辨率 800×600,512 kb/s,帧率25,两个视频均竖向内容全部保留,裁剪横向视频两边内容和用黑底填充竖向视频两边以保证视频外观不变形,aac 双声道 64 kb/s 音频编码。

3)、额外要求:把2个转换成的音视频成果连接成总共时长44秒的音视频文件。

4)、用下面的方法转换成的音频成果:12.mp4-0.mp3(播放或下载),视频成果:12.mp4-0.mp4(播放或下载)。

3、创建转换配置文件

MobileMate 支持向导式的音视频转换,也可以先创建转换配置文件,再在转换时选择事先创建好的配置文件进行转换。而创建配置文件也有两种方式,一种是在软件图形向导式的创建,一种是手动创建。手动创建最为灵活,这里选择手动创建上面要求的音视频转换配置文件。

创建步骤:打开文件管理器,进入 MobileMate 配置目录 /mnt/sda1/tce/conf 中,把默认音频转换配置文件 x2adefault.conf 复制为 x2a_test.conf,把默认视频转换配置文件 v2vdefault.conf 复制为 v2v_test.conf。在复制成的文件单击右键,选择“打开文件…”->“editor” 打开按上面的要求参数进行修改。各参数用法参见:Mobilemate 高级用法。音频转换配置文件 x2a_test.conf 如下:

format="mp3"
acodec="libmp3lame"
audiochannels="2"
samplerate="44100"
abitrate="64"
audiolevel="ORIGINAL"
splittime="-1"

视频转换配置文件 v2v_test.conf 如下:

format="mp4"
vcodec="libx264"
vbitrate="512"
ofps="25"
vfscale="800:600"
vdar="SAR"
vfcroptype="FULL_HEIGHT"
acodec="aac"
audiochannels="2"
samplerate="44100"
abitrate="64"
audiolevel="ORIGINAL"
splittime="-1"

四、音视频转换

如上所述打开 MobileMate ,点击圆形的选项按纽选择音、视频转换,点击“确定”确认选项,选择转换来源为“整个文件夹”:/mnt/vboxshare/mobilemate_test/in ,选择转换配置为“自定义的配置”,音、视频转换配置文件为“/mnt/sda1/tce/conf/” 下面的 “x2a_test.conf” 和 “v2v_test.conf”。

然后选择转换的目的文件夹为:/mnt/vboxshare/mobilemate_test/out ,确定后就开始转换,直到完成后确认退出。

五、音视频连接

如上面介绍的在文件管理器中进入转换成功的目的文件夹 /mnt/vboxshare/mobilemate_test/out 中,在此文件夹中打开 urxvt 终端,执行命令:

export PATH=/opt/custom/bin:${PATH}
ffmpeg -i "concat:1.mp4-0.mp3|2.mp4-0.mp3" -acodec copy 12.mp4-0.mp3
mkfifo /tmp/temp1 /tmp/temp2
ffmpeg -y -i 1.mp4-0.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb -f mpegts /tmp/temp1 2> /dev/null & \
ffmpeg -y -i 2.mp4-0.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb -f mpegts /tmp/temp2 2> /dev/null & \
ffmpeg -f mpegts -i "concat:/tmp/temp1|/tmp/temp2" -vcodec copy -acodec copy -absf aac_adtstoasc 12.mp4-0.mp4
rm /tmp/temp1 /tmp/temp2 -fv

上面的命令行意思参见:FFmpeg Concat protocol ,命令的版本不同,略有差别。MobileMate 里面定制的 FFmpeg 为 libav 0.7.1 分支,自带的文档可从此处下载。

Reply Favorite View the author
All Replies
lcw0268
deepin
2021-02-24 02:13
#1

好文章。

楼主是高人啊。

Reply View the author
剥壳白煮蛋
deepin
2021-02-24 05:44
#2

为啥没有一款功能全面些的 ffmpeg GUI 程序呢?

Reply View the author
littlebat
deepin
2021-02-24 16:26
#3
剥壳白煮蛋

为啥没有一款功能全面些的 ffmpeg GUI 程序呢?

有的,如 winff ,不过需要对ffmpeg 各参数比较熟悉。比如上面我的程序里面的裁剪和贴边,它需要针对不同分辨率的每个原文件手工计算裁剪和贴边参数,并且单独转换。

而MobileMate 把这个过程全自动化了。

Reply View the author
Cris.Q
deepin
2021-02-24 20:19
#4

前排支持,虽然我觉得ffmpeg就够了

Reply View the author
Cris.Q
deepin
2021-02-24 20:20
#5

有点不明白的是,一个程序为什么要依托于特定的发行版来启动

Reply View the author
littlebat
deepin
2021-02-24 20:51
#6

大小33M的一个livecd 或者虚拟机吧。主要是方便跨平台使用,而且是定制编译的,如果软件功能可行,考虑用python 写

Reply View the author
littlebat
deepin
2021-02-24 21:00
#7
Cris.Q

前排支持,虽然我觉得ffmpeg就够了

如果有100个不同横竖屏、分辨率的文件,横屏需要裁剪,竖屏需要贴边,每个视频的裁剪贴边参数都不一样,要把它们转换成统一的格式,并且连接起来。你估计一下要做多久?

 

Reply View the author
littlebat
deepin
2021-02-24 21:09
#8

我只需要1分钟设定配置,然后程序自动转换,完成后,再花几分钟生成遍历转换结果的连接脚本。总时间不会超过10分钟。如果文件名有规律,不需要手工排列连接转换结果的顺序,一万个文件也是这个时间。自动转换的机器时间除开。

Reply View the author