2007年10月26日星期五

转换AVCHD的m2ts文件到avi

Sony的硬盘录像机是好东西,高清晰、宽屏幕录像,大容量存储,可录的时候爽了,后期浏览和加工转换实在是不方便(这位仁兄也有同样感受: Jeff Cai的流水账 - Play with AVCHD,机型都是Sony HDR-SR1),无论想在哪台电脑上浏览录像,都要装一个Sony Handycam Application Software软件(安装盘仅400M),这个软件也相当霸道,不让选择安装位置、安装哪些组件,甚至不允许单独安装其中的某一个程序,安装完成后居然还提示要重启xp,当然不重启我试了也能使用。注册媒体库位置的时候不让选择网上邻居资源或者映射的网络驱动器。

如果这些都不是问题的话,录像文件拷出来能用其他工具浏览或加工也行啊,可偏偏他的录像格式m2ts(扩展名MTS)目前支持的工具还相当少,不过还是在网上找到了一些文章,能够用开源工具进行转换。Sony自带软件也能转换成通用格式,不过我的印象是会损失一些清晰度,用肉眼就能轻易的分辨出来的差异。参考文章:

基本思路都是这样的:

  • 用xporthdmv把m2ts转换为mpv和mpa格式
  • 用ldecod把mpv转换为yuv格式
  • 用yuv4mpeg把yuv转换为y4m格式
  • mpa直接当ac3格式的音频使用
  • 用ffmpeg合成视频和音频部分为avi格式(avi就是一个容器)

讨论中还有一些其他的提示:

  • ffmpeg可以用mencoder替代
  • ldecod生成的yuv文件大小可以达到4G/分钟,不过可以用命名管道(named pipe)来省去使用中间文件
  • 视频和音频的同步,pal格式录像可以设定fps为25,ntsc格式录像可以使用参数-r 29.97。

参考文章中的第一篇给了一个附件,这个很好用,下载下来解包,里面的readme.txt和Makefile解释了使用方法,不过在ubuntu下使用的话,建议先作以下几步准备工作:

  • 安装svn客户端
  • 用apt安装x264-bin和ffmpeg以及mplayer
  • 在'src/JM/ldecod'目录下创建一个空的子目录'obj'
  • 脚本运行之后会自动转换samplevideo.avi,会用去一些时间,想省略的话把这个文件删除或改名即可
  • download文件中有一句set version=12.2,现在的jm版本已经是12.4了,更新之,不然下载不到(404错误)

然后就简单了:

  • ./download
  • ./compile
  • ./install

或者再用installasroot安装,你就可以使用m2tstoavi了:

$ m2tstoavi
usage: /usr/local/bin/m2tstoavi filename.m2ts ...

我也转了一个自己录的文件,完成后发现视频、音频不同步,并且播放速度很慢,可能是一些设置参数的问题,转换方式肯定是没有问题的,并且好像是目前最好的方式了。(修改/usr/local/bin/m2tstoavi,注意上面说的pal和ntsc制式的区别)mplayer播放最终生成的avi文件,信息如下:

Playing samplevideo.avi.
AVI file format detected.
VIDEO: [h264] 1440x1080 24bpp 29.970 fps 13323.1 kbps (1626.4 kbyte/s)
Clip info:
Software: MEncoder 2:1.0~rc1-0ubuntu9.1
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
[VO_TDFXFB] Can't open /dev/fb0: No such file or directory.
[VO_3DFX] Unable to open /dev/3dfx.
It seems there is no Xvideo support for your video card available.
Run 'xvinfo' to verify its Xv support and read DOCS/HTML/en/video.html#xv!
See 'mplayer -vo help' for other (non-xv) video out drivers. Try -vo x11
Opening video filter: [screenshot]
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Forced audio codec: mad
Opening audio decoder: [liba52] AC3 decoding with liba52
Using SSE optimized IMDCT transform
Using MMX optimized resampler
AUDIO: 48000 Hz, 2 ch, s16le, 448.0 kbit/29.17% (ratio: 56000->192000)
Selected audio codec: [a52] afm: liba52 (AC3-liba52)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
VDec: vo config request - 1440 x 1080 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
SwScaler: reducing / aligning filtersize 5 -> 4
SwScaler: reducing / aligning filtersize 5 -> 4
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 5 -> 4

SwScaler: BICUBIC scaler, from yuv420p to bgr24 using MMX2
SwScaler: using 4-tap MMX scaler for horizontal luminance scaling
SwScaler: using 4-tap MMX scaler for horizontal chrominance scaling
SwScaler: using n-tap MMX scaler for vertical scaling (BGR)
SwScaler: using MMX2 YV12->BGR24 Converter
SwScaler: 1440x1080 -> 1920x1080
VO: [x11] 1440x1080 => 1920x1080 Planar YV12
A:4358.2 V: 2.9 A-V:4355.240 ct: 0.297 89/ 89 148% 0% 1.1% 37 0

有时间了再仔细研究视频、音频不同步和播放速度很慢的问题。不过还是那句话,技术都是好东西,可对商业利益的无止境追求使他们变成了恶魔。

软件环境:Ubuntu 7.04 Feisty

Source: http://www.fwolf.com/blog/post/361