質問: ### 前提・実現したいこと 動画処理の初心者です。 エンコードなしの無劣化ファイルの保持と、エンコード負荷による電気代の節約を実現するため、 動画ファイルの生成とエンコード処理を別の過程として扱いたいです。 具体的には、ffmpegによってスクショの動画のファイルを生成し、 そのファイルをh264エンコードをします。 1.エンコードなしの無劣化ファイルの生成 ``` width=横幅 height=縦幅 position_x=画面左上からの横座標 position_y=画面左上からの縦座標 ffmpeg -f x11grab -show_region 1 -s "$width"x"$height" -r 30 -i :0.0+"$position_x","$position_y" -vcodec copy -acodec copy -t $time test.mp4 ``` 2.originファイルに対するエンコード処理 ``` ffmpeg -i test.mp4 -vcodec copy -acodec copy test-out.mp4 ``` ### 発生している問題・エラーメッセージ 上記の2.エンコード処理をすると、以下のエラーがでる。 ``` Decoder (codec none) not found for input stream #0.0 ``` しかし、vcodecをlibx264にすると、正しく再生できる。ただし、cpu使用率が増えるので、動画生成時はエンコード処理をしたくない。 ### 試したこと 自分はまだ動画ファイルの仕組みを理解しきれていませんが、 エラー文のcodec noneより、はじめにエンコーディング?codec?を指定しないと、 動画ファイルは読み込めないのかなと思いました。 そこで、codec判定法として、このサイトより、 ``` ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \ -of default=noprint_wrappers=1:nokey=1 test.mp4 ``` をやると、unknownと表示されます。一方、はじめに -vcodec libx264としたファイルはh264となります。 つまり、はじめにcodecを指定しないと動画ファイルは破損したも同じということのようです。 ### 補足情報(FW/ツールのバージョンなど) ffmpeg
回答: ``` -vcodec copy -acodec copy ``` これは映像コーデック変換なし、音声コーデック変換なしですので、「1.エンコードなしの無劣化ファイルの生成」には無効なオプションです。 無劣化(非圧縮)にしたければ、しかるべきパラメータを指定されるべきかと。