Linuxソリューションも探しています(別の質問)
拡張子 の録画済みビデオ ファイルが 2 つあります.ts
。最初のファイルの一部を削除し、2 番目のファイルを分割して、最初のファイルを 2 番目のファイルの最初の (分割された) 部分と結合する必要があります。
どちらも同じ特徴を持っています:
Format : MPEG-TS
File size : 3.16 GiB
Duration : 1h 39mn
Overall bit rate mode : Variable
Overall bit rate : 4 527 Kbps
Video
ID : 720 (0x2D0)
Menu ID : 6181 (0x1825)
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Codec ID : 27
Duration : 1h 39mn
Width : 1 440 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate : 25.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : MBAFF
複数のオーディオ トラックと字幕も含まれています。
ファイルをトランスコードせずに処理し、少なくとも先頭部分などを削除できるようにしたいです。
FFMPEG
:
ffmpeg -i source.mts
与える:
Input #0, mpegts, from 'source1.mts':
Duration: 01:40:00.76, start: 2995.511878, bitrate: 4526 kb/s
Program 6181
Stream #0:0[0x46](fra,fra): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
Stream #0:1[0x2d0]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x2da](fra): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 73 kb/s
Stream #0:3[0x2db](qaa): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 67 kb/s
Stream #0:4[0x2dc](deu): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 49 kb/s
Stream #0:5[0x2dd](qad): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 57 kb/s
ffmpeg
私が見つけたコマンドとして、クロスプラットフォームので非常にうまく実行できると思います。ここ 1 つのファイルの一部を削除します。
ffmpeg -i InputFile -vcodec copy -acodec copy -ss 00:12:34.567 -t 00:34:56.789 OutputFile
入力に 4 つのオーディオ トラックがあり、この方法では最初の ( Stream #0:2[0x2da](fra)
) オーディオのみが取得されるという事実を除けば、動作します。必要なのは、すべてのオーディオか、3 番目の ( ) のいずれかですStream #0:3[0x2db](qaa)
。どのように調整しますか?
ffmpeg
したがって、次のことに取り組むべきである。
1. 最初のファイルの先頭を切り取ります(1時間40分のファイルから最初の2分を削除します)
2. 2番目のファイル(1時間)を2つの部分に分割します(3.05分後)
3. 2 番目のファイルを分割して取得した 3.05 分の部分を最初のファイルの末尾に結合 (追加) します。
私が試したこと:
Openshot: トランスコードなしでは処理できません。
Avidemux (Linux): 保存しようとすると「これは MPEG と互換性がありません。コピー コーデックは使用できません。」
Windows の Avidemux: オーディオが同期していません。
答え1
ffmpeg
すべてのオーディオ トラックを保持しながらファイルを分割および結合するにはどうすればよいですか?
ご存知のとおり、ビットストリームコピーでは、1つ(オーディオ)トラック、ストリーム仕様ドキュメント:
デフォルトでは、
ffmpeg
入力ファイルに存在する各タイプ (ビデオ、オーディオ、字幕) のストリームを 1 つだけ含め、各出力ファイルに追加します。次の基準に基づいて、それぞれ「最適な」ものを選択します。ビデオの場合は解像度が最も高いストリーム、オーディオの場合はチャンネルが最も多いストリーム、字幕の場合は最初の字幕ストリームです。同じタイプの複数のストリームが均等に評価される場合は、インデックスが最も低いストリームが選択されます。
選ぶ全てオーディオトラック:
ffmpeg -i InputFile.ts-c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a FirstFile.ts
選択するには三番目オーディオトラック:
ffmpeg -i InputFile.ts -c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a:2 FirstFile.ts
ストリーム選択に関する詳細と他の例については、高度なオプションドキュメントのセクションffmpeg
。
表現を簡潔にするために、-vcodec copy -acodec copy
元のコマンドを上記のように組み合わせることもできます。-c copy
スプリット:
したがって、後で再結合するために分割するという観点から、これらを 2 つのファイルで達成したいことと組み合わせると、次のようになります。
ffmpeg -i InputOne.ts -ss 00:02:00.0 -c copy -map 0:v -map 0:a OutputOne.ts
ffmpeg -i InputTwo.ts -c copy -t 00:03:05.0 -map 0:v -map 0:a OutputTwo.ts
あなたに与えるもの:
OutputOne.ts
、それがすべてです後最初の入力ファイルの最初の2分間OutputTwo.ts
、これは初め2番目の入力ファイルの3分5秒
参加する:
ffmpeg
再エンコードなしでファイルの連結をサポート連結ドキュメントに詳細に説明されている。
結合するファイルのリストを作成します (例join.txt
: ):
file '/path/to/files/OutputOne.ts'
file '/path/to/files/OutputTwo.ts'
次に、ffmpeg
コマンドで以下を使用できますconcat demuxer
。
ffmpeg -f concat -i join.txt -c copy FinalOutput.ts
mpeg
トランスポートストリーム( )を扱っているので.ts
、すべき連結を使用できるプロトコル同じように:
ffmpeg -i "concat:OutputOne.ts|OutputTwo.ts" -c copy -bsf:a aac_adtstoasc output.mp4
上にリンクされた concat ページの例に従って、実験してみるのはあなた次第です。
答え2
主な回答に基づいた簡略化された回答として:
開始点以降のデータ(最後まで)を保持するには:
ffmpeg -i INPUT -c copy -ss START_TIME -map 0 OUTPUT
2 つの時点間のデータを保持するには:
ffmpeg -i INPUT -c copy -ss START_TIME -to END_TIME -map 0 OUTPUT
特定の時点以降に一定期間のデータを保持するには:
ffmpeg -i INPUT -c copy -ss START_TIME -t DURATION_TIME -map 0 OUTPUT
開始後、一定期間のデータを保持するには:
ffmpeg -i INPUT -c copy -t DURATION_TIME -map 0 OUTPUT
データを最初から特定の時点まで保持するには:
ffmpeg -i INPUT -c copy -to TIME_POINT -map 0 OUTPUT
TIMEは秒数、またはhh:mm:ss[.xxx]で表されます。
join.txt
ファイルを結合するには、コンテンツを含むファイルを作成します。
file 'path-to-INPUT1'
file 'path-to-INPUT2'
file...etc
それから
ffmpeg -f concat -i join.txt OUTPUT
または:
mpegファイル(トランスポートファイルを含む)を結合する
ffmpeg -i "concat:INPUT-1|INPUT-2" -c copy -bsf:a aac_adtstoasc OUTPUT
GUIソリューションとして、Avidemuxを試してみましたが、結果は良くありませんでした。Linuxソリューションを検索していたところ、このコメントを見つけました。ここを指していますAvidemux ナイトリー:
「Avidemux を試すことはできますが、安定したバージョンではありません。"Wine" で win32 バージョン (はい、Windows 用です) を試してください。H.264 をサポートしており、どこでもカットできないため ("long gop" のため...)、キーフレームを見つけるには二重矢印を使用する必要があります。ただし、このようなソフトウェアはすべて、カットだけを実行できます。それ以外の場合はレンダリングされます (トランジション、効果などの場合)。 http://avidemux.org/nightly/win32/「
Linux/Wine でテストしましたが、Windows でも動作するはずです。
ファイルを結合するには、ファイルを開く最初のファイルを追加し、次にファイル追加残りについては。
保存する:ファイル - 保存。