是否有人知道是否可以使用ffmpeg反向编码视频? (因此产生的视频反向播放?)
我想我可以通过为每个帧生成图像(所以图像文件夹标记为1.jpg,2.jpg等),然后编写脚本来更改图像名称,然后从这些文件中重新编码ivdeo
有谁知道更快的方式?
这是一个FLV视频。
谢谢
答案 0 :(得分:18)
不可以使用ffmpeg对视频进行反向编码而不将其转储到图像然后再返回。网上有很多指南可以告诉你如何操作,特别是:
和
后者如下:
转储所有视频帧
$ ffmpeg -i input.mkv -an -qscale 1 %06d.jpg
转储音频
$ ffmpeg -i input.mkv -vn -ac 2 audio.wav
反向音频
$ sox -V audio.wav backwards.wav reverse
Cat视频帧与FFmpeg的输入顺序相反
$ cat $(ls -r *jpg) | ffmpeg -f image2pipe -vcodec mjpeg -r 25 -i - -i backwards.wav -vcodec libx264 -vpre slow -crf 20 -threads 0 -acodec flac output.mkv
使用mencoder对PAL dv进行去隔行,并将帧速率从25加倍到50,然后输入到FFmpeg。
$ mencoder input.dv -of rawvideo -ofps 50 -ovc raw -vf yadif=3,format=i420 -nosound -really-quiet -o - | ffmpeg -vsync 0 -f rawvideo -s 720x576 -r 50 -pix_fmt yuv420p -i - -vcodec libx264 -vpre slow -crf 20 -threads 0 video.mkv
答案 1 :(得分:10)
我根据Andrew Stubbs的回答
创建了一个脚本https://gist.github.com/hfossli/6003302
可以这样使用
./ffmpeg_sox_reverse.sh -i Desktop/input.dv -o test.mp4
答案 2 :(得分:0)
一个问题是帧速率可能因视频而异,许多答案取决于特定的帧速率(例如“-r 25”表示每秒 25 帧)。如果视频中的帧率不同,会导致反转的音视频不同步。
您当然可以每次手动调整帧率(您可以通过运行 ffmpeg -i video.mkv 获得帧率并查找 fps 前面的数字,这有时是一个十进制数,例如 23.98)。但是使用一些 bash 代码,您可以轻松提取 fps,将其存储在一个变量中,并自动将其传递给程序。
基于此,我创建了以下 bash 脚本来执行此操作。只需 chmod +x 并运行它 ./make-reversed-video.sh input.mkv output.mkv
。代码如下:
#!/bin/bash
#Partially based on https://nhs.io/reverse/, but with some modifications, including automatic extraction of the frame rate.
#Get parameters.
VIDEO_FILE=$1
OUTPUT_FILE=$2
TEMP_FOLDER=$3
echo Using input file: $VIDEO_FILE
echo Using output file: $OUTPUT_FILE
mkdir /tmp/create_reversed_video
#Get frame rate.
FRAME_RATE=$(ffmpeg -i "$VIDEO_FILE" 2>&1 | grep -o -P '[0-9\\. ]+fps' | grep -o -P '[0-9\\.]+')
echo The frame rate is: $FRAME_RATE
#Extract audio from video.
ffmpeg -i "$VIDEO_FILE" -vn -ac 2 /tmp/create_reversed_video/audio.wav
#Reverse the audio.
sox -V /tmp/create_reversed_video/audio.wav /tmp/create_reversed_video/backwards.wav reverse
#Extract each video frame as an image.
ffmpeg -i "$VIDEO_FILE" -an -qscale 1 /tmp/create_reversed_video/%06d.jpg
#Recombine into reversed video.
ls -1 /tmp/create_reversed_video/*.jpg | sort -r | xargs cat | ffmpeg -framerate $FRAME_RATE -f image2pipe -i - -i /tmp/create_reversed_video/backwards.wav "$OUTPUT_FILE"
#Delete temporary files.
rm -rf /tmp/create_reversed_video
我已经对它进行了测试,它在我的 Ubuntu 18.04 机器上运行了很多视频(在安装了像 sox 这样的依赖项之后)。请告诉我它是否适用于其他 Linux 发行版和版本。