Apakah mungkin menggunakan ffmpeg untuk memotong X detik dari awal video dengan panjang yang tidak ditentukan?

20

Saya perlu memotong hanya 1 atau 2 detik pertama dari serangkaian rekaman FLV dengan panjang yang bervariasi dan tidak ditentukan. Saya telah menemukan banyak sumber daya untuk mengekstraksi durasi tertentu dari video (mis. Klip 30 detik), tetapi tidak ada untuk melanjutkan ke akhir video.

Kedua upaya ini hanya menghasilkan versi video yang disalin, tanpa pemangkasan yang diinginkan:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

Pikiran yang kedua adalah: mungkin jika saya menentukan panjang melampaui apa yang mungkin, itu hanya akan berakhir. Tidak ada dadu.

Saya tahu ini bukan masalah dengan codec atau menggunakan detik alih-alih kode waktu karena yang berikut ini berhasil:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

Ada ide lain? Saya terbuka untuk menggunakan alat-alat baris perintah (berbasis Windows) lainnya, namun saya sangat menyukai ffmpeg karena saya sudah menggunakannya untuk pembuatan thumbnail dan saya akrab dengannya.

Jika itu membantu, semua video saya akan berada di bawah 2 menit.

MEMPERBARUI:

Saya telah beralih untuk menggunakan Mencoder ( http://www.mplayerhq.hu/ ) karena sepertinya ffmpeg tidak akan mencapai ini tanpa beberapa peretasan tambahan.

Sintaks Mencoder untuk menyelesaikan apa yang ingin saya lakukan adalah:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv
marcelebrate
sumber
Jadi yang mana yang Anda sukai; yang mencodercontoh, di atas; atau ffmpegcontohnya, di bawah ini?
Suara

Jawaban:

16

Mencoba:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Saya pikir parameter input seharusnya menjadi yang pertama.

Dave
sumber
Terima kasih atas tanggapannya. Pemesanan parameter yang saya gunakan di atas memberikan hasil yang sama, jadi saya rasa itu bukan urutannya. Setelah menyerah pada ffmpeg, interval keyframe saya menyebabkan masalah dengan alat lain. Setelah meninjau ini barusan, lagipula itu adalah interval keyframe. Itu diatur ke 5 detik sebelumnya dan saya sejak itu mengaturnya menjadi 1 detik. Pada 5 detik, baik perintah Anda dan yang saya coba di atas menghasilkan ruang hitam di awal (bernilai 3 detik, tidak mengejutkan). Pada 1 detik, itu berfungsi seperti yang diharapkan.
marcelebrate
Ini juga berfungsi untuk mp3
geotheory
4
Seperti yang dijelaskan dalam Mencari FFmpeg , menggunakan -ss sebagai parameter input (sebelum -i) saat menyalin, atau bahkan transcoding dengan versi FFmpeg yang lebih lama, menggunakan pencarian keyframe. Ini jauh lebih cepat, tetapi mengorbankan akurasi. Jika Anda menggunakannya sebagai parameter output, proses ini berpotensi jauh lebih lambat (input didekodekan frame demi frame bahkan untuk bagian yang dibuang), tetapi akurat. Meskipun pertanyaannya sudah lama, saya pikir ini harus menjadi jawaban yang diterima.
Jonathan Y.
23

Ternyata perintah ini akan memotong video dari 2 detik aktif, seperti yang diharapkan:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Masalahnya adalah dengan interval keyframe di input.flv. Itu diatur ke 5 detik, yang menghasilkan bingkai hitam bernilai 3 detik pada awal video (5 - 2 = 3). Saya telah mengubah interval keyframe saya menjadi 1 detik, meskipun 2 detik mungkin juga akan menghasilkan hasil yang diinginkan dalam kasus saya.

PEMBARUAN: Pemesanan urutan -idan -ssparameter per jawaban Dave, yang telah saya terima untuk kredit.

marcelebrate
sumber
2
Saya juga mengalami masalah ini. Posting ini melakukannya untuk saya. Saya menggigit peluru dan berhenti mencoba menggunakan -vcodec copy -acodec copyuntuk semua perintah pengeditan saya. Pengodean ulang mencegah bingkai hitam dari awal video saya atau tidak memotong di tempat yang tepat (perbedaan satu detik tanpa pengodean ulang diterjemahkan menjadi perbedaan hampir 5 detik dalam video). Jadi, saya akhirnya mengganti -vcodec copydengan -vcodec libx264 -crf 0.
Hendy
2
Saya hanya mengalami hal yang sama. Saya menemukan bahwa saya tidak bisa hanya -vcodec copykarena irisan tidak mulai pada keyframe. Saya mendapatkan gambar diam atau gambar hitam selama N detik hingga keyframe berikutnya. Jika saya benar-benar menyandi ulang, alih-alih menyalin, ia berfungsi seperti yang diharapkan. Jadi meskipun input dan output saya sama-sama H264, saya masih perlu mengkode ulang (menggunakan -vcodec libx264bukan -vcodec copy).
Karl Wilbur
Jawaban Daves adalah yang benar pada ffmpeg versi terbaru. The -iharus datang sebelum -ss.
Arete
0

Gunakan -ss dan -untuk sebelum -i seperti ini:

ffmpeg -ss 00:01:10 -to 00:02:10 -i input -c copy output
Bora Savkar
sumber
0

Memperbarui jawaban ini, per 2019 perintahnya sekarang:

ffmpeg -i input.flv -ss 2 -c copy output.flv
Matt Zabojnik
sumber