Apakah ada cara untuk transcode MPEG-PS dengan kode waktu yang salah ke MPEG-4 AVC dengan ffmpeg?

0

Saya memiliki beberapa file video dalam MPEG-PS\MPEG-4 Visual\MPEG Audioformat, file-file itu memiliki kode waktu yang rusak yang mengakibatkan sebagian besar pemain tidak dapat memainkannya dengan benar. Ketika saya mencoba untuk membukanya dengan VLC, ia memutar video dengan baik tetapi indikator durasi total file berubah terus-menerus, melompat-lompat.

Saya mencoba hanya mengonversi file MPEG-4\AVC\AACdengan perintah ini:

ffmpeg.exe -nostdin -y -loglevel info  -i "D:\input.mp4"  -f mp4  "D:\output.mp4"

Tapi itu menghasilkan file dengan durasi yang salah. Pemutaran aliran video baik-baik saja tetapi durasi umum dari file yang dihasilkan adalah beberapa jam lebih lama dari yang seharusnya, artinya ada beberapa jam frame hitam dan keheningan pada akhirnya.

Apakah ada cara untuk mengkonversi MPEG-PS\MPEG-4 Visual\MPEG Audioke MPEG-4\AVC\AACdengan mengoreksi atau membuat garis waktu baru?

pengguna3223738
sumber
Cobaffmpeg.exe -nostdin -y -i "D:\input.mp4" -fflags +genpts -f mp4 "D:\output.mp4"
Gyan

Jawaban:

0

Anda memiliki dua kemungkinan:

  • gunakan parameter -t untuk berhenti pada titik akhir yang diinginkan
  • Gunakan concatinput: Klip yang benar sangat pendek (misalnya 1 Frame hitam) dan kemudian klip yang rusak. Dengan sebuah concatinput, ffmpeg akan menggunakan cap waktu dari input pertama, kemudian menyesuaikan cap waktu berikut untuk menambahkannya dengan mulus.

Anda mungkin juga ingin menggunakan -c copyparameter untuk menghindari pengodean ulang jika tidak perlu.

Eugen Rieck
sumber
Apakah ada cara untuk memberitahu ffmpeg untuk berhenti di akhir aliran audio karena tampaknya memiliki panjang yang benar. Memasukkan -t secara manual untuk setiap file bekerja tetapi sedikit membosankan.
user3223738
Ada: sesuatu di sepanjang garis-i file.mp4 -i file.mp4 -map [0:a] -map [1:v] -c copy -shortest
Eugen Rieck