Примітка: те саме питання я розмістив у stackoverflow за короткий час, коли я ще не знайшов цю спільність. Я відкладаю це, оскільки питання більше підходить цій громаді.
1. Що я спробував
У мене відновлено кілька файлів .MTS (формат AVCHD) за допомогою моєї камери AVCHD . Його специфікація наведена нижче:
$ 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
Зверніть увагу на частину частоти кадрів / часову базу : 29,97 fps, 29,97 tbr, 90k tbn, 59,94 tbc
Тепер я хотів би перетворити цей файл у .mp4 файл, без повторного кодування відеопотоку H264 , з іншого боку, з перекодуванням його аудіопотоку в AAC . Тому я спробував таку команду:
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
2. Результат
Специфікація та вихідний файл наведена нижче:
$ 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
Подивіться на частину кадрів / часову базу : 59,94 fps, 59,94 tbr, 90k tbn, 59,94 tbc . Хоча ffmpeg щойно скопіював відеопотік, частоту кадрів та часову базу було змінено на подвійне значення .
Отже, коли я відкриваю і відтворюю вихідний файл за допомогою програвача QuickTime Player або VLC Player, звук не має жодних проблем, проте відеопотік відтворюється неправильно. Відео відтворюється з тим, що його кадр вперед і назад трепетно повторюється.
3. Питання
- Як я можу перетворити файл .MTS (AVCHD) у формат .mp4 за допомогою ffmpeg, не перекодувавши відеопотік H264 правильно ?
- Як я можу зберігати початкові значення рамки / часової бази (fps / tbr / tbn / tbc), коли я перетворюю контейнер
ffmpeg
і його-vcodec copy
перемикач. - Як я можу встановити значення кадрів / часової бази (fps / tbr / tbn / tbc) за допомогою параметрів командного рядка ffmpeg без повторного кодування відеопотоку.
Будь-які ідеї?
4. Додавання -r 29.97
опції
Професор Спарклс дав мені поради додати -r 29.97
. Я спробував це:
ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
Однак вихідний файл все ще має неправильну частоту кадрів / часову базу:
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. Ремокс за допомогою MP4Box
Я спробував demux та remux за допомогою MP4Box, згідно з порадами професора Спаркла.
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
а вихід:
$ 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)
Це виглядає трохи кроком вперед. Подивіться на частину кадрів / часову базу : 29,97 fps, 29,97 tbr, 30k tbn, 59,94 tbc . Вони відповідають початковому потоку, за виняткомtbn
(значення бази даних з контейнера).
Однак, коли я відтворюю вихідний файл за допомогою програвача Quicktime Player або VLC, відео відтворюється з половиною швидкості .
Хоча вихідний файл має 90k tbn
(90000 тиків в секунду), а новий вихідний файл MP4Box має 30k tbn
лише одну третину значення оригіналу, вихідний файл відтворюється з половиною швидкості.
Я не знаю причини, чому. Але я думаю, що решта питання полягає в тому, як я можу скорегувати tbn
значення.
5-б. Звіт MediaInfo про вихідний файл
Я також спробував інструмент MediaInfo на вихідному файлі, сформованому 5. Remux за допомогою MP4Box . Вихід тут: https://gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a
6. Спроба avconv
Володя повідомив, що avconv
працював добре. Також я підготував короткий зразок фільму (Canon-00006.MTS), записаний тією ж камерою. Гаразд, спробуємо:
brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4
Інформація про вихідний файл ffprobe тут: https://gist.github.com/kaorukobo/5b53244ade2632ff1211 та інформація про її кадр / часову базу така: 59,94 fps, 59,94 tbr, 90k tbn, 59,94 tbc
Як повідомляв Володя, вихідний файл відтворювався на VLC Player . Однак, відкриваючи його за допомогою програми Quicktime Player X, відео відтворювалося із звичайною швидкістю, але з тим, що кадр назад тривожно повторювався.
7. Чому працює програма "Безкоштовний AVCHD для MOV"?
Як я вже говорив в моєму попередньому коментарі , Free AVCHD на MOV додаток «обернувши до МАМ» особливості працювали добре, навіть якщо це не MP4 , але MOV.
Програмне забезпечення викликає внутрішню програму ffmpeg (або avconv), і я побачив, які варіанти передаються їй. Це як показано нижче:
/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
Я спробував пропустити ті самі параметри (Надзвичайно те саме. Я встановив тип вихідного контейнера на MOV і видалив навіть -t 60
перемикач.) На програму ffmpeg та перетворення. Але результат був таким самим, як повідомлялося досі .
У будь-якому разі це чудове додаток вирішило мою проблему на тему "Як я можу конвертувати .MTS-файл (AVCHD) в .mp4 без повторного кодування відеопотоку H264?", За винятком "to .mp4" та "by ffmpeg". Але мене все ще цікавить, чому це додаток добре, але ffmpeg - ні.