DTS non-monoton pada konser (ffmpeg)

17

Setelah menjalankan perintah ini ffmpeg -f concat -i mylist.txt -c copy output.mp4- Saya mendapatkan output.mp4file yang rusak dan pesan ini:

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%

Isi dari mylist.txt

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

keluaran cut.mp4 dari ffmpeg:

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

keluaran cut2.mp4 dari ffmpeg:

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 Saya dapat perintah ini ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Saya dapat perintah ini ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Saya mencari banyak - tidak menemukan solusi, mungkin, seseorang dapat membantu saya dengan yang ini.

output.mp4 dimainkan, tetapi terlihat aneh.

masukkan deskripsi gambar di sini

whitesiroi
sumber
1
Bisakah Anda memberikan kedua file input sehingga saya dapat melakukan tes?
Logan
@ LordNeckbeard ya, saya mengirimkannya kepada Anda, terima kasih banyak.
whitesiroi
1
Sepertinya saya tidak bisa menduplikasi masalah yang sebenarnya. Saya menggunakan build statis terbaru yang tersedia dari tessus . File sampel tampaknya berbeda dari tangkapan layar Anda, tetapi tampaknya berfungsi dengan baik di VLC dan QuickTime, kecuali mencari tampaknya kacau. Saya menguji pada mesin OS X karena itu terlihat seperti apa yang Anda gunakan.
Logan
@ LordNeckbeard Terima kasih banyak, ya dengan versi ini versi ffmpeg N-71996-g372aa07-tessus itu bekerja dengan baik. Terima kasih.
whitesiroi
tl; dr; hapus -c copyuntuk mengizinkan pengodean ulang atau -c:a copyhanya digunakan . Kemudian langkah concat masih dapat digunakan -c copykarena semua video sudah disandikan ulang. Perhatikan bahwa beberapa video dengan peringatan ini masih terlihat baik-baik saja setelah konser dan begitu -c copyjuga dengan itu.
林果 皞

Jawaban:

10

Menggunakan yang terbaru ffmpeg

Pengguna umum harus selalu menggunakan ffmpegdari cabang master git saat ini (kode terbaru tersedia):

  • Saat menghadapi masalah, hal pertama yang harus dilakukan adalah memeriksa untuk melihat apakah Anda menggunakan build dari git master.
  • Itu dianggap stabil.
  • Ini akan memiliki lebih banyak perbaikan bug dan fitur.
  • Pengembangan FFmpeg sangat aktif .
  • Jika Anda ingin mendapatkan dukungan dari sumber daya bantuan resmi, Anda harus menggunakan master git.
  • Rilis untuk distributor.

Lihat halaman Unduh FFmpeg untuk berbagai opsi, atau lihat FFmpeg Wiki: Compile Guides .

Barang lainnya

  • Dalam perintah drawboxAnda, Anda dapat menyalin salinan audio dengan -c:a copyalih - alih menyandikannya kembali.

  • Saat menggunakan -ss, -tohanya berfungsi seperti yang diharapkan jika -ssdigunakan sebagai opsi keluaran.

llogan
sumber
Terima kasih banyak, ini bekerja lebih baik & lebih cepat. Bisakah Anda memeriksa yang ini juga video.stackexchange.com/questions/15477/... Saya hanya ingin tahu apakah ini dapat disederhanakan.
whitesiroi
@whitesiroi Tentu. Menjawab, meskipun tampaknya saya membuat komentar untuk pertanyaan itu tidak bahagia.
Logan
Maaf untuk itu.
whitesiroi
1

Sesuai https://trac.ffmpeg.org/wiki/Concatenate

Saya punya masalah yang sama. Saya menjalankan ffmpeg versi 2.6.3 di mac. Saya mengkonversi klip sumber saya ke format .MTS dengan tag tambahan -q 0, memperbarui ekstensi dalam file teks dan mengatur file output saya ke file .MTS ketika saya menjalankan perintah concat di ffmpeg. Itu bekerja seperti pesona. Ini alur kerja saya.

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

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

memperbarui file teks (mylist.txt) untuk membaca:

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

kemudian jalankan perintah concat sebagai berikut:

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

Bekerja untukku! Anda dapat mengonversi hasil akhir. MITS ke format apa pun yang Anda butuhkan.

Duncan Lindsey
sumber
Apakah protokol ini lossless?
becko
Tidak, perintah pertama dikonversi ke MPEG-2 yang tidak memiliki mode lossless.
Gyan
1

Saya mendapat kesalahan yang serupa, dan audio dalam video output saya kadang tidak sinkron dan kadang-kadang hilang sepenuhnya, tetapi saya mkvmergemalah menggunakan dari mkvtoolnix.

Video input saya telah dikodekan dengan pengaturan yang berbeda dan mereka memiliki dimensi yang berbeda, jadi saya pertama kali mengubah ukuran dan mengkodekan ulang mereka menggunakan 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

Beberapa video input saya tidak memiliki saluran audio, jadi saya menggunakan perintah seperti ini untuk menambahkan saluran audio bisu:

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

Setelah itu saya membuat video:

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

Jika file input Anda memiliki dimensi yang sama, jumlah saluran audio yang sama, laju sampel audio yang sama, dan sebagainya, Anda dapat menggunakan hanya mkvmergeuntuk menggabungkan file tanpa kehilangan data. File input untuk mkvmergedapat juga memiliki wadah MP4 tetapi file output akan memiliki wadah MKV bahkan jika ekstensi nama filenya ditentukan sebagai .mp4. Anda dapat berlari ffmpeg -i output.mkv -c copy output.mp4untuk mengganti wadah.

mkvmergememiliki sintaks seperti mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, di mana mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvjuga diterima.

nisetama
sumber
1

Berdasarkan jawaban Duncan yang sangat membantu:

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

Lalu ini:

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

Ketika saya menggunakan ffmpeg untuk remux beberapa video yang direkam (bisa TS, MP4 atau MKV) dan mendapatkan dts yang tidak monoton dalam aliran output - kesalahan cap waktu dll dll, video yang dihasilkan entah itu hanya memiliki audio saja atau diputar dengan kasar. Satu-satunya cara yang saya temukan untuk menangani ini adalah dengan menggunakan AviDemux. Dengan pengaturan Salin untuk audio dan video dan memilih MP4V2 Muxer dimungkinkan, di bawah opsi Konfigurasi untuk memilih Optimalkan Untuk Streaming. File MP4 yang dihasilkan sekarang dapat digunakan dalam ffmpeg tanpa menghasilkan pesan kesalahan. Percayai ini berguna.

gjdgjd
sumber