FFMpeg concat demuxer Небезопасное имя файла

14

Я использую ffmpeg внутри моего приложения .net, чтобы объединить (объединить) несколько коротких видео с одинаковыми параметрами кодирования, ширины и высоты. Я создал текстовый файл, как сказано в документации, и это мой текст:

concatTextDirectory - это каталог моего текстового файла.

file 'C:\Users\mtst\Desktop\Clips\keep\a1.mp4'
file 'C:\Users\mtst\Desktop\Clips\keep\a2.mp4'
file 'C:\Users\mtst\Desktop\Clips\keep\a3.mp4'
file 'C:\Users\mtst\Desktop\Clips\keep\a4.mp4'
file 'C:\Users\mtst\Desktop\Clips\keep\a5.mp4'

И это часть аргумента ffmpeg:

ffmpeg.StartInfo.Arguments = "/c ffmpeg.exe -f concat -i " + concatTextDirectory + " -c copy " + videoOut + " -y -report";

но это не имеет никакого результата и ниже отчет

ffmpeg запущен 2016-04-25 в 19:02:30 Отчет записан в
"ffmpeg-20160425-190230.log" Командная строка: ffmpeg.exe -f concat -i
"C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.txt "-c copy
" C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.mp4 "-y -report ffmpeg
версия N-79546-g13406b6 Авторские права (c) 2000-2016 FFmpeg
22.100 libavcodec 57. 35.100 / 57. 35.100 libavformat 57. 34.102 / 57. 34.102 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 44.100 / 6. 44.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Разделение командной строки. Параметр чтения '-f' ... соответствует параметру
'f' (принудительный формат) с аргументом 'concat'. Параметр чтения '-i' ...
соответствует входному файлу с аргументом
'C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.txt'. Параметр чтения '-c' ...
соответствует параметру 'c' (имя кодека) с аргументом 'copy'.
Параметр чтения 'C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.mp4' ... соответствует
выходному файлу. Параметр чтения '-y' ... соответствует параметру 'y' (перезаписать выходные файлы) с аргументом '1'. Параметр чтения '-report' ... соответствует параметру 'report' (создать отчет) с аргументом '1'. Закончено
расщепление командной строки. Разбор группы параметров: глобальный.
Применение опции y (перезаписать выходные файлы) с аргументом 1.

разобрал группу опций. Анализ группы параметров: входной файл
C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.txt. Применение опции f (принудительный
формат) с аргументом concat. Успешно разобрал группу вариантов. Открытие входного файла: C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.txt.
[file @ 00000000027d3ee0] Настройка стандартного белого списка 'file, crypto'
[concat @ 00000000027d3800] Небезопасное имя файла
'C: \ Users \ mtst \ Desktop \ Clips \ keep \ a1.mp4' [AVIOContext @
0000000000957ca0] Статистика: прочитано 238 байт, 0 ищет
C: \ Users \ mtst \ Desktop \ Clips \ keep \ keep.txt: операция не разрешена

как вы можете видеть в конце, он говорит:

Небезопасное имя файла 'C: \ Users \ mtst \ Desktop \ Clips \ keep \ a1.mp4'

... и операция не разрешена. Я пытался добавить дополнительные обратные слэши или изменить обратные слэши для прямого слэша или экранирования двойных двоеточий, добавления двойных кавычек или одинарных кавычек в начале или конце concatTextDirectory ... ни одно из этих изменений не дало никакого результата.

Эфтехари
источник

Ответы:

26

Либо беги

ffmpeg.exe -f concat -safe 0 -i
"C:\Users\mtst\Desktop\Clips\keep\keep.txt" -c copy
"C:\Users\mtst\Desktop\Clips\keep\keep.mp4

Или не используйте абсолютные (полные) пути в keep.txt

Gyan
источник
Что не безопасно и почему? Пример в документации показывает абсолютные пути, поэтому я думаю, что это не проблема.
Густаво Родригес
1
ffmpeg.org/pipermail/ffmpeg-devel/2013-Feb февраля/138400.html - приводит к тому, что абсолютные пути считаются небезопасными. Не уверен насчет логики этого, хотя!
Джамадагни
Я также думал, что это должны быть абсолютные пути, основанные на документах, но, видимо, это неправильно. Я сделал это просто имена файлов, и он работал отлично.
Майкл
+1 за использование относительных имен путей. Все примеры показывают полный.
pkamb