Bagaimana cara menggabungkan file video dari terminal?

9

Saya sudah mencoba avidemux2_cli, mencoder, ffmpeg, cat .. Tapi ini tidak selalu berhasil (Dengan sebagian besar kesalahan adalah bahwa codec audio tidak sama) Mungkin saya menempatkan opsi yang salah dalam perintah.

Jadi perintahnya:

cat Sample.avi rrr.avi > complete.avi
ffmpeg -i Sample.avi -i output.avi -vcodec copy -acodec copy complete.avi
mencoder -ovc lavc -oac copy Sample.avi rrr.avi -o complete.avi
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi -append output.avi --save video.avi

Masalah kucing adalah bahwa ia tidak menunjukkan kesalahan tetapi tidak berfungsi selalu. Seperti complete.avi akan persis sama dengan Sample.avi

Fmmpeg tidak melakukan apa-apa. Complete.avi selalu sama dengan Sample.avi

Kesalahan pencoder: Semua file harus memiliki codec audio dan format yang sama untuk salinan -oac. Jadi, complete.avi sama dengan Sample.avi

avidemux2_cli tidak ada kesalahan tetapi complete.avi sekali lagi sama dengan Sample.avi ..

Jadi kesimpulannya, semua complete.avi sama dengan Sample.avi .. Dan masalahnya adalah mereka tidak memiliki codec audio yang sama (i quess) .. Ada ide?

Leon Vitanos
sumber
1
Saya pikir Anda perlu mengubah codec video dan codec audio dari file input menjadi codec yang sama, jika Anda ingin menggabungkan dua video dengan aman,
vine_user
Dan bagaimana saya bisa melakukannya?
Leon Vitanos
Anda dapat menggunakan mencoderopsi -ovc dan -oac. Lihat: mplayerhq.hu/DOCS/HTML/en/menc-feat-selected-codec.html
vine_user

Jawaban:

10

Jika Anda ingin menggabungkan dua video dengan aman, Anda perlu mengubah codec video dan audio codec dari file input menjadi codec yang sama.

Misalnya, menggunakan xvid (video codec) dan mp3lame (audio codec):

sudo apt-get install mencoder libxvidcore4 libmp3lame0

Anda dapat menyandikan video input dengan perintah di bawah ini:

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 first.avi -o video1.avi
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 second.avi -o video2.avi

Agar video Anda cocok, Anda dapat mengubah opsi "bitrate" dll. (Dan juga codec).

Jika nama video yang disandikan adalah "video1.avi" dan "video2.avi", dan nama video output adalah "bergabung-video.avi",

mencoder -ovc copy -oac mp3lame video1.avi video2.avi -o joined-video.avi 

Dengan menggunakan perintah ini, Anda dapat membuat file video yang bergabung.

vine_user
sumber
2
Hanya berpikir saya akan menegaskan bahwa nama util ini adalah mencoder(yaitu Media ENcoder). Banyak orang yang macet karena tidak sengaja mengetik memcoder.
Val
bukankah ukuran frame juga harus cocok?
Penatua Geek
4

Saya harus bergabung dengan tiga keping video dengan codec yang identik. Membaca jawaban sebelumnya saya berhasil melakukan ini:

mencoder -ovc copy -oac faac 01.mp4 02.mp4 03.mp4 -o output.mp4

Jauh lebih cepat dan lebih sederhana daripada Openshot!

Pertama saya mencoba opsi '-oac copy', tetapi sepertinya codec audio di video saya tidak mengizinkannya. Saya mendapat pesan kesalahan merekomendasikan '-oac pcm'. Pcm codec bukanlah pilihan yang baik: file yang dihasilkan sangat besar dan 2/3 dari itu adalah audio yang tidak terkompresi.

Semoga ini membantu

pengguna150275
sumber
2
MEncoder svn r34540 (Ubuntu), dibangun dengan gcc-4.7 (C) 2000-2012 MPlayer Team MPlayer dikompilasi tanpa libfaac. Lihat README atau DOCS.
Philippe Gachoud
1

Solusi yang saya temukan di sini membantu saya untuk bergabung tanpa kehilangan dua file mp4:

sudo apt-get install gpac
MP4Box -cat part1.mp4 -cat part2.mp4 -new joinedfile.mp4

Saya mencoba menggunakan Avidemux, tetapi memiliki masalah dengan suara di video yang digabungkan.

warvariuc
sumber
1

File Anda tidak akan bergabung dengan benar karena ada sesuatu yang tidak cocok.

Seperti banyak orang lain, saya memiliki masalah dengan sinkronisasi suara dengan benar di video yang digabungkan. dan sementara MP4Box berfungsi dengan baik jika klip memiliki spesifikasi yang identik, dalam beberapa kasus saya akan dipukul oleh "Tidak ada trek tujuan yang cocok ditemukan - membuat yang baru" dalam hal Totem (alias Video) Tidak akan memainkan segmen itu dalam file yang bergabung Setelah beberapa percobaan dan kesalahan dan penelitian lebih lanjut saya telah mengembangkan metode berikut untuk berurusan dengan bergabung dengan video yang sejauh ini telah bekerja setiap saat dengan kualitas yang dapat diterima (untuk saya).

Jika ukuran bingkai tidak cocok (menggabungkan kesalahan terkait dengan trek video):

Normalisasi video tanpa mengganggu audio (-c: copy) dengan menetapkan batasan (dapat dibagi 8 untuk kompatibilitas codec maksimum) untuk segmen yang tak tertandingi

Contoh perintah

width=856

height=480

avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4

Jika Audio Tidak Sesuai (menggabungkan kesalahan terkait dengan trek audio):

Normalisasi Audio

Memproses audio tanpa mengganggu video (salinan c: v) sehingga semua klip cocok dengan codec, frekuensi, dan bitrate yang diinginkan dengan c: frekuensi codec -ar seperti -ar 48000 dan dan bit-rate dengan b: a 128k untuk stereo (64K per saluran tampaknya target yang baik) atau apa pun yang cocok.

Contoh: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4(perhatikan bahwa libmp3lame adalah codec untuk audio mp3) Anda bisa mendapatkan daftar enkoder yang didukung avconv dengan mengeluarkan perintah avconv -codecsatau mempersempit hal-hal ke kode tertentu avconv -codecs|grep *codecname*misalnyaavconv -codecs|grep mp3

Sekarang kita telah menormalkan file, kita dapat bergabung dengan mereka. Dalam contoh ini saya akan bergabung dengan file dengan MP4Box. Jika Anda tidak memilikinya, Anda bisa mendapatkannya dengan mengeluarkan perintahsudo apt-get install gpac

Gabung file dengan perintah MP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4(perhatikan bahwa tidak ada kucing sebelum file pertama dan setiap file tambahan didahului oleh -cat dan file target didahului oleh -out)

Jika menggunakan MP4Box (disarankan untuk MP4) untuk bergabung, Anda mungkin menemukan bahwa Anda harus memproses semua klip dengan avconv apakah spesifikasi tampak cocok atau tidak untuk menghindari kesalahan "Tidak ditemukan trek tujuan yang cocok - membuat yang baru (ketik vide)"

Catatan: Saya menemukan Avidemux memiliki masalah dengan video yang dikodekan menggunakan file H.264 / AVC (per totem) karena B-frame sebagai referensi. Ini sepertinya menghasilkan audio yang tidak sinkron ketika bergabung bahkan ketika memilih untuk menyalin audio dan video tanpa remux. Hancur ketika tidak memilih mode aman dan tidak sinkron saat menggunakan mode aman

Sumber:

/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player

/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv

https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr

Catatan: Sejauh yang saya tahu format lain (wadah) memiliki kendala yang sama untuk mencocokkan ukuran bingkai dan kecepatan audio, jadi ini dapat bekerja untuk avi juga jika Anda mencoba bergabung melalui cat atau mencoder setelah menormalkan video dan audio .

Opsional: Gunakan Handbrake untuk menyandikan ulang file yang digabung untuk ukuran yang lebih kecil jika diinginkan dengan framerate variabel dan pengaturan kualitas konstan 25 (pengaturan yang disarankan - sesuaikan yang diperlukan untuk harapan material dan kualitas Anda)

Penatua Geek
sumber
1

Anda harus mengetik seperti ini:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output.avi --save video.avi

Jika Anda ingin menambahkan lebih banyak file:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output1.avi --append output2.avi --append output3.avi --save video.avi
Grzegorz Tomczyk
sumber
1

Saya dapat menggunakan VLC Media Player untuk bergabung / menggabungkan beberapa file video. VLC dapat diunduh dari Perangkat Lunak Ubuntu atau Anda dapat menginstalnya dari terminal dengan menekan Ctrl+ Alt+ Tdan mengetik:

sudo apt update
sudo apt install vlc

Setelah VLC diinstal, buka terminal di folder dengan file video dan kemudian ketik:

vlc InFile1.mp4 InFile2.mp4 --sout "#gather:std{access=file,dst=OutFile.mp4}" --sout-keep

Ini membuka VLC GUI dan Anda dapat menutupnya setelah file bergabung / digabung. Anda dapat menemukan info lebih lanjut di sini .

JayDin
sumber