たくさんのmtsファイルを大きな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
ここで何がうまくいかないのですか?この文脈で「安全でないファイル」という用語は何を意味しますか?
@Mulvyaによる回答(ありがとう!)は機能します:「-safe 0
を-i
の前に追加」。その後、空のパスを最初のエントリとして返すfind STREAM -name '*' -printf "file '$PWD/%p'\n"
で別の問題が発生しました。これをfor f in ./*.wav; do echo "file '$PWD/$f'"; done
に変更し( https://trac.ffmpeg.org/wiki/Concatenate を参照)、現在は動作しているようです。ほら!
理由を答えるには、 https://ffmpeg.org/ffmpeg-all.html#Options-35 から:
このデマルチプレクサは、次のオプションを受け入れます。
safe
1に設定すると、安全でないファイルパスを拒否します。ファイルパスがプロトコル仕様を含まず、相対であり、すべてのコンポーネントにポータブル文字セットの文字(文字、数字、ピリオド、アンダースコア、ハイフン)のみが含まれ、コンポーネントの先頭にピリオドがない場合、ファイルパスは安全と見なされます。0に設定すると、任意のファイル名が受け入れられます。
デフォルトは1です。
-1は、形式が自動的にプローブされた場合は1、それ以外の場合は0と同等です。
find .
がファイルの前に./
を置くことがわかりました。 -safe 0
を使用したくない場合の解決策については、 nix "find"の先頭の "./"を削除する方法? を参照してください。
答えについてはまったく正しいです。コマンドを表示するだけなので、他の場所に-safe 0を追加しないでください。
ffmpeg.exe -f concat -safe 0 -i "clips.txt" -c copy "video.mp4"
私の場合、二重引用符でエラーが発生します。
ffmpeg -f concat -i concat.txt -c copy output.m4a
コマンドは、concat.txt
に連結する入力ファイルのリストが含まれています。
安全でないファイル名(二重引用符):
file "song1.m4a"
file "song2.m4a"
安全なファイル名(単一引用符):
file 'song1.m4a'
file 'song2.m4a'
安全なファイル名(引用符なし):
file song1.m4a
file song2.m4a
単一引用符および引用符なしは、スペースがない場合にのみ機能します( '/'は問題ありません)。ファイル名/パスにスペースが含まれる場合は、-safe 0
が必要です。