concatの非単調DTS(ffmpeg)


17

このコマンドを実行した後ffmpeg -f concat -i mylist.txt -c copy output.mp4、破損したoutput.mp4ファイルとこのメッセージが表示されます。

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

の内容 mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

ffmpegからのcut.mp4出力:

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

ffmpegからのcut2.mp4出力:

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 このコマンドで得た ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 このコマンドで得た ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

私はよく検索しました-解決策が見つかりませんでした。おそらく、誰かがこの解決策を手伝ってくれるかもしれません。

output.mp4 再生可能ですが、奇妙に見えます。

ここに画像の説明を入力してください


1
テストを実行できるように、両方の入力ファイルを提供できますか?
llogan

@LordNeckbeardはい、私はあなたにそれを送った、ありがとうございました。
ホワイトシロイ

1
正確な問題を再現することはできません。私はtessusから入手できる最新の静的ビルドを使用しています。サンプルファイルはスクリーンショットとは異なるように見えますが、VLCおよびQuickTimeでは正常に機能しているように見えますが、シークが混乱しているように見えます。OS Xマシンでテストしました。これは、使用しているもののように見えるからです。
-llogan

@LordNeckbeardありがとうございます、このバージョンではffmpegバージョンN-71996-g372aa07-tessusがあります。ありがとうございました。
ホワイトシロイ

tl; dr; -c copy再エンコードまたは使用-c:a copyのみを許可するには、削除します。-c copyすべてのビデオがすでに再エンコードされているため、concatステップは引き続き使用できます。この警告を含む一部のビデオは、連結後も問題なく見えるため-c copy、問題ありません。
林果皞

回答:


10

最新の ffmpeg

一般ユーザーは、常にffmpeg現在のgit masterブランチ(利用可能な最新のコード)から使用する必要があります。

  • 問題が発生した場合、最初に行うことは、git masterからのビルドを使用しているかどうかを確認することです。
  • 安定していると見なされます。
  • さらにバグ修正と機能が追加されます。
  • FFmpeg開発は非常に活発です。
  • 公式のヘルプリソースからサポートを受けたい場合は、git masterを使用する必要があります。
  • リリースはディストリビューター向けです。

さまざまなオプションについてはFFmpegダウンロードページを参照するか、FFmpeg Wiki:Compile Guidesを参照しください。

他のもの

  • コマンドを使用drawboxすると、オーディオを再エンコードする代わりにスチームコピーできます-c:a copy

  • 使用する場合は-ss-to期待通りに場合にのみ機能しますが-ss、出力オプションとして使用されています。


よろしくお願いします。あなたはこの1つをチェックしてくださいすることができますあまりにもvideo.stackexchange.com/questions/15477/... 私はそれを簡略化することができるならば、単に好奇心が強いです。
ホワイトシロイ

@whitesiroi確かに。答えたが、私はその質問に対するコメントを不幸にしたようだ。
-llogan

そのために残念。
ホワイトシロイ

1

https://trac.ffmpeg.org/wiki/Concatenateに従って

これと同じ問題がありました。Macでffmpegバージョン2.6.3を実行しています。-q 0のタグを追加してソースクリップを.MTS形式に変換し、テキストファイルの拡張子を更新し、ffmpegでconcatコマンドを実行したときに出力ファイルを.MTSに設定しました。それは魅力のように働いた。これが私のワークフローです。

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

次のようにテキストファイル(mylist.txt)を更新しました。

file clip-1.MTS
file clip-2.MTS

次に、次のようにconcatコマンドを実行しました。

ffmpeg -f concat -i mylist.txt -c copy output.MTS

私のために働いた!最終的なoutput.MTSを必要な形式に変換できます。


このプロトコルはロスレスですか?
ベッコ

いいえ、最初のコマンドは、ロスレスモードを持たないMPEG-2に変換します。
ギャン

1

同様のエラーが発生し、出力ビデオのオーディオが同期しmkvmergeておらず、完全に欠落していることもありましたが、代わりにmkvtoolnix を使用することになりました。

私の入力ビデオは異なる設定でエンコードされており、サイズも異なっていたため、最初にサイズを変更して再エンコードしましたffmpeg

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

入力ビデオの一部にオーディオチャンネルがないため、次のようなコマンドを使用してサイレントオーディオチャンネルを追加しました。

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

その後、ビデオを連結しました。

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

入力ファイルのサイズ、オーディオチャネル数、オーディオサンプルレートなどが同じ場合はmkvmerge、ファイルをロスレスに連結するためだけに使用できます。の入力ファイルにmkvmergeもMP4コンテナを含めることができますが、ファイル名の拡張子がとして指定されている場合でも、出力ファイルにはMKVコンテナがあります.mp4ffmpeg -i output.mkv -c copy output.mp4コンテナを変更するために実行できます。

mkvmergeのような構文がありmkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv、ここmkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvでも受け入れられます。


1

ダンカンの本当に役立つ答えに基づいて:

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

それからこれ:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts

0

ffmpegを使用して記録されたビデオ(TS、MP4、またはMKV)をリマックスし、出力ストリームで単調でないDTS(タイムスタンプなどのエラー)を取得すると、結果のビデオはオーディオのみであるか、ぎくしゃく再生します。これを確実に処理する唯一の方法は、AviDemuxを使用することです。オーディオとビデオの両方の設定をコピーし、MP4V2 Muxerを選択すると、[構成]オプションで[ストリーミング用に最適化]を選択できます。結果のMP4ファイルは、エラーメッセージを生成せずにffmpegで使用できるようになりました。これが役に立つことを信頼してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.