Próbuję przekonwertować kilka plików mts na duży plik mp4:
stephan@rechenmonster:/mnt/backupsystem/archive2/Videos/20151222/PRIVATE/AVCHD/BDMV$ ~/bin/ffmpeg-git-20160817-64bit-static/ffmpeg -v info -f concat -i <(find STREAM -name '*' -printf "file '$PWD/%p'\n") -deinterlace -r 25 -s hd720 -c:v libx264 -crf 23 -acodec copy -strict -2 ~/tmp/Videos/20151222.mp4
ffmpeg version N-81364-gf85842b-static http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.1 (Debian 5.4.1-1) 20160803
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls --enable-libvidstab --enable-libsoxr --enable-frei0r --enable-libfribidi --disable-indev=sndio --disable-outdev=sndio --enable-librtmp --enable-libmfx --enable-libzimg --cc=gcc-5
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 53.100 / 57. 53.100
libavformat 57. 46.101 / 57. 46.101
libavdevice 57. 0.102 / 57. 0.102
libavfilter 6. 51.100 / 6. 51.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
[concat @ 0x56054a0] Unsafe file name '/mnt/backupsystem/archive2/Videos/20151222/PRIVATE/AVCHD/BDMV/STREAM'
/dev/fd/63: Operation not permitted
Jakieś pomysły, co tu idzie nie tak? Co w tym kontekście oznacza termin „niebezpieczny plik”?
-safe 0
przed-i
. Zobacz ffmpeg.org/ffmpeg-all.html#Options-31Odpowiedzi:
Odpowiedź podana przez @Mulvya (dziękuję!) Działa: „Dodaj
-safe 0
przed-i
”. Następnie pojawił się inny problem,find STREAM -name '*' -printf "file '$PWD/%p'\n"
który zwraca pustą ścieżkę jako pierwszy wpis. Zmieniono to dlafor f in ./*.wav; do echo "file '$PWD/$f'"; done
(patrz https://trac.ffmpeg.org/wiki/Concatenate ) i teraz wydaje się, że działa. Hurra!źródło
find
nafind STREAM -type f -name '*' -printf "file '$PWD/%p'\n"
(i nie zapomnij dodać-safe 0
komendy ffmpeg).Aby odpowiedzieć dlaczego, musimy zobaczyć działanie demuxerów ffmpeg, które odczytują strumienie multimedialne z pliku wejściowego. W tym przypadku używamy „concat” z następującymi opcjami: (zarchiwizowane dokumenty)
Okazuje się,
find .
że./
przed plikiem znajduje się a. Zobacz Jak usunąć początkowe „./” w uniksowym „znajdowaniu”? rozwiązań, jeśli nie chcesz używać-safe 0
.źródło
Odpowiedź @sers jest całkowicie poprawna, po prostu pokazuję ci polecenie, więc nie umieszczaj -safe 0 nigdzie indziej.
źródło
W moim przypadku podwójne cudzysłowy powodują błąd.
Używam
ffmpeg -f concat -i concat.txt -c copy output.m4a
polecenia, któreconcat.txt
zawiera listę plików wejściowych do konkatacji.Niebezpieczna nazwa pliku (podwójne cudzysłowy są traktowane jako część nazwy pliku,
-safe 0
nie można tego naprawić):Bezpieczna nazwa pliku (apostrofy):
Bezpieczna nazwa pliku (bez cudzysłowów):
Powyższe pojedyncze cudzysłowy i bez cudzysłowów są bezpieczne tylko wtedy, gdy zawierają tylko „litery, cyfry, kropkę (oprócz przedrostka), podkreślenie i łącznik” . Zatem następująca popularna nazwa pliku nie będzie działać:
Nadal potrzebujesz
-safe 0
do tych przypadków.[Zastrzeżenie dotyczące cytowania i ucieczki]
Zawsze potrzebujesz znaku ucieczki
'
w części nazwy pliku . powodem jestfile Im' .avi
chęć dodania automatycznie zamykającego cudzysłowuIm' .avi'
, co jest tym samym cofile Im' .avi'
. Ostatni nieparzysty cudzysłówfile Im' .avi''''''
również doda cudzysłowy zamykającefile Im' .avi'''''''
, więc nie maNo such file or directory
błędu. Rozumiem to zjawisko, ponieważ spacja nie musi już uciekać przed\
przedrostkiem pojedynczym cudzysłowem, bez konieczności dodawania cudzysłowu zamykającego.Pomimo wyżej (musi uciec
'
przez\
nie uciec z"
), styl ucieczka jest podobna do powłoki . Jeśli nazwa pliku zawiera pojedyncze cudzysłowy, możesz ją zmienić za pomocą styluI\'m\ .m4a
(NIE w apostrofach) lub stylu'I'\''m .m4a'
OR'I'\''m'\ '.m4a'
(w apostrofach), ale ani na,'I\'m\ .m4a'
ani'I'm .m4a'
.Podczas testowania ffmpeg pamiętaj, że komunikat o błędzie
Impossible to open
w pierwszej linii może wprowadzać w błąd (plik istnieje), musisz sprawdzić drugą linię, która jest alboNo such file or directory
(plik nie istnieje) alboInvalid data found when processing input
(nieprawidłowy plik multimedialny).źródło