FFmpeg повредил вывод из объединения

#video #ffmpeg #editing

Вопрос:

ИЗМЕНИТЬ/ОБНОВИТЬ: текущее решение состоит в том, чтобы запустить этот код для всех файлов ffmpeg -i up.mp4 -vf scale=1920:1080 -crf 22 reUP.mp4 с таким разрешением, но и для совпадения кадров в секунду.

введите описание изображения здесь

Раньше я мог открывать CMD, вводить CD C:Users... и затем ffmpeg -f concat -safe 0 -i xmylist.txt -crf 22 -c copy x1.mp4

xmylist

Записи сделаны с одного и того же телефона, некоторые с передней камеры, некоторые с задней камеры. Я понимаю, что это может вызвать неодинаковые проблемы? но до недавнего времени это работало нормально.

Теперь вывод поврежден с помощью этого журнала: введите описание изображения здесь Отдельные видеофайлы воспроизводятся просто отлично, как и большая часть объединенных выходных данных, но некоторые разделы становятся такими и застывают: введите описание изображения здесь

Комментарии:

1. @llogan i.ibb.co/zSw7Fky/bilde.png Раньше он отлично сочетал переднюю и заднюю части :/ Я пытался обновить, но безрезультатно.

2. @llogan Отдельные файлы хорошо воспроизводятся на VLC и Potplayer, но оба медиаплеера не воспроизводят их при объединении.

Ответ №1:

Вы объединяете два видеофайла с разным разрешением.

  • front.mp4 это 1920×1080
  • rear.mp4 это 1280х720

Воспроизвести проблему не слишком сложно (вы можете поместить код в .bat файл).:

 rem Create tmplist.txt
echo file 'front.mp4' > tmplist.txt
echo file 'rear.mp4' >> tmplist.txt

rem Create video with resolution 192x108 for example (instead of 1920x1080)
ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=25 -f lavfi -i sine=frequency=300 -acodec aac -ar 22050 -vcodec libx265 -crf 17 -pix_fmt yuv420p -t 3 front.mp4

rem Create video with resolution 128x72 for example (instead of 1280x720)
ffmpeg -y -f lavfi -i testsrc=size=128x72:rate=25 -f lavfi -i sine=frequency=400 -acodec aac -ar 22050 -vcodec libx265 -crf 17 -pix_fmt yuv420p -t 3 rear.mp4

rem Concatenate:
ffmpeg -y -f concat -safe 0 -i tmplist.txt -c copy tmp.mp4
 

Результат (через 3 секунды):
введите описание изображения здесь


Решение: Преобразуйте все объединенные входные видео в одно и то же разрешение.

Примечание:

  • По крайней мере, некоторые из видео должны быть перекодированы.

Я полагаю, что лучшее решение-преобразовать более низкое разрешение в более высокое, а затем применить concat :

 ffmpeg -y -i rear.mp4 -vf scale=192:108,setsar=1 -vcodec libx265 -crf 22 -pix_fmt yuv420p resized_rear.mp4

ffmpeg -y -f concat -safe 0 -i tmplist.txt -c copy tmp2.mp4
 

Менее рекомендуемое решение:

Существует одно решение, но оно перекодирует все видео (снижая качество).
Я не знаю, есть ли решение с использованием текстового файла.

Пример объединения двух файлов — размер второго видео изменяется:

 ffmpeg -y -i front.mp4 -i rear.mp4 -filter_complex "[1:v]scale=192:108,setsar=1[v1];[0:v][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -vcodec libx265 -crf 22 -pix_fmt yuv420p tmp_resized.mp4
 

Комментарии:

1. Почему раньше я мог делать это без проблем? Имеет ли это какое-то отношение к тому, что я меняю тип файла туда и обратно (.mp4 —> .zzz —>> .mp4), Это повреждает заголовки или что-то в этом роде?

2. Я не знаю… Вы уверены, что раньше у вас было два видеофайла с разным разрешением? Возможно ли, что вы изменили настройки разрешения одной из камер?