Format OGV diputar dengan benar di komputer saya tetapi transcoding tetes (duplikat?) Bingkai

11

Saya telah membuat satu set screencasts menggunakan recordmydesktop di ubuntu 12.10. Outputnya adalah file ogv. Ketika saya menonton file ogv menggunakan pemutar film (totem) default, terlihat baik - audio dan video dalam sinkronisasi. Ketika ditranskode (oleh saya atau youtube) audio dan video tidak sinkron. Sepertinya saya melewati satu atau dua slide sambil menceritakan.

Memperbarui

Saya menduga masalahnya lebih tepat ditandai sebagai menjatuhkan duplikat frame selama transcoding. Mengkonversi video tempat mouse bergerak sepertinya berfungsi dengan baik. Tetapi ketika saya hanya berbicara selama slide, frame duplikat itu dijatuhkan.

Saya melihat ini tetapi ini bukan situasi saya (mencoba untuk pergi dari ogv -> apa pun) /superuser/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

File AVI tampaknya menerjemahkan dengan benar! Saya menganggap ini akan menjadi petunjuk besar bagi seseorang. Saya masih ingin melacak masalah mendasarnya. Saya sedang menguji konversi video saya sebelumnya ke AVI tetapi ini membutuhkan waktu karena saya harus memeriksa setiap transisi.

Contohnya

Ini adalah file OGV asli dari gtk-recordmydesktop: http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv

Video dimulai dengan slide selama 10 detik, lalu naik menjadi 3 slide lebih banyak masing-masing. Setiap kali saya memajukan slide, saya juga mengetuk mikrofon (10s, 15s, 20s, 25s).

Berikut adalah beberapa konversi yang dilakukan (masing-masing menampilkan masalah waktu video sendiri):

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4

  • ini menunjukkan slide pertama dalam bingkai pertama tetapi dengan cepat maju melewatinya
  • ini dilakukan dengan menggunakan stock ffmpeg

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4

  • yang ini cukup dekat - untuk beberapa alasan di usia 13-an itu memutuskan untuk maju
  • ini dilakukan menggunakan build statis ffmpeg dari beberapa hari yang lalu

Ini dia di youtube - Anda dapat melihat bahwa pada usia 13-an ia bergerak lebih awal (dari slide 1 -> slide 2):

Ini bukti bahwa file OGV berfungsi dengan benar:

terjemahan ffmpeg

Menggunakan ffmpeg atau avconv saya sepertinya mendapatkan hasil yang sama seperti youtube (transisi tampaknya terjadi lebih awal tetapi tidak harus pada saat yang sama).

Berikut ini adalah perintah yang saya gunakan (dengan ffmpeg statis terbaru) dan keluaran:

$ ~ / ffmpeg / ffmpeg -i JSP.ogv JSP.mp4
ffmpeg versi N-50025-gb8bb661 Hak cipta (c) 2000-2013 pengembang FFmpeg
  dibangun pada 17 Feb 2013 05:23:03 dengan gcc 4.6 (Debian 4.6.3-1)
  konfigurasi: --prefix = / root / ffmpeg-static / 64bit --extra-cflags = '- I / root / ffmpeg-static / 64bit / sertakan -static' --extra-ldflags = '- L / root / ffmpeg- static / 64bit / lib -static '--extra-libs =' - lxml2 -lexpat -lfreetype '--enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable -zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libvamelame --enable-grey --enable-libass - -enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil 52. 17.101 / 52. 17.101
  libavcodec 54. 91.103 / 54. 91.103
  libavformat 54. 63.100 / 54. 63.100
  libavdevice 54. 3.103 / 54. 3.103
  libavfilter 3. 38.100 / 3. 38.100
  libswscale 2. 2.100 / 2. 2.100
  contoh lib kami 0.17.102 / 0.17.102
  libpostproc 52. 2.100 / 52. 2.100
[ogg @ 0x34d4640] Beberapa fisbone untuk aliran yang sama tidak diterapkan. Perbarui versi FFmpeg Anda dengan yang terbaru dari Git. Jika masalah masih terjadi, itu berarti file Anda memiliki fitur yang belum diimplementasikan.
[ogg @ 0x34d4640] Penguraian header gagal untuk aliran 0
[ogg @ 0x34d4640] File rusak, keyframe tidak ditandai dengan benar.
Masukan # 0, ogg, dari 'JSP.ogv':
  Durasi: 00: 12: 49,67, mulai: 0,000000, bitrate: 224 kb / s
    Stream # 0: 0: Data: tidak ada
    Streaming # 0: 1: Video: theora, yuv420p, 1600x880 [SAR 1: 1 DAR 20:11], 15 fps, 15 tbr, 15 tbn, 15 tbc
    Metadata:
      RECORDMYDESKTOP: 0.3.8.1
    Streaming # 0: 2: Audio: vorbis, 22050 Hz, mono, fltp, 89 kb / s
[libx264 @ 0x369c5e0] menggunakan SAR = 1/1
[libx264 @ 0x369c5e0] menggunakan kemampuan cpu: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x369c5e0] profil Tinggi, level 4.0
[libx264 @ 0x369c5e0] 264 - core 129 r2230 1cffe9f - H.264 / MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac = 1 ref = 3 deblock = 1: 0: 0 analisis = 0x3: 0x113 saya = hex subme = 7 psy = 1 psy_rd = 1.00: 0.00 mixed_ref = 1 me_range = 16 chroma_me = 1 trellis = 1 8x8dct = 1 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2 utas = 6 lookahead_threads = 1 sliced_threads = 0 nr = 0 decimate = 1 interlaced = 0 bluray_compat = 0 constrained_intra = 0 bframe = 3 b_pyramid = 2 b_padas = 0 bb; weightp = 2 keyint = 250 keyint_min = 15 scenecut = 40 intra_refresh = 0 rc_lookahead = 40 rc = crf mbtree = 1 crf = 23.0 qcomp = 0.60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1.40 aq = 1: 1.00
Output # 0, mp4, ke 'JSP.mp4':
  Metadata:
    encoder: Lavf54.63.100
    Streaming # 0: 0: Video: h264 ([33] [0] [0] [0] / 0x0021), yuv420p, 1600x880 [SAR 1: 1 DAR 20:11], q = -1--1, 15360 tbn , 15 tbc
    Metadata:
      RECORDMYDESKTOP: 0.3.8.1
    Streaming # 0: 1: Audio: aac ([64] [0] [0] [0] / 0x0040), 22050 Hz, mono, s16, 128 kb / s
Pemetaan aliran:
  Streaming # 0: 1 -> # 0: 0 (theora -> libx264)
  Streaming # 0: 2 -> # 0: 1 (vorbis -> libvo_aacenc)
Tekan [q] untuk berhenti, [?] Untuk bantuan
[ogg @ 0x34d4640] File rusak, bingkai non-key tidak ditandai dengan benar.
    Pesan terakhir diulang 2 kali
File rusak, non-keyframe tidak ditandai dengan benar. = 00: 00: 08.37 bitrate = 28.7kbits / s dup = 66 drop = 0    
File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 00: 51.01 bitrate = 125.3kbits / s dup = 675 drop = 0    
File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 00: 55,05 bitrate = 140.2kbits / s dup = 782 drop = 0    
File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 00: 59,60 bitrate = 140,5 kbits / s dup = 836 drop = 0    
[ogg @ 0x34d4640] File rusak, keyframe tidak ditandai dengan benar.
File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 01: 08.00 bitrate = 143.0kbits / s dup = 900 drop = 0    
File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 01: 11.86 bitrate = 141.6kbits / s dup = 910 drop = 0    

... Diulang berkali-kali ...

File rusak, keyframe tidak ditandai dengan benar.waktu = 00: 12: 47.62 bitrate = 153.0kbits / s dup = 9087 drop = 0    
frame = 11521 fps = 87 q = -1.0 Lsize = 14849kB waktu = 00: 12: 49.48 bitrate = 158.1kbits / s dup = 9087 drop = 0    
video: 2401kB audio: 12024kB subtitle: 0 tajuk global: 0kB muxing overhead 2,938094%
[libx264 @ 0x369c5e0] bingkai I: 49 Rata-rata QP: 16,05 ukuran: 29658
[libx264 @ 0x369c5e0] bingkai P: 2912 Rata-rata QP: 9,88 ukuran: 114
[libx264 @ 0x369c5e0] bingkai B: 8560 Rata-rata QP: 12,76 ukuran: 78
[libx264 @ 0x369c5e0] B-frame berturut-turut: 0,9% 0,1% 0,2% 98,9%
[libx264 @ 0x369c5e0] mb I I16..4: 90.8% 0.4% 8.8%
[libx264 @ 0x369c5e0] mb P I16..4: 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% skip: 99.9%
[libx264 @ 0x369c5e0] mb B I16..4: 0.0% 0.0% B16..8: 0.3% 0.0% langsung: 0.0% lewati: 99.7% L0: 65.3% L1: 34.6% BI: 0.1%
[libx264 @ 0x369c5e0] 8x8 mengubah intra: 0,5% antar: 15,8%
[libx264 @ 0x369c5e0] kode y, uvDC, uvAC intra: 6,4% 0,1% 0,1% antar: 0,0% 0,0% 0,0% 0,0%
[libx264 @ 0x369c5e0] i16 v, h, dc, p: 94% 4% 2% 0%
[libx264 @ 0x369c5e0] i8 v, h, dc, ddl, ddr, vr, hd, vl, hu: 19% 22% 44% 1% 2% 2% 3% 1% 6%
[libx264 @ 0x369c5e0] i4 v, h, dc, ddl, ddr, vr, hd, vl, hu: 35% 17% 19% 4% 5% 5% 5% 5% 5% 5% 5%
[libx264 @ 0x369c5e0] i8c dc, h, v, p: 100% 0% 0% 0% 0%
[libx264 @ 0x369c5e0] P-Frame Tertimbang: Y: UV 0,0%: 0,0%
[libx264 @ 0x369c5e0] ref P L0: 82.5% 1.4% 11.9% 4.3%
[libx264 @ 0x369c5e0] ref B L0: 47.2% 52.4% 0.4%
[libx264 @ 0x369c5e0] ref B L1: 99.2% 0.8%
[libx264 @ 0x369c5e0] kb / s: 25.60

Video masih bergerak lebih awal tetapi pada waktu yang berbeda. Kedengarannya seperti gtk-recordmydesktop menghasilkan "file rusak". Yang menyebalkan adalah bahwa OGV tidak bekerja sehingga sepertinya saya harus bisa membuat ini bekerja dengan beberapa set opsi.

Saya telah menemukan bahwa saya dapat membuat video dalam kdenlive dan tampaknya berfungsi di sana. Saya masih ingin tahu apa yang sedang terjadi. kdenlive melakukan pekerjaan yang jauh lebih baik, tetapi kadang-kadang masih maju lebih awal.

Amir T
sumber
2
Tolong tunjukkan perintah ffmpeg Anda dan output konsol lengkap yang dihasilkan.
Logan
Ide bagus @LordNeckbeard saya menambahkan perintah dan output. Saya melihat ada kesalahan / peringatan: max_analyze_duration tercapai.
Amir T
Apakah masalah masih terjadi jika Anda menggunakan ffmpeg statis terbaru ? Ini akan menyingkirkan kemungkinan bug yang mungkin Anda temui yang telah diperbaiki dengan ffmpeg versi yang lebih baru. Tidak perlu menginstal atau apa pun. Cukup unduh, ekstrak arsip, lalu jalankan ffmpegbiner yang disertakan .
llogan
Bisakah Anda memberikan sampel file input yang masalahnya dapat direproduksi?
llogan
Ide bagus, saya akan menyiapkan yang kecil dan mempostingnya nanti malam.
Amir T

Jawaban:

4

Mengapa mengonversikan ke OGV ketika unggahan terakhir Anda akan ke youtube, saya mungkin salah tetapi Anda dapat mengonversi ke codec video x264 dengan AAC Audio bahkan di linux dan mengunggahnya ke youtube mengingat itulah yang mereka inginkan untuk diunggah. Sudahkah Anda mencoba membuat h264 dan mengunggah ke youtube alih-alih file OGV dan melihat apakah itu masalahnya. Karena saya berani bertaruh bahwa jika itu menyelesaikannya, Anda kemudian tahu bahwa itu adalah masalah dengan OGV yang diunggah ke youtube, dan jika itu tidak menyelesaikannya, itu bisa menjadi masalah frame-rate dengan interpretasi youtube atau sesuatu yang serupa.

Ada banyak masalah dengan file OGV yang diunggah ke youtube di masa lalu. Saya tidak dapat membayangkan bahwa ini sudah 100% diperbaiki bahkan pada titik ini.

http://support.google.com/youtube/bin/answer.py?hl=id&answer=1722171

EDIT: juga baru memperhatikan bahwa rekaman asli Anda di 15fps ... ini bisa jadi sumber masalah

EDIT 2: Saya agak sedikit salah membaca pertanyaan ... karena Anda memulai dengan file video OGV, dan saya melihat Anda akan ke MP4 ... ini mengubah sedikit hal .. .tapi saya akan menebak itu ada hubungannya dengan audio 15fps dan 22050 Hz ... Saya tahu sample rate tidak ada hubungannya dengan sinkronisasi audio, tetapi dari pengalaman ketika menggunakan frame rate dan audio samplerate standar, Saya cenderung melihat drifting ... mendapatkan ini untuk disinkronkan mungkin agak sulit sementara tidak dapat mengedit ini setelah perekaman awal dengan editor video murah ...

Sementara perangkat lunak telah menjadi lebih baik tentang melayang audio itu masih merupakan masalah umum ketika menggunakan framerate dan samplerate yang tidak biasa karena titik sinkronisasi keyframed tidak standar dan bisa membulatkan bingkai kunci dll ...

Anda melihat di mana tertulis "File rusak, keyframe tidak ditandai dengan benar." itulah yang dimaksud dengan ...

saran saya bagi Anda adalah untuk sedekat mungkin, bawa ke editor video dan selipkan dan potong audio agar sesuai dengan yang Anda inginkan. Sayangnya terkadang ini adalah cara memperbaikinya ...

Transcoder berbasis perangkat lunak tidak selalu berfungsi sebagaimana mestinya ... hense mengapa pengaturan protool dan / atau pengaturan avid akan disertai dengan perangkat keras untuk lebih memastikan kemampuan sinkronisasi dan laju bingkai konstan dll ...

Hal lain yang bisa Anda coba adalah mengonversi rekaman ke framerate standar, dan mencoba untuk merevisi ulang audio ... karena saya cukup yakin itu adalah video yang melayang ... mungkin sedikit melambat dan kemudian melaju ke arah akhir atau sebaliknya.

EDIT: Saya bisa mendapatkan video untuk disinkronkan ke aslinya menggunakan perintah ffmpeg ini ... mungkin perlu klausa laju yang merupakan apa yang saya duga

ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4

Chris James Champeau
sumber
File aslinya adalah Theora video dan audio Vorbis dalam wadah ogv. Amir T tidak meng-encode ulang ke format ini, sejauh yang saya tahu, tetapi ketika ia mencoba untuk menyandikan ulang yang asli dengan ffmpeg atau YouTube, masalah sinkronisasi muncul.
llogan
Format input adalah ogv yang merupakan keluaran gtk-recordmydesktop. Saya mencoba untuk mendapatkan apa pun selain ogv (flv, dll).
Amir T
Baca jawaban saya yang diperbarui ... Saya pikir ini adalah masalah FPS
Chris James Champeau
1
Menambahkan -r 15sama dengan menghilangkannya karena ffmpeg akan mewarisi laju bingkai input secara default, dan file output yang dihasilkan, dengan atau tanpa -r 15sama persis dengan ffmpeg dari git head (versi N-50285-gad89952). Jika ini berfungsi untuk Anda menggunakan versi ffmpeg yang lebih lama, ini bisa berupa regresi dan harus dilaporkan ke pelacak bug FFmpeg .
llogan
1
Saya dengan @LordNeckbeard Anda harus melaporkan ini sebagai bug ke FFMPEG
Chris James Champeau
3

Saya kesulitan dengan masalah serupa di Ubuntu 12.04.3 LTS. Saya memperbaiki masalah menggunakan build ffmpeg statis yang tersedia dari http://johnvansickle.com/ffmpeg/

pengguna2768
sumber
1
Saya juga mencoba membangun statis dan bekerja agak lebih baik. Mungkin bug telah diperbaiki, dalam hal mana mungkin berguna untuk menambahkan nomor versi dari build statis ke jawaban Anda?
Amir T
0

Coba ubah saja wadah ke avi daripada transcoding, yang sepertinya berfungsi lebih baik untuk youtube:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi
CpnCrunch
sumber
Saya mencoba ini, dan unggahannya tidak pernah selesai diproses, sama seperti jika saya mengunggah OGV. Karena jawaban ini sebelum youtube menerima OGV, itu pasti karena perubahan itu. Mengganggu bahwa ffmpeg masih memiliki masalah konversi ini empat tahun kemudian.
mcr
Ffpmeg saya adalah: 3.2.14-1 ~ deb9u1 (apt-getinstall)
mcr
Saya telah mencoba semua variasi di atas, dengan build statis (git-20191029), dan walaupun sedikit lebih baik, audio dan video tidak sinkron. Jika mencoba satu membutuhkan nilai --max_muxing_queue_size besar. Saya menggunakan 40.960.
mcr