Mempratinjau file video yang setengah dikonversi

1

Katakanlah saya memulai pekerjaan FFmpeg yang membutuhkan waktu berjam-jam:

$ ffmpeg -i large.mp4 out.mp4

Apakah ada cara saya dapat melihat pratinjau bagian selesai dari out.mp4 sementara sisanya belum dikodekan?

Mencoba ini mengeluh "moov atom not found". Jika saya berspekulasi mengapa, itu karena pemutaran memerlukan informasi header yang diperbarui dan benar untuk hadir di awal file, dan FFmpeg tidak repot-repot melakukan ini saat menyandikan file; ia menunggu sampai benar-benar selesai.

sebagainya
sumber
Apakah menggunakan wadah MP4 merupakan persyaratan?
dsstorefile1
@ dsstorefile1: Wadah keluaran sebagian besar lebih disukai sebagai MP4, karena ini memungkinkan untuk kompatibilitas instan dengan perangkat Apple portabel, ditambah pratinjau Quicklook di MacOS. Saya berasumsi Anda mengisyaratkan ke MKV, yang saya coba sekarang dan dapat mengonfirmasi membiarkan dirinya langsung dipratinjau selama konversi (dalam VLC). Tapi pertanyaannya adalah MP4.
sebagainyarin
Anda bisa melihat tee muxer .
Logan
@ Loogan: Tip yang sangat bagus! Terima kasih! Namun, ini memaksa Anda untuk memutar film di seluruh konversi; Anda tidak dapat "melompat masuk dan keluar" melihatnya di hak prerogatif Anda sendiri.
forthrin

Jawaban:

2

Sederhananya, tidak. File MP4 tidak dapat dilihat kecuali mereka selesai melakukan penyandian. Saat Anda mengidentifikasi dengan benar, untuk memulai pemutaran, pemain harus mengurai moovatom, yang berisi info penting tentang apa yang akan diputar. Untuk keterangannya, Anda dapat melihat spesifikasi Format File QuickTime , yang menjadi dasar untuk MPEG-4 Bagian 14, atau singkatnya, format MP4.

Atom ini hanya dapat ditulis setelah trek media dikodekan sepenuhnya. Bukan berarti ffmpeg "tidak repot-repot" untuk menulisnya — Anda hanya harus menunggu sampai semua data ada untuk memiliki semua informasi yang diperlukan.

Atom kemudian ditulis di ujung wadah. Untuk pemutaran lebih cepat, Anda dapat memindahkan atom ini ke awal file (misalnya, menggunakan qt-faststartatau dengan opsi ffmpeg -movflags +faststart). Ini, tentu saja, juga hanya dapat dilakukan setelah penyandian selesai.

Karena itu, MP4 yang terfragmentasi dapat dipratinjau hingga titik tertentu, seperti yang disarankan Gyan , dengan menambahkan opsi berikut:

-movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov

Yang juga bisa Anda lakukan adalah beralih ke metode pengkodean tersegmentasi, misalnya menggunakan segmentmuxer . Ini membuat klip sebagian hingga panjang yang telah ditentukan, yang berarti bahwa Anda dapat mulai melihat pratinjau segmen yang ada. Selanjutnya Anda dapat bergabung dengan segmen kembali ke satu file dengan penyalinan aliran.

slhck
sumber
Kemungkinan-ish: video.stackexchange.com/q/18177/1871
Gyan
1
Jawaban yang bagus dan ditulis dengan baik. PS! Jika Anda mengetahui cara kerja bagian dalam format: Karena file MKV yang tidak lengkap diputar di luar kotak sementara file MP4 harus dilengkapi dengan hal "atom" ini, dapatkah itu dianggap sebagai keputusan desain yang tidak perlu dan buruk dalam MP4? PPS! Saya akan mengatakan pertanyaannya adalah duplikat dari tautan yang ditunjukkan, jadi jangan ragu untuk menandainya.
sebagainyarin
1
@forthrin Ya, ini bukan desain yang sangat kuat. Bahkan, banyak kali file rusak selama perekaman jika, misalnya, kamera dimatikan sebelum dapat menulis atom moov. Duplikat hanya dapat ditandai di situs yang sama, jadi tidak banyak yang bisa kita lakukan, tetapi tidak masalah jika pertanyaannya tetap di sini.
slhck