注:少し前に、このコミュニティをまだ見つけていないときに、同じ質問をstackoverflowに投稿しました。質問はこのコミュニティにより適しているため、これを再投稿します。
1.試したこと
AVCHDカメラで再録音されたいくつかの.MTS(AVCHD形式)ファイルがあります。その仕様は次のとおりです。
$ ffprobe 140612_Canon-00000.MTS
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz,
stereo, fltp, 256 kb/s
フレームレート/タイムベースの部分に注意してください:29.97 fps、29.97 tbr、90k tbn、59.94 tbc
今、私はしたいのですが、再エンコードH264ビデオストリームせずに、.MP4ファイルにこのファイルを変換し、一方、AACへのオーディオストリームをトランスコード。そこで、次のコマンドを試しました。
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
2.結果
出力ファイルの仕様は次のとおりです。
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.33.100
Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D),
48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
:フレームレート/タイムベースの部分を見て59.94 fpsの、59.94 TBR、90K TBN、59.94 TBC。ffmpegはビデオストリームをコピーしただけですが、フレームレートとタイムベースはvalueの2倍に変更されました。
したがって、QuickTime PlayerまたはVLC Playerで出力ファイルを開いて再生すると、オーディオに問題はありませんが、ビデオストリームは正しく再生されません。ビデオは、フレームを前後に繰り返し揺らしながら再生されます。
3.質問
- H264ビデオストリームを正しく再エンコードせずに、ffmpegで.MTSファイル(AVCHD)を.mp4に変換するにはどうすればよいですか?
- コンテナとそのスイッチを変換するときに元のフレームレート/タイムベース値(fps / tbr / tbn / tbc)を保持するにはどうすればよいですか。
ffmpeg
-vcodec copy
- ビデオストリームを再エンコードせずに、ffmpegのコマンドラインオプションでフレームレート/タイムベース値(fps / tbr / tbn / tbc)を設定するにはどうすればよいですか。
何か案は?
4. -r 29.97
オプションの追加
Sparkles教授は私にアドバイスを与えました-r 29.97
。私はそれを試しました:
ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
ただし、出力ファイルにはまだ間違ったフレームレート/タイムベースがあります。
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 11988 tbn, 59.94 tbc (default)
5. MP4Boxを使用したRemux
Sparkles教授のアドバイスによると、MP4Boxを使用してdemuxとremuxを試しました。
brew install mp4box
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vcodec copy -an 140612_Canon-00000.MTS.h264
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vn -acodec libfaac -ab 128k 140612_Canon-00000.MTS.aac
mp4box -add 140612_Canon-00000.MTS.h264:fps=29.97 \
-add 140612_Canon-00000.MTS.aac \
-new 140612_Canon-00000.MTS.mp4
出力は次のとおりです。
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
(snip)
Duration: 00:02:00.22, start: 0.000000, bitrate: 2293 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 2228 kb/s,
29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
creation_time : 2014-07-14 00:38:23
handler_name : 140612_Canon-00000.MTS.h264:fps=29.97
- Imported with GPAC 0.5.0-rev4065
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 125 kb/s (default)
少し先に見えます。:フレームレート/タイムベースの部分を見て29.97 fpsで、29.97 TBR、30K TBN、59.94 TBC。(コンテナからのタイムベース値)を除きtbn
、これらは元のストリームと一致します。
ただし、Quicktime PlayerまたはVLCで出力ファイルを再生すると、ビデオは半分の速度で再生されます。
元のファイルには90k tbn
(90000ティック/秒)があり、MP4Boxからの新しい出力ファイルには元のファイルの30k tbn
3分の1の値しかありませんが、出力ファイルは半分の速度で再生されます。
理由はわかりません。しかし、残りの問題は、tbn
値を調整する方法だと思います。
5-b。出力ファイルに関するMediaInfoのレポート
5. MP4Boxを使用してRemuxによって生成された出力ファイルに対してMediaInfoツールも試しました。出力はこちら:https : //gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a
6. avconvを試す
Volodya avconv
はうまく機能したと報告しました。また、同じカメラで記録された短いサンプルムービーファイル(Canon-00006.MTS)を用意しました。さて、試してみましょう:
brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4
出力ファイルのffprobe情報はこちら:https ://gist.github.com/kaorukobo/5b53244ade2632ff1211 およびそのフレームレート/タイムベース情報は次のとおりです:59.94 fps、59.94 tbr、90k tbn、59.94 tbc
Volodyaが報告したように、出力ファイルはVLC Playerでうまく再生されました。ただし、Quicktime Player Xで開くと、ビデオは通常の速度で再生されましたが、フレームが後ろに繰り返し揺れ動きました。
7.「無料のAVCHD to MOV」アプリが機能する理由
私は私の以前のコメントで述べた、のMOVへの無料AVCHDアプリの「再ラップMOVへ」機能は、それがないMP4なく、MOVを行っていても、うまくいきました。
ソフトウェアは独自のffmpeg(またはavconv)プログラムを内部的に呼び出し、どのオプションが渡されるかを見ました。以下に示すとおりです。
/Applications/Free AVCHD to Mov.app/Contents/Resources/bin/com.geranium-soft.convert \
-i /path/to/140710_Canon-00003.MTS \
-map 0:0 -map 0:1 -c:a libfaac -vol 256 -b:a 128k -c:v copy \
-sn -movflags faststart -threads 0 -pix_fmt yuv420p -y \
/path/to/140710_Canon-00003.mov
-t 60
ffmpegプログラムに同じオプション(抜粋は同じ。出力コンテナタイプをMOVに設定し、スイッチも削除しました。)を渡して変換しました。しかし、結果はこれまでに報告されたものと同じでした。
とにかく、このすばらしいアプリは、「。mp4」および「ffmpegで」を除いて、「H264ビデオストリームを再エンコードせずに.MTSファイル(AVCHD)を.mp4に変換する方法」の問題を解決しました。しかし、私はまだそのアプリがうまくいくのに興味がありますが、ffmpegはそうではありません。