• 締切済み

FFMPEGで無劣化コピーで映像が遅れます

FFMPEGで無劣化コピーをしたのですが映像が遅れます。 開始数秒映像がない時間ができてしまいます。 何故でしょうか。ソースコードは以下になります。 元のファイルはmp4です。 set filename1=%* set filename2=%~p1%~n1" ".mp4 ffmpeg.exe -i "%filename1%" -ss 20 -c copy "%filename2%"

みんなの回答

  • kunuso
  • ベストアンサー率25% (221/879)
回答No.2

こちらでも手持ちの動画で試しにやってみたところ、同様の症状が出た。 確かに数秒止まる。 http://santa.ldblog.jp/archives/41750596.html どうしてもffmpegでやりたいなら、コチラが参考になるかも? 流石に最後まで全部は試していないが、「1.切り取りに使うffmpegのコマンド」だけ試した限りでは、大差ない結果だった。 まあ、実行環境はページに載っているのとは全然違うから、しょうがないのかもしれないが。 ただ、このページ読む限りこの処理をffmpegでやるのは、向いて無さそうな感じなので、別のツール使った方が良い気がする。 お力になれませんで・・・。

  • kunuso
  • ベストアンサー率25% (221/879)
回答No.1

開始数秒映像が無いという事は、-ss 20 が原因では? -ss [開始時間]:トリミングの開始位置。 https://jp.videoproc.com/edit-convert/cut-videos-using-ffmpeg.htm#%E6%8C%87%E5%AE%9A%E6%99%82%E9%96%93%E3%81%A7FFmpeg%E3%81%A7%E5%8B%95%E7%94%BB%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99 なので、それだと「開始20秒の地点から最後まで無劣化切り出す」という設定になっていると思われる。

maruboro007
質問者

補足

説明不足だったのですが、切り出すのが目的です。1秒にした場合でも6秒まで映像が流れません。音声は流れます。音ずれはしません。

関連するQ&A

  • ffmpegで時間カットパッチの作り方教えて下さい

    フォルダ内の全てのMP3の開始から5~305秒を残すパッチファイルを作りたいのですが、処理しませんでした。 @echo off for %%f in (dir /a *.mp3) do (ffmpeg -i "ss 5 -t 300.mp3" -c copy)

  • AVIのMP4への無劣化変換

    Perianが開発中止になると聞き、手持ちのAVIファイルの映像を無劣化で MP4に変換しようと考えました。 AVIファイルの映像トラックはxvidかH264で、音声トラックはmp3です。 また、エンコードにはmencoderが使われていました。 最終目的として、アプリケーションで開かずに、クイックルックで見ること を考えています。 そこで、ffmpegを用いて以下のように変換しました。 H.264動画の場合: ffmpeg -i hoge.avi -c:v copy -strict experimental -cutoff 17000 -aprofile aac_low -f mp4 hoge.mp4 xvid動画の場合: ffmpeg -fflags +genpts -i fuga.avi -c:v copy -strict experimental -cutoff 17000 -aprofile aac_low -f mp4 fuga.mp4 しかし出来上がった動画をクイックルックするとスライドバーでの早送り (シーク)が引っかかり、またスライドバーでジャンプさせるとコマ飛び します。 ffmpegで映像トラックだけをaviコンテナとして取り出したものをクイック ルックしても、上記の現象は起きません。 なお、avidemx2というソフトで映像はコピー、音声はAACに変換する設定 でmp4コンテナ化を試しましたが、こちらもクイックルックするとシークや ジャンプがスムーズではありませんでした。 出来上がったファイルをQuickTime Playerで開いてシークすると問題はない ようでした。 何故、クイックルックで正常に早送りできないのでしょうか? そもそもmencoderで作成されたAVIの映像トラックを、そのままコピーする ことが問題なのでしょうか? ご教授戴きたく思います。 当方の環境は MacBook Late 2010 250GB HDD メモリ8GB、Mac OS X 10.7.4です。 ffmpegは、http://ffmpegmac.net/から入手しました。

    • 締切済み
    • Mac
  • Powershellでtsファイルをmp4に変換

    Powershellでtsファイルを無劣化でmp4に変換する事が出来そうなので 下記の記事を参考にスクリプト(test.ps1)を作成してみました。 http://pcsos.blog89.fc2.com/blog-entry-243.html '-------------------------------------------------- # MP4・MPG・WMV・TS ⇒ H.264 MP4 (PowerShell ファイル名スペース対応) $TARGET_DIR="C:\Users\ssd\Desktop\変換前\" $DEST_DIR="C:\Users\ssd\Desktop\変換後\" $FFMPEG="C:\ffmpeg-2022-12-11\bin\ffmpeg.exe" $FFMPEG_OPT_VIDEO="-c:v copy" $FFMPEG_OPT_AUDIO="-c:a copy" function h264enc { if ($args.count -ge 1) { $arg="-i '$args.mpg' -movflags faststart $FFMPEG_OPT_VIDEO $FFMPEG_OPT_AUDIO $DEST_DIR'$args.mp4'" powershell -Command "$FFMPEG $arg" } else { "エンコード対象のファイルを指定してください。" } } cd $TARGET_DIR Get-ChildItem | ForEach-Object { h264enc $_.Basename } pause '-------------------------------------------------- 変換されそうにはなりますが、   mpegを書き出し時に 「No such file or directory」とエラーになります。 エラーの修正をお願いします。

  • バッチファイルのループ処理

    ffmpegを使いflvファイルからループを使いの画像を取得したいと考えております。 以下のバッチファイルを使用して起動して、5秒おきにループは10回回り、画像が10個出力されるはずですが、1枚しかできません。 --------------------- set fname=time:/=% set hour=%time:~0,2% set minute=%time:~3,2% set second=%time:~6,2% FOR /L %%i IN (1,1,10) DO ( ffmpeg -i yakei.flv -ss 1 -vframes 1 -f image2 %hour%時%minute%分%second%秒.jpg ping localhost -n 5 > null ) --------------------- どうしたら画像10個出力されますでしょうか? ご教授宜しくお願いします。

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • FFmpegでのサムネイル作成について

    現在、動画ファイルからサムネイルを切り出す処理をFFmpegを用いて行おうと考えております。しかし、aviやflvなどからはサムネイル切り出しが可能なのですが、mpg形式の動画ファイルからサムネイルが切り出すことができないのです。ネットを漁っても解決策が見つからず困っております。 そこで質問なのですが、FFmpegでmpg形式からサムネイルを切り出すことは不可能なのでしょうか? 出力結果は下記に示します。 --------------------------------------------------------------------- D:\ffmpeg>ffmpeg.exe -vframes 1 -ss 20 -an -deinterlace -i input.mpg -f image2 -s 120x90 -y output.jpg FFmpeg version SVN-r13283, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --enable-memalign-hack --enable-postproc --enable-swscale --ena ble-gpl --enable-liba52 --enable-libfaac --enable-libfaad --enable-libgsm --enab le-libmp3lame --enable-libnut --enable-libvorbis --enable-libtheora --enable-lib xvid --enable-libx264 --disable-ffserver --disable-ffplay --enable-avisynth --en able-small --enable-pthreads --extra-ldflags=-static --extra-cflags=-mtune=gener ic -mno-sse2 -fno-strict-aliasing libavutil version: 49.6.0 libavcodec version: 51.57.0 libavformat version: 52.14.0 libavdevice version: 52.0.0 built on May 25 2008 02:25:56, gcc: 4.3.0 Input #0, mpeg, from 'input.mpg': Duration: 00:05:22.27, start: 0.180000, bitrate: 1388 kb/s Stream #0.0[0x1e0]: Video: mpeg1video, yuv420p, 352x240 [PAR 200:219 DAR 880:657], 1150 kb/s, 29.97 tb(r) Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, stereo, 224 kb/s Output #0, image2, to 'output.jpg': Stream #0.0: Video: mjpeg, yuvj420p, 120x90 [PAR 220:219 DAR 880:657], q=2-31, 200 kb/s, 29.97 tb(c) Stream mapping: Stream #0.0 -> #0.0 Press [q] to stop encoding frame= 0 fps= 0 q=0.0 Lsize= -0kB time=10000000000.00 bitrate= -0.0kbi ts/s video:0kB audio:0kB global headers:0kB muxing overhead -1.#INF00% --------------------------------------------------------------------- となっておりました。 質問にお答えいただけると幸いです。 よろしくお願いいたします。

  • ファイル名を正規表現にかける際の文字コードについて

    Windows XP, ActivePerl5.8.8 です。 windows 上にあるファイルの名前に沿ってフォルダに振り分けしたく、 以下のようなコードを書きましたが、 ファイル名に日本語の「ソ」などがある場合に 処理がおかしくなります。 文字コードの問題だと思いますが、どうすれば解決できるでしょうか。 ++++ここからソース++++++ #!c:/perl/bin/perl.exe use 5.008; use strict; use warnings; use File::Basename; use File::Copy; use File::Path; my $newdir = "C:/tmp"; for my $filename ( @ARGV ){ main($filename); print "complete.\n"; } sub main{ my ($filename) = @_; my($basename, $basedir) = fileparse($filename); my($name1, $name2, $ext) = $basename =~ /^(.*) - (.*)(\.[a-zA-Z0-9]+)$/; mkdir "${newdir}/${name1}"; File::Copy::copy( "${filename}", "${newdir}/${name1}/${basename}" ) or die "${filename} : Cannot copy"; } 1;

    • ベストアンサー
    • Perl
  • Excelでタイムコード(映像)の計算式を教えてください。

    こんにちわ。Excelでのタイムコード(映像)計算について教えて下さい。 時間の計算式はあるのですが、タイムコードということになると式が分かりません。 Excelで、タイムコードの計算式を作りたいのです。 例えば、イン点からアウト点までがあり、そのデュレーションを出したいのです。 映像はDVCAM等を使用していて、タイムコードは、hh:mm:ss:ffで、1秒は30フレームです。 フリーソフトでタイムコード電卓があるので、それを使っているのですが、一個一個計算して出しているので、Excelで数式でできれば効率がいいなぁ~?と思ってます。 よろしくお願いします。

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • ExcelのOpenTextで作ったシートのコピー

    Excel2010のVBAでテキストファイルを読み込むと新しいブックに読み込まれるので、新しいブックのシートをVBAのコードがあるブックにコピーしたいのですが CSVファイル読み込み時に使う Workbooks.Open の場合には  Dim wb As Workbook  Set wb = Workbooks.Open(Filename:="C:\test\test1.csv")  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False のような感じでコピーすることができたのですが テキストファイル読み込み時に使う Workbooks.OpenText の場合には  Dim wb As Workbook  Set wb = Workbooks.OpenText Filename:= _    "C:\test\test1.txt", _    Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _    , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _    Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), _    Array(9, 2)), TrailingMinusNumbers:=True  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False とすると、OpenTextの箇所で「Workbooks.OpenText Functionまたは変数が必要です」というコンパイルエラーが発生します。Set wb = Workbooks.OpenText (Filename:=・・・・True)のように括弧でくくっても同様のエラーがでてしまいます。 Microsoft Office 14.0 Object Libratyの参照設定はチェックされています。 Workbooks.OpenText Filename:= _・・・=Trueの部分はマクロの記録の機能で生成したコードです。 このような場合、どのように記述すればよいのでしょうか。 よろしくお願いします。