Catatan: Saya memposting pertanyaan yang sama ke stackoverflow beberapa saat sebelumnya, ketika saya belum menemukan komunitas ini. Saya memposting ulang ini karena pertanyaannya lebih cocok untuk komunitas ini.
1. Apa yang saya coba
Saya memiliki beberapa file .MTS (format AVCHD) yang direkam dengan kamera AVCHD saya . Spesifikasinya adalah seperti yang ditunjukkan di bawah ini:
$ ffprobe 140612_Canon-00000.MTS
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz,
stereo, fltp, 256 kb/s
Perhatikan framerate / timebase: 29,97 fps, 29,97 tbr, 90k tbn, 59,94 tbc
Sekarang saya ingin mengonversi file ini ke file .mp4, tanpa menyandikan ulang aliran video H264 , di sisi lain, dengan transcoding stream audionya ke AAC . Jadi saya mencoba perintah berikut:
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
2. Hasil
dan spesifikasi file output adalah seperti yang ditunjukkan di bawah ini:
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.33.100
Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D),
48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
Lihatlah bagian framerate / timebase: 59,94 fps, 59,94 tbr, 90k tbn, 59,94 tbc . Meskipun ffmpeg baru saja menyalin aliran video, framerate dan timebase telah diubah menjadi dua kali lipat nilainya .
Jadi, ketika saya membuka dan memutar file output dengan QuickTime Player atau VLC Player, audio tidak memiliki masalah, namun, aliran video tidak diputar dengan benar. Video diputar ulang dengan memiliki frame maju dan mundur bergetar berulang kali.
3. Pertanyaan
- Bagaimana saya bisa mengonversi file .MTS (AVCHD) ke .mp4 oleh ffmpeg tanpa menyandikan ulang aliran video H264 dengan benar ?
- Bagaimana saya bisa menyimpan nilai framerate / timebase asli (fps / tbr / tbn / tbc) ketika saya mengonversi wadah dengan
ffmpeg
dan sakelarnya-vcodec copy
. - Bagaimana cara menetapkan nilai framerate / timebase (fps / tbr / tbn / tbc) dengan opsi baris perintah ffmpeg tanpa meng -encode ulang aliran video.
Ada ide?
4. Menambahkan -r 29.97
opsi
Profesor Sparkles memberi saya saran untuk ditambahkan -r 29.97
. Saya mencobanya:
ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
Namun, file output masih salah framerate / timebase:
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 11988 tbn, 59.94 tbc (default)
5. Remux menggunakan MP4Box
Saya mencoba demux dan remux menggunakan MP4Box, menurut saran Profesor Sparkles.
brew install mp4box
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vcodec copy -an 140612_Canon-00000.MTS.h264
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vn -acodec libfaac -ab 128k 140612_Canon-00000.MTS.aac
mp4box -add 140612_Canon-00000.MTS.h264:fps=29.97 \
-add 140612_Canon-00000.MTS.aac \
-new 140612_Canon-00000.MTS.mp4
dan outputnya adalah:
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
(snip)
Duration: 00:02:00.22, start: 0.000000, bitrate: 2293 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 2228 kb/s,
29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
creation_time : 2014-07-14 00:38:23
handler_name : 140612_Canon-00000.MTS.h264:fps=29.97
- Imported with GPAC 0.5.0-rev4065
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 125 kb/s (default)
Itu terlihat sedikit maju. Lihatlah bagian framerate / timebase: 29,97 fps, 29,97 tbr, 30k tbn, 59,94 tbc . Itu cocok dengan aliran asli, kecuali untuktbn
(nilai timebase dari wadah).
Namun, ketika saya memutar file output dengan Quicktime Player atau VLC, video diputar ulang dengan kecepatan setengah .
Meskipun file asli memiliki 90k tbn
(90000 ticks per second) dan file output baru dari MP4Box memiliki nilai 30k tbn
hanya sepertiga dari yang asli, file output diputar ulang dengan kecepatan setengah.
Saya tidak tahu alasannya. Tapi saya pikir masalahnya adalah bagaimana saya bisa menyesuaikan tbn
nilainya.
5-b. Laporan MediaInfo tentang file output
Saya juga mencoba alat MediaInfo pada file output yang dihasilkan oleh 5. Remux menggunakan MP4Box . Outputnya ada di sini: https://gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a
6. Mencoba avconv
Volodya dilaporkan avconv
bekerja dengan baik. Saya juga menyiapkan file film sampel pendek (Canon-00006.MTS) yang direkam dengan kamera yang sama. Oke, mari kita coba:
brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4
Informasi ffprobe file output ada di sini: https://gist.github.com/kaorukobo/5b53244ade2632ff1211 dan informasi framerate / timebase adalah sebagai berikut: 59,94 fps, 59,94 tbr, 90k tbn, 59kb tbc
File keluaran diputar dengan baik dengan VLC Player seperti yang dilaporkan Volodya. Namun, membukanya dengan Quicktime Player X, video diputar ulang dengan kecepatan normal tetapi dengan memiliki frame mundur berulang kali bergetar.
7. Mengapa aplikasi "AVCHD to MOV" gratis berfungsi?
Seperti yang saya sebutkan di komentar saya sebelumnya , fitur "rewrap to MOV" AVCHD ke MOV aplikasi berfungsi dengan baik, meskipun itu bukan MP4 tapi MOV.
Perangkat lunak memanggil program ffmpeg (atau avconv) sendiri secara internal, dan saya melihat opsi apa yang diberikan padanya. Seperti yang ditunjukkan di bawah ini:
/Applications/Free AVCHD to Mov.app/Contents/Resources/bin/com.geranium-soft.convert \
-i /path/to/140710_Canon-00003.MTS \
-map 0:0 -map 0:1 -c:a libfaac -vol 256 -b:a 128k -c:v copy \
-sn -movflags faststart -threads 0 -pix_fmt yuv420p -y \
/path/to/140710_Canon-00003.mov
Saya mencoba melewati opsi yang sama (Extractly sama. Saya mengatur tipe wadah keluaran ke MOV dan menghapus bahkan -t 60
beralih.) Ke program ffmpeg dan mengkonversi. Namun hasilnya sama dengan yang dilaporkan sejauh ini .
Pokoknya aplikasi hebat itu menyelesaikan masalah saya pada "Bagaimana saya bisa mengonversi file .MTS (AVCHD) ke .mp4 tanpa menyandikan ulang aliran video H264?", Kecuali pada "to .mp4" dan "by ffmpeg". Tapi saya masih tertarik pada mengapa aplikasi itu bekerja dengan baik tetapi ffmpeg tidak.