1

Я пытаюсь извлечь небольшую часть из большего видео без изменения кодеков, разрешения или чего-то еще. Поэтому я использую FFmpeg со следующими настройками.

ffmpeg -vcodec copy -acodec copy -ss 01:00:00 -t 00:00:30 -metadata title="Custom title" -metadata artist="Artist Name" -metadata language="English" -i input_file_h264.mp4 output_file.mp4

Я обрабатываю видео на Ubuntu 10.10. с версией FFmpeg 0.6-4:0.6-2ubuntu6.2.

Выходной файл содержит ту же информацию о кодеке, что и входной файл. Тем не менее, он открывается в VLC и других медиаплеерах, как будто разрешение видео изменилось. Входной источник поставляется с разрешением 720х576. Используемый кодек H264 - MPEG-4 AVC (часть 10) (avc1). Когда открывается выходное видео, оно кажется более широким (16:9), хотя настройки видео не изменились.
Я не смог найти ничего похожего на соотношение сторон, неправильно настроенное в VLC.

Знаете ли вы о проблеме с H264 на Ubuntu? Насколько я понимаю, используется libx264. Но актуально ли это, когда я просто нарезаю видео?


По предложению slhck я изменил порядок аргументов.

ffmpeg -ss 01:00:00 -i 28c3-4906-en-lightning_talks_day_3_pecha_kucha_h264.mp4 -vcodec copy -acodec copy -t 00:00:30 output_file_slhck.mp4

1 ответ1

2

Вы на самом деле не копируете видеопоток.

Укажите параметры acodec и vcodec после параметра i . Просто подумайте, как бы вы их обработали. Сначала прочитайте файл, затем решите, как кодировать, затем выведите. Если вы этого не сделаете, параметры будут проанализированы по-разному 1, что объясняет разницу во входных и выходных данных в соответствии с вашим журналом:

Input:  Stream #0.0(und): Video: h264, yuv420p, 720x576 [PAR 64:45 DAR 16:9]
Output: Stream #0.0(und): Video: libx264, yuv420p, 720x576 [PAR 89:44 DAR 445:176]

Обратите внимание на разницу в пропорциях пикселей (PAR)? В настоящее время вы пытаетесь декодировать видео с помощью кодека copy , которого, очевидно, не существует. Размещение опций в FFmpeg действительно иногда имеет значение. 2

Это также то, что говорится в руководстве:

Выберите кодер (если используется перед выходным файлом) или декодер (если используется перед входным файлом) для одного или нескольких потоков

Итак, подведем итог - метаданные опущены для удобства чтения:

ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4

1 - В более новых версиях FFmpeg команда потерпела бы неудачу, поскольку не существует декодера copy .

2 - Кроме того, поместите опцию t после процесса кодирования и оставьте ss в начале. Установка ss в начале гарантирует, что файл будет считан до определенного времени, а затем начнет кодирование. Если вы поместите ss после i , это с самого начала закодирует файл, что может занять много времени.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .